GiNZA はmegagonlabs が開発している日本語の形態素解析器です。 フレームワークとしてspaCy をFramework として利用しています。 今日2.0 がリリースされたので、インストールとユーザ辞書について触っていきたいと思います。
前提
今回、pyenv でPython 3.7.3 をインストールした環境でのコードを書いていきます。
インストール手順
インストール手順はこちらのページにあります。
2通りのインストール方法があるみたいです。
1つは、圧縮ファイルをダウンロードして、そのあとpip でインストールする方法です。
そして、もう一つはリンクをpip インストールコマンドで指定する方法です。
今回は、後者の方でインストールをしてみました。
pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"
この場合、 latest
がダウンロードされるみたいです。
バージョンを指定する場合は、 latest
を指定すれば良さそう。
形態素解析
import spacy nlp = spacy.load('ja_ginza') doc = nlp('依存構造解析の実験を行っています。') for sent in doc.sents: for token in sent: print(token.i, token.orth_, token.lemma_, token.pos_, token.tag_, token.dep_, token.head.i) print('EOS')
実行結果はこちらになりました。
0 依存 依存 NOUN 名詞-普通名詞-サ変可能 compound 2 1 構造 構造 NOUN 名詞-普通名詞-一般 compound 2 2 解析 解析 NOUN 名詞-普通名詞-サ変可能 nmod 4 3 の の ADP 助詞-格助詞 case 2 4 実験 実験 NOUN 名詞-普通名詞-サ変可能 obj 6 5 を を ADP 助詞-格助詞 case 4 6 行っ 行う VERB 動詞-一般 ROOT 6 7 て て SCONJ 助詞-接続助詞 mark 6 8 い 居る AUX 動詞-非自立可能 aux 6 9 ます ます AUX 助動詞 aux 6 10 。 。 PUNCT 補助記号-句点 punct 6 EOS
恐らく、 token.i
が出力のインデックス、 token.orth_
が表層、 token.lemma_
が原型、 token.pos_
が英語での品詞、 token.tag_
が日本語での品詞と活用のようです。
token.dep_
、 token.head.i
はよくわかっていないので、後日調べて記事にしたいですが、
token.head.i
は係り受け先の id
のように見えます。
ユーザ辞書
例えば 足利義満は金閣寺を建立しました。
のような文章を形態素解析をしたい場合に、以下のような結果になります。
0 足利 足利 PROPN 名詞-固有名詞-人名-姓 compound 1 1 義満 義満 PROPN 名詞-固有名詞-人名-名 nsubj 6 2 は は ADP 助詞-係助詞 case 1 3 金閣 金閣 NOUN 名詞-普通名詞-一般 compound 4 4 寺 寺 NOUN 接尾辞-名詞的-一般 obj 6 5 を を ADP 助詞-格助詞 case 4 6 建立 建立 VERB 名詞-普通名詞-サ変可能 ROOT 6 7 し 為る AUX 動詞-非自立可能 aux 6 8 まし ます AUX 助動詞 aux 6 9 た た AUX 助動詞 aux 6 10 。 。 PUNCT 補助記号-句点 punct 6 EOS
このようにデフォルトの辞書で形態素解析を行うと 金閣寺
がまとまった名詞として扱われることを期待していた場合に、異なった結果になる場合があります。
このような場合にユーザ辞書を利用します。
GiNZA は SudachiPy
を利用しているようなので、ユーザ辞書は SudachiPy
の書き方に従って書けばユーザ辞書が使えそうです。
ユーザ辞書を扱うまでをブログの内容にしたかったのですが、 次回にまわしたいと思います。