個人名だけを特定する必要がある文があります。
例えば:
sentence = "Larry Page is an American business magnate and computer scientist who is the co-founder of Google, alongside Sergey Brin"
以下のコードを使用してNERを識別しました。
from nltk import Word_tokenize, pos_tag, ne_chunk
print(ne_chunk(pos_tag(Word_tokenize(sentence))))
私が受け取った出力は次のとおりです。
(S
(PERSON Larry/NNP)
(ORGANIZATION Page/NNP)
is/VBZ
an/DT
(GPE American/JJ)
business/NN
magnate/NN
and/CC
computer/NN
scientist/NN
who/WP
is/VBZ
the/DT
co-founder/NN
of/IN
(GPE Google/NNP)
,/,
alongside/RB
(PERSON Sergey/NNP Brin/NNP))
次のようなすべての人の名前を抽出したい
Larry Page
Sergey Brin
これを達成するために、私はこれを参照しました link そしてこれを試しました。
from nltk.tag.stanford import StanfordNERTagger
st = StanfordNERTagger('/usr/share/stanford-ner/classifiers/english.all.3class.distsim.crf.ser.gz','/usr/share/stanford-ner/stanford-ner.jar')
しかし、私はこのエラーを受け取り続けます:
LookupError: Could not find stanford-ner.jar jar file at /usr/share/stanford-ner/stanford-ner.jar
このファイルはどこでダウンロードできますか?
上記のように、リストまたは辞書の形式で期待している結果は次のとおりです。
Larry Page
Sergey Brin
これらを注意深く読んでください:
単にコピーして貼り付けるのではなく、解決策を理解してください。
ターミナル内:
pip install -U nltk
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2016-10-31.Zip
unzip stanford-corenlp-full-2016-10-31.Zip && cd stanford-corenlp-full-2016-10-31
Java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000
Pythonの場合
from nltk.tag.stanford import CoreNLPNERTagger
def get_continuous_chunks(tagged_sent):
continuous_chunk = []
current_chunk = []
for token, tag in tagged_sent:
if tag != "O":
current_chunk.append((token, tag))
else:
if current_chunk: # if the current chunk is not empty
continuous_chunk.append(current_chunk)
current_chunk = []
# Flush the final current_chunk into the continuous_chunk, if any.
if current_chunk:
continuous_chunk.append(current_chunk)
return continuous_chunk
stner = CoreNLPNERTagger()
tagged_sent = stner.tag('Rami Eid is studying at Stony Brook University in NY'.split())
named_entities = get_continuous_chunks(tagged_sent)
named_entities_str_tag = [(" ".join([token for token, tag in ne]), ne[0][1]) for ne in named_entities]
print(named_entities_str_tag)
[でる]:
[('Rami Eid', 'PERSON'), ('Stony Brook University', 'ORGANIZATION'), ('NY', 'LOCATION')]
このヘルプも見つかるかもしれません: リストの解凍/ペアのタプルを2つのリスト/タプルに
そもそも、jarファイルと残りの必要なファイルをダウンロードする必要があります。リンクをたどってください: https://Gist.github.com/troyane/c9355a3103ea08679baf 。コードを実行してファイルをダウンロードします(最後の数行を除く)。ダウンロード部分が完了すると、抽出部分を実行する準備が整います。
from nltk.tag.stanford import StanfordNERTagger
st = StanfordNERTagger('/home/saheli/Downloads/my_project/stanford-ner/english.all.3class.distsim.crf.ser.gz',
'/home/saheli/Downloads/my_project/stanford-ner/stanford-ner.jar')