こんにちは,しまさん(@shimasan0x00)です.
自然言語処理では私はまっさきに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なのでまだまだ改良され,より使いやすくなるのではないかと思います.
これからがとても楽しみです.