GiNZA 2.0 を触ってみた。

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 の書き方に従って書けばユーザ辞書が使えそうです。

ユーザ辞書を扱うまでをブログの内容にしたかったのですが、 次回にまわしたいと思います。