2013-10-21 6 views
9

मैं नामों और संगठनों के नामों जैसे एसएमएस के ग्रंथों के बहुत छोटे हिस्सों से उचित संज्ञाएं निकालने की कोशिश कर रहा हूं, एनएलटीके Finding Proper Nouns using NLTK WordNet के साथ उपलब्ध मूल पार्सर्स सक्षम हैं संज्ञाओं पाने के लिए लेकिन समस्या यह है कि जब हम व्यक्तिवाचक संज्ञाओं नहीं बड़े अक्षर से शुरू होने वाले मिलता है, इस तरह सुमित जैसे नामों के ग्रंथों के लिए व्यक्तिवाचक संज्ञाओं के रूप में मान्यता नहीं मिलता हैउचित संज्ञाएं (नाम और संगठन) प्राप्त करने के लिए पार्स टेक्स्ट - पायथन nltk

>>> sentence = "i spoke with sumit and rajesh and Samit about the gridlock situation last night @ around 8 pm last nite" 
>>> tagged_sent = pos_tag(sentence.split()) 
>>> print tagged_sent 
[('i', 'PRP'), ('spoke', 'VBP'), ('with', 'IN'), **('sumit', 'NN')**, ('and', 'CC'), ('rajesh', 'JJ'), ('and', 'CC'), **('Samit', 'NNP'),** ('about', 'IN'), ('the', 'DT'), ('gridlock', 'NN'), ('situation', 'NN'), ('last', 'JJ'), ('night', 'NN'), ('@', 'IN'), ('around', 'IN'), ('8', 'CD'), ('pm', 'NN'), ('last', 'JJ'), ('nite', 'NN')] 
+0

नामित इकाई पहचानकर्ता को लागू करने से पहले आप सच करने का प्रयास कर सकते हैं। –

उत्तर

1

आप python-nameparser पर एक नज़र रखना चाहते हैं। यह नामों के capitalization अनुमान लगाने का प्रयास करता है। अपूर्ण उत्तर के लिए खेद है लेकिन मुझे पायथन-नेमपर्सर का उपयोग करके ज्यादा अनुभव नहीं है।

शुभकामनाएँ!

+1

वैसे यह नेटगेंडर की तरह ही नाम का नाम है, लंबे समय तक जैसा कि आपके पास एक नाम है, आप इसे पार्स कर सकते हैं, लेकिन विचारों को निकालने का विचार है, भले ही वे "sumit" या "Sumit" या "SUMIT" जैसे लिखे गए हों –

7

के लिए एक बेहतर तरीका नहीं है लोगों और संगठनों के नाम निकालें

from nltk import pos_tag, ne_chunk 
from nltk.tokenize import SpaceTokenizer 

tokenizer = SpaceTokenizer() 
toks = tokenizer.tokenize(sentence) 
pos = pos_tag(toks) 
chunked_nes = ne_chunk(pos) 

nes = [' '.join(map(lambda x: x[0], ne.leaves())) for ne in chunked_nes if isinstance(ne, nltk.tree.Tree)] 

हालांकि सभी नामांकित इकाई पहचानकर्ता त्रुटियां करते हैं। यदि आप वास्तव में किसी भी उचित नाम को याद नहीं करना चाहते हैं, तो आप उचित नामों के एक नियम का उपयोग कर सकते हैं और यह जांच सकते हैं कि नाम dict में निहित है या नहीं।

+0

धन्यवाद @mbatchkarov अगर मेरे पास नामों का एक विशाल शब्दकोश है (जो मेरे पास है) मैं पाइथन में एक कैसे बना सकता हूं, कृपया सलाह दें, आपका उत्तर अच्छा दिखता है मैं इसे आजमाउंगा –

0

इस कोड की कोशिश

def get_entities(self,args): 
    qry = "who is Mahatma Gandhi" 
    tokens = nltk.tokenize.word_tokenize(qry) 
    pos = nltk.pos_tag(tokens) 
    sentt = nltk.ne_chunk(pos, binary = False) 
    print sentt 
    person = [] 
    for subtree in sentt.subtrees(filter=lambda t: t.node == 'PERSON'): 
     for leave in subtree.leaves(): 
      person.append(leave) 
    print "person=", person 

आप व्यक्ति, संगठन, इस ne_chunk() फ़ंक्शन की मदद से स्थानों के नाम प्राप्त कर सकते हैं। आशा करता हूँ की ये काम करेगा। धन्यवाद

संबंधित मुद्दे