2017-08-30 9 views
1

私は単純な文法に基づいたパーサーに取り組んでいます。このために、まず入力をトークン化する必要があります。私のテキストでは、ニューヨーク、サンフランシスコなど、多くの都市が現れています。私がちょうど標準のnltk word_tokenizerを使用すると、これらの都市はすべて分割されます。NLTKはトークン化しますが、名前付きエンティティを分割しません。

from nltk import word_tokenize 
word_tokenize('What are we going to do in San Francisco?') 

電流出力:

['What', 'are', 'we', 'going', 'to', 'do', 'in', 'San', 'Francisco', '?'] 

所望の出力:

私は名前付きエンティティを分割せずに、このような文章をトークン化するにはどうすればよい
['What', 'are', 'we', 'going', 'to', 'do', 'in', 'San Francisco', '?'] 

答えて

2

結果を歩くと、チャンクトークンを一緒に参加し、その後、名前付きエンティティを特定します

>>> from nltk import ne_chunk, pos_tag, word_tokenize 
>>> toks = word_tokenize('What are we going to do in San Francisco?') 
>>> chunks = ne_chunk(pos_tag(toks)) 
>>> [ w[0] if isinstance(w, tuple) else " ".join(t[0] for t in w) for w in chunks ] 
['What', 'are', 'we', 'going', 'to', 'do', 'in', 'San Francisco', '?'] 

chunksの各要素は(word, pos)タプルまたはチャンクの一部を含むTree()のいずれかです。

関連する問題