簡體   English   中英

解析文本以獲取專有名詞(名稱和組織)-python nltk

[英]Parse text to get the proper nouns (names and organizations) - python nltk

我正在嘗試從非常小的文本塊(如 sms)中提取專有名詞,如名稱和組織名稱中的專有名詞,nltk 提供的基本解析器使用 NLTK WordNet 查找專有名詞能夠獲得名詞,但問題是當我們獲得專有名詞時以大寫字母開頭,對於這樣的文本,像 sumit 這樣的名字不會被識別為專有名詞

>>> 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')]

有更好的方法來提取人員和組織的名稱

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)]

然而,所有命名實體識別器都會出錯。 如果你真的不想錯過任何專有名稱,你可以使用專有名稱的字典並檢查名稱是否包含在字典中。

您可能想看看python-nameparser 它也試圖猜測名稱的大小寫 抱歉回答不完整,但我沒有太多使用 python-nameparser 的經驗。

祝你好運!

試試這個代碼

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() 函數的幫助下,您可以獲取人員、組織和地點的名稱。 希望它有幫助。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM