夢みるアドセンス

情報系の雑記 :インターン行きたいので連絡ください hohoku55_at_yahoo.co.jp

Python3でstanford nlp使って品詞タグ付けをする

stanford nlpのPython3導入メモ。

 

大体ここ

Stanford Corenlp をPythonで使う1(インストール〜ダンプ) - ジオマーリン

を参考にしました。

 

stanford nlpは英語の自然言語処理のライブラリ。日本語は扱えない。

 

まず、pipでcorenlp-pythonをインストールしておく。これはjavaで書かれてるcorenlpをpythonで使えるようにしてくれる。

pip3 install corenlp-python

・使ってみる 
import corenlp

parser = corenlp.StanfordCoreNLP(corenlp_path="/usr/local/stanford-corenlp-full-2014-08-27",properties="/user.properties")
result = parser.parse("I saw a man last weekend")
print(result)

まずは、元のcorenlpをダウンロードしておいて適当なところにおいておく。

http://nlp.stanford.edu/software/stanford-corenlp-full-2014-08-27.zip

その場所をcore_pathに記述。

さらに、user.propertiesを作り、必要な処理を記入しておく必要がある。たとえば

annotators = tokenize, ssplit

は入力文を単語に区切って(tokenize)、文に分ける(ssplit)処理をする。さらに、品詞タグ付けを行いたい場合はposを記述する。

各annotatorには依存関係がある。ex)posはtokenize,ssplitを行わないとできない

詳しくは以下に書いてある。

Stanford CoreNLPをPythonから使う - Qiita


あとは.parse()で文章をパースできる。

lemmmaまでやったけど、結構時間がかかった。

 

{'sentences': [{'dependencies': [],
                'indexeddependencies': [],
                'parsetree': [],
                'text': 'I saw a man last weekend',
                'words': [['I',
                           {'CharacterOffsetBegin': '0',
                            'CharacterOffsetEnd': '1',
                            'Lemma': 'I',
                            'PartOfSpeech': 'PRP'}],
                          ['saw',
                           {'CharacterOffsetBegin': '2',
                            'CharacterOffsetEnd': '5',
                            'Lemma': 'see',
                            'PartOfSpeech': 'VBD'}],
                          ['a',
                           {'CharacterOffsetBegin': '6',
                            'CharacterOffsetEnd': '7',
                            'Lemma': 'a',
                            'PartOfSpeech': 'DT'}],
                          ['man',
                           {'CharacterOffsetBegin': '8',
                            'CharacterOffsetEnd': '11',
                            'Lemma': 'man',
                            'PartOfSpeech': 'NN'}],
                          ['last',
                           {'CharacterOffsetBegin': '12',
                            'CharacterOffsetEnd': '16',
                            'Lemma': 'last',
                            'PartOfSpeech': 'JJ'}],
                          ['weekend',
                           {'CharacterOffsetBegin': '17',
                            'CharacterOffsetEnd': '24',
                            'Lemma': 'weekend',
                            'PartOfSpeech': 'NN'}]]}]}