JUMAN・JUMAN++・KNPのPythonバインディングであるpyKNPの詳しい説明がNot Foundで手探り状態なので、後の作業の際に使うべくメモを残しておく。
import pyknp
py"KNP" ではないことに注意
knp = pyknp.KNP()
result = knp.parse(line)
def __init__(self, command='knp', server=None, port=31000, timeout=60, option='-tab', rcfile='', pattern=r'EOS', jumancommand='juman', jumanrcfile='', jumanpp=False)
command
KNPの実行コマンド名server
何度もKNPを呼び出すときのオーバーヘッドを軽減するためのサーバー機能だと思う(未確認)port
,timeout
server
時のオプション?(未確認)option
KNPに渡すオプション
オプションについてはKNPの主なオプションなどrcfile
KNPの設定ファイルへのパス?(未確認)pattern
jumancommand
JUMANの実行コマンド名
JUMAN++も使用でき、その場合はjumanpp
オプションをTrue
にするjumanrcfile
JUMANの設定ファイルへのパス?(未確認)jumanpp
JUMAN++を形態素解析に用いる際はTrue
にする
-
all(self)
KNPの出力の文字列っぽい -
bnst_list(self)
文節のリスト -
comment
後に続く解析文の文ID,KNPのバージョン,解析日,解析スコアに関する情報
参考: KNPへの入力
-
draw_bnst_tree(self, fh=None)
文節列の依存関係を木構造として表現して出力する.
fh
書き込むfileオブジェクト
-
draw_tag_tree(self, fh=None)
タグ列の依存関係を木構造として表現して出力する.
fh
書き込むfileオブジェクト
-
draw_tree(self, fh=None)
構文木を指定された fh に出力する.指定を省略した場合は,標準出力に出力される.
draw_bnst_tree
と同じ?fh
書き込むfileオブジェクト
-
draw_tree_leaves(self)
draw_tree
メソッドとの通信用のメソッドbnst_list
と==で比較したらTrueだった。 -
get_clause_starts(self, concat_clause_in_paren=False, disable_levelA=False)
-
get_tag_span(self, tag_id)
tag_id
に対応する基本句がparse元の文字列に位置する範囲のタプルtag_id
調べる基本句のID(前から順に0, 1, 2, ...?)
-
leaf_string(self, leaf)
leafに対応する構文木の葉の文字列(Jとかpとかvとかが挿入されている)leaf
調べたい文節または基本句またはpyknp.lnp.blist.BList
オブジェクト
(mrpf_list属性が必要っぽい)
-
mrpf_list(self)
形態素のリスト -
mrph_positions
それぞれの形態素がパース元の文字列で位置する範囲のリスト
n(n≧0)番目の形態素は[mrph_positions[n]
,mrph_positions[n+1]
)に位置する -
newstyle
よくわからないけどBool値だった(Juman++かどうか?) -
parse(self, spec)
KNPの出力した文字列をパースする?spec
KNPの出力した文字列?(JUMAN・JUMAN++の出力は未確認)
-
pattern
文末を示す文字列?
'EOS'
だった。 -
push_bnst(self, bnst)
文節を追加?(未確認) -
set_parent_child(self)
-
set_positions(self)
-
set_readonly(self)
-
sid
文ID(comment
に書いてあるS-ID)
参考: KNPへの入力 -
spec(self)
all(self)
と==で比較したらTrueだった。 -
sprint_tree(self)
構文木を文字列で返す。
tag_list(self)
基本句のリストtag_positions
それぞれの基本句がパース元の文字列で位置する範囲のリスト
n(n≧0)番目の基本句は[tag_positions[n]
,tag_positions[n+1]
)に位置する
get_tag_span(self, tag_id)
もあるので適宜使い分けよう
bnst = result.bnst_list()[i]
※以下のattributesは全てではない
fstring
feature的なアレの文字列mrpf_list()
形態素のリスト
parent
自分が係る文節(構文木における親)
「雨が降る」…「雨が」:子 「降る」:親pstring
よくわからない
試した限りでは空文字列ばかりpush_mrph(mrph)
文節に形態素を追加する?(未確認)push_tag(tag)
文節に基本句を追加する?(未確認)repname
自立語の?代表表記spec()
よくわからない。(0, 0)ばかり。tag_list()
基本句のリスト
tag = bnst.tag_list()[j]
KNPでは,基本的に"1つの自立語とそれに続く付属語"から成る基本句という単位で係り受けなどを扱っている
文節単位で考えた場合"麻生太郎は"で1つの文節となるが,基本句単位で考えた場合,"麻生"と"太郎は"の2つの基本句となる
係り受けなどの書式は * から始まる行と同様
※以下のattributesは全てではない
repname
自立語の代表表記get_surface()
表層形の文字列
参考: KNPの形態素に関する情報の出力書式
入力形態素 読み 原型 品詞 品詞ID 品詞細分類 細分類ID 活用型 活用型ID 活用形 活用形ID その他の情報
-
bunrui
品詞細分類の文字列
ex. 数詞 -
bunrui_id
品詞細分類IDを表す整数
ex. 7(名詞であれば数詞であることを表す)
品詞ごとに1, 2, 3, ...と番号が振られているよう。(品詞細分類が*
の場合は0、以降のID系統も同様)
JUMAN 品詞体系 に書かれた順番の通りかも(品詞の順番は違いそう)。 -
doukei
表記は同じだが異なる語?のMorpheme
オブジェクトのリスト(未確認)
とするとKNPを通すことで一つに定められるので、KNPのパース結果ならば空リストになる -
fstring
KNPが付与したfeatureタグ一覧の文字列 -
genkei
原型の文字列 -
hinsi
品詞の文字列 -
hinsi_id
品詞IDを表す整数 ex. 6(名詞) -
imis
その他の情報の文字列 -
katuyou1
活用型の文字列
ex. イ形容詞アウオ段 -
katuyou1_id
活用型IDを表す整数
ex. 18(イ形容詞アウオ段) -
katuyou2
活用形の文字列 ex. 語幹 -
katuyou2_id
活用形IDを表す整数 ex. 1(イ形容詞アウオ段のとき語幹を表す) -
midasi
入力形態素の文字列(そのまま) -
mrph_id
形態素のIDを表す整数
多分前から順に0, 1, 2, ... -
mrph_index
mrph_id
と同じ? -
new_spec(self, prev_mrph_id=None, span=None)
-
parse_fstring(self, fstring)
-
prev_mrph_id
ひとつ前の形態素のID?
先頭の形態素は自信と同じ0
だった。 -
push_doukei(self, mrph)
-
repname
形態素の代表表記を返す -
repnames(self)
形態素の代表表記(曖昧性がある場合は「?」で連結)を返す.
-
span
よくわからない。試した限りでは(0, 0)
-
spec(self)
形態素に関する出力すべての文字列 -
yomi
読みの文字列
- parse時の
AssertionError
入力文字列をdecode('utf-8')
していない可能性が高い。