KNP¶
KNP は日本語の格解析モデルです. Camphrは,knpの解析結果をspaCyで扱うための機能を提供しています.
- note
KNP is a Japanese language analysis model, and can be used only in Japanese. Therefore, this page is written in Japanese.
Installation¶
このページに従い, 事前にjumanppとknpをインストールしてください.
そのあと,以下のようにcamphrをインストールします.
$ pip install camphr[juman]
Usage¶
基本的な解析方法¶
>>> import camphr
>>> nlp = camphr.load("knp")
以下のようにすると,KNPの解析結果がdocに保存されます.
>>> doc = nlp("太郎はリンゴとみかんを食べながら富士山へ行った。")
形態素は Token
に対応します.
>>> list(doc)
[太郎, は, リンゴ, と, みかん, を, 食べ, ながら, 富士, 山, へ, 行った, 。]
基本句や文節に対応する Span
は,以下のようにして取ることができます.
>>> list(doc._.knp_tag_spans) # 基本句
[太郎は, リンゴと, みかんを, 食べながら, 富士, 山へ, 行った。]
>>> list(doc._.knp_bunsetsu_spans) # 文節
[太郎は, リンゴと, みかんを, 食べながら, 富士山へ, 行った。]
また,Token
から,それが含まれる文節や基本句の Span
を取得することができます.
>>> token = doc[8]
>>> print(token)
富士
>>> print(token._.knp_morph_tag) # 基本句
富士
>>> print(token._.knp_morph_bunsetsu) # 文節
富士山へ
係り受け関係¶
係り受け関係は以下のようにして可視化できます.
>>> import spacy
>>> spacy.displacy.render(doc)
係り受け関係は以下のようにして取得できます.
>>> tag = sent._.knp_tag_spans[3] # 基本句
>>> print(tag.text)
食べながら
>>> print(tag._.knp_tag_children) # 係り受け先のリスト
[みかんを]
>>> print(tag._.knp_tag_parent) # 係り受け元
行った。
固有表現抽出 (NER)¶
NERの解析結果は,doc.ents
に格納されています.
>>> doc.ents
(太郎, 富士山)
名詞句抽出¶
名詞句は以下のようにして取得できます.
>>> doc = nlp("太郎は綺麗な花をみにいった")
>>> list(doc.noun_chunks)
[太郎, 綺麗な花]
並列名詞句抽出¶
並列名詞句は以下のようにして取得できます.
>>> nlp.add_pipe(nlp.create_pipe("knp_parallel_noun_chunker"))
>>> doc = nlp("金の斧と銀の斧と銅の斧で攻撃する")
>>> list(doc._.knp_parallel_noun_chunks)
[[金の斧, 銀の斧, 銅の斧]]
>>> doc = nlp("金の斧と銀の斧の職人と銅の斧の職人")
>>> list(doc._.knp_parallel_noun_chunks)
[[金の斧と銀の斧の職人, 銅の斧の職人]]
pyknp オブジェクトの取得¶
形態素オブジェクトは以下のように取得することができます.
pyknp の Morpheme
が入っています.
>>> token = doc[0]
>>> token._.knp_morph_element
<pyknp.juman.morpheme.Morpheme at 0x10eeed810>
pyknpの BList
を取得するには以下のようにします.
>>> sent = list(doc.sents)[0]
>>> sent._.knp_bunsetsu_list_
<pyknp.knp.blist.BList at 0x13e0cae50>
KNPの文節,基本句はspaCyの Span
として格納されています.
例えば全ての文節を取得したい場合,以下のようにします.
>>> sent._.knp_bunsetsu_spans
[太郎は, リンゴと, みかんを, 食べながら, 富士山へ, 行った。]
基本句についても同様に取得できます.
>>> sent._.knp_tag_spans
[太郎は, リンゴと, みかんを, 食べながら, 富士, 山へ, 行った。]
knpの解析結果 (features
) は ._.knp_tag_element.features
に格納されています.
例えば基本句のfeaturesは以下のようにして取得できます.
>>> tag._.knp_tag_element.features
{'助詞': True,
'用言': '動',
'係': '連用',
'レベル': 'A',
'区切': '0-5',
'ID': '〜ながら',
'連用要素': True,
'連用節': True,
'動態述語': True,
'正規化代表表記': '食べる/たべる',
'用言代表表記': '食べる/たべる',
'格関係2': 'ヲ:みかん',
'格解析結果': '食べる/たべる:動1:ガ/U/-/-/-/-;ヲ/C/リンゴ/1/0/1;ヲ/C/みかん/2/0/1;ニ/U/-/-/-/-;ト/U/-/-/-/-;デ/U/-/-/-/-;カラ/U/-/-/-/-;ヨリ/U/-/-/-/-;マデ/U/-/-/-/-;ヘ/U/-/-/-/-;時間/U/-/-/-/-;外の関係/U/-/-/-/-;修飾/U/-/-/-/-;ノ/U/-/-/-/-;トスル/U/-/-/-/-;ニヨル/U/-/-/-/-;ニツク/U/-/-/-/-;トイウ/U/-/-/-/-;ニナラブ/U/-/-/-/-;ニツヅク/U/-/-/-/-;ニアワセル/U/-/-/-/-'}