Python

[Python3]StanfordNLPを簡単に使ってみた[日本語]

こんにちは,しまさん(@nitkcdadon)です.

自然言語処理では私はまっさきにMecabあたりを思いつくのですが最近Twitter上でStanfordNLPがあることを知りました.

なので今回は自然言語処理ツールであるStanfordNLPを軽く使用してみたいと思います.

環境

macOS Mojave(10.14)

pyenv Python3.6.8

スポンサーリンク

StanfordNLP

StanfordNLPはPythonで使用することができる自然言語処理解析のパッケージです.

与えられた文字列を文章と単語のリストに変換し,それらの単語の基本形,品詞,形態素を分析します.

スポンサーリンク

StanfordNLPのインストール

StanfordNLPのインストールについてはpipを用いて行えます.

pip install stanfordnlp

次に言語モデルをインストールしていきます.

今回は英語と日本語に限定したいと思います.

コンソール上でPythonのインタラクティブシェルを起動して以下を実行します.

import stanfordnlp
stanfordnlp.download('en')
stanfordnlp.download('ja')

それぞれのモデルは約2GBあるのでダウンロードする際には注意してください.

私の環境下では大体40分程度かかりました.

StanfordNLPを使ってみる

サンプルコード

import stanfordnlp

#Pipelineの中を空白にしている場合はEN
nlp = stanfordnlp.Pipeline(lang="ja")
doc = nlp("Pythonも楽しいけど,スマブラやキングダムハーツもしたいなぁ.")
doc.sentences[0].print_tokens()
doc.sentences[0].print_dependencies()

実行結果

<Token index=1;words=[<Word index=1;text=Python;lemma=Python;upos=PROPN;xpos=_;feats=_;governor=3;dependency_relation=obl>]>
<Token index=2;words=[<Word index=2;text=も;lemma=も;upos=ADP;xpos=_;feats=_;governor=1;dependency_relation=case>]>
<Token index=3;words=[<Word index=3;text=楽しい;lemma=楽しい;upos=ADJ;xpos=_;feats=_;governor=13;dependency_relation=advcl>]>
<Token index=4;words=[<Word index=4;text=けど;lemma=けど;upos=SCONJ;xpos=_;feats=_;governor=3;dependency_relation=mark>]>
<Token index=5;words=[<Word index=5;text=,;lemma=,;upos=PUNCT;xpos=_;feats=_;governor=3;dependency_relation=punct>]>
<Token index=6;words=[<Word index=6;text=スマブラ;lemma=スマブラ;upos=PROPN;xpos=_;feats=_;governor=9;dependency_relation=nmod>]>
<Token index=7;words=[<Word index=7;text=や;lemma=や;upos=ADP;xpos=_;feats=_;governor=6;dependency_relation=cc>]>
<Token index=8;words=[<Word index=8;text=キングダム;lemma=キングダム;upos=PROPN;xpos=_;feats=_;governor=9;dependency_relation=compound>]>
<Token index=9;words=[<Word index=9;text=ハーツ;lemma=ハーツ;upos=NOUN;xpos=_;feats=_;governor=11;dependency_relation=obl>]>
<Token index=10;words=[<Word index=10;text=も;lemma=も;upos=ADP;xpos=_;feats=_;governor=9;dependency_relation=case>]>
<Token index=11;words=[<Word index=11;text=し;lemma=する;upos=VERB;xpos=_;feats=_;governor=13;dependency_relation=acl>]>
<Token index=12;words=[<Word index=12;text=た;lemma=た;upos=AUX;xpos=_;feats=_;governor=11;dependency_relation=aux>]>
<Token index=13;words=[<Word index=13;text=い;lemma=いる;upos=VERB;xpos=_;feats=_;governor=0;dependency_relation=root>]>
<Token index=14;words=[<Word index=14;text=なぁ;lemma=なぁ;upos=PART;xpos=_;feats=_;governor=13;dependency_relation=mark>]>
<Token index=15;words=[<Word index=15;text=.;lemma=.;upos=PUNCT;xpos=_;feats=_;governor=13;dependency_relation=punct>]>
('Python', '3', 'obl')
('も', '1', 'case')
('楽しい', '13', 'advcl')
('けど', '3', 'mark')
(',', '3', 'punct')
('スマブラ', '9', 'nmod')
('や', '6', 'cc')
('キングダム', '9', 'compound')
('ハーツ', '11', 'obl')
('も', '9', 'case')
('し', '13', 'acl')
('た', '11', 'aux')
('い', '0', 'root')
('なぁ', '13', 'mark')
('.', '13', 'punct')

実は最初はいつも使用しているPython3.6.7で実行しようとしていたのですが以下のエラーが出ました.

OSError: [Errno 22] Invalid argument
Exception: Vector file is not provided.

ん?OSError??と思ってStanfordNLPのページを見てみると,

Python with version <= 3.6.7 or <= 3.7.1の場合にエラーが出るとのことです.

しかもmacOS限定です.

StanfordNLPを使用したい場合は3.6.8にするか3.7.2のPython環境を用意する必要があります.

スポンサーリンク

さいごに

今回は自然言語処理ツールであるStanfordNLPを軽く使用してみました. 2019年2月19日現在ではversion 0.1.1なのでまだまだ改良され,より使いやすくなるのではないかと思います.

これからがとても楽しみです.

参考

ABOUT ME
しまさん
てくてくぷれいす運営者のしまさんです. 高専→大学編入してから行動的な大学生  自身の変化を求めてブログを始める グレープフルーツと本が大好物 IT系のことやブログ,高専や編入,大学生活に関することを発信中!!詳しいプロフィールはこちら≫ 投げ銭はコチラへ YouTubeはコチラへ 質問はコチラ