2013-07-16 25 views

答えて

37

私は適切な名詞を見つけるためにWordNetが必要ないと思いますが、私は品詞タグャーpos_tagを使用することをお勧めします。

NNPタグを探し、固有名詞を検索するには:

from nltk.tag import pos_tag 

sentence = "Michael Jackson likes to eat at McDonalds" 
tagged_sent = pos_tag(sentence.split()) 
# [('Michael', 'NNP'), ('Jackson', 'NNP'), ('likes', 'VBZ'), ('to', 'TO'), ('eat', 'VB'), ('at', 'IN'), ('McDonalds', 'NNP')] 

propernouns = [word for word,pos in tagged_sent if pos == 'NNP'] 
# ['Michael','Jackson', 'McDonalds'] 

あなたがMichaelJacksonので、非常に満足ではないかもしれないが2つのトークンに分割され、その後、あなたは、このような名前など、より複雑なものが必要になる場合がありますエンティティタガー。

右のように、penntreebankタグセットに記載されているように、所有名詞については、POSタグhttp://www.mozart-oz.org/mogul/doc/lager/brill-tagger/penn.htmlを探してください。しかし、しばしば、NNPの場合、タガーはPOSというタグを付けません。

、強欲な名詞を見つける( "str.endswith探しの ')またはstr.endswith(「S'")するには:または

from nltk.tag import pos_tag 

sentence = "Michael Jackson took Daniel Jackson's hamburger and Agnes' fries" 
tagged_sent = pos_tag(sentence.split()) 
# [('Michael', 'NNP'), ('Jackson', 'NNP'), ('took', 'VBD'), ('Daniel', 'NNP'), ("Jackson's", 'NNP'), ('hamburger', 'NN'), ('and', 'CC'), ("Agnes'", 'NNP'), ('fries', 'NNS')] 

possessives = [word for word in sentence if word.endswith("'s") or word.endswith("s'")] 
# ["Jackson's", "Agnes'"] 

、あなたはNLTK ne_chunkを使用することができますが、それはdoesnの「Tはあなたが文から取得固有名詞の種類を懸念している場合を除き、他の多くを行うように見える:

>>> from nltk.tree import Tree; from nltk.chunk import ne_chunk 
>>> [chunk for chunk in ne_chunk(tagged_sent) if isinstance(chunk, Tree)] 
[Tree('PERSON', [('Michael', 'NNP')]), Tree('PERSON', [('Jackson', 'NNP')]), Tree('PERSON', [('Daniel', 'NNP')])] 
>>> [i[0] for i in list(chain(*[chunk.leaves() for chunk in ne_chunk(tagged_sent) if isinstance(chunk, Tree)]))] 
['Michael', 'Jackson', 'Daniel'] 

ne_chunkを使用すると、少し冗長であり、それはあなたに所有格を取得していません。

+0

このソリューションをありがとう、私は昨年11月のコンソールスクリプトとして実装しました - https://github.com/dereckson/extract-proper-nouns - 小説から適切な名前のリストを正常にインポートしました。 – Dereckson

+0

答えがうまくいけばうれしいです。同じタスクを実行しようとしている他の人々のための準備ができているソリューションがあることを知ってうれしいです=) – alvas

+1

_unstructured_テキストから適切な名詞を抽出するのにnltkを使用できます名詞は**大文字と小文字が混在して**、文章は完全に文法的に正しい**ですか?ありがとう – user2436428

1

タガー、品詞タグャーです。このツールは、の品詞タグ(たとえば、固有名詞、有名な代名詞など)を文中の各単語に割り当てます。

NLTKは、いくつかのタガーが含まれています http://nltk.org/book/ch05.html

Stanford Part-Of-Speech Tagger(あまりにもオープンソース、より良い性能)もあります。

関連する問題