アイソモカ

知の遊牧民の開発記録

開発記録 191130 Sat (UNIXコマンド、100本ノック #045)

むちゃむちゃ腹が痛え。ココアがうまい。

もう11月も終わりですよ。早くね?

45. 動詞の格パターンの抽出

今回用いている文章をコーパスと見なし,日本語の述語が取りうる格を調査したい. 動詞を述語,動詞に係っている文節の助詞を格と考え,述語と格をタブ区切り形式で出力せよ. ただし,出力は以下の仕様を満たすようにせよ.

  • 動詞を含む文節において,最左の動詞の基本形を述語とする
  • 述語に係る助詞を格とする
  • 述語に係る助詞(文節)が複数あるときは,すべての助詞をスペース区切りで辞書順に並べる

「吾輩はここで始めて人間というものを見た」という例文(neko.txt.cabochaの8文目)を考える. この文は「始める」と「見る」の2つの動詞を含み,「始める」に係る文節は「ここで」,「見る」に係る文節は「吾輩は」と「ものを」と解析された場合は,次のような出力になるはずである.

始める で

見る は を

このプログラムの出力をファイルに保存し,以下の事項をUNIXコマンドを用いて確認せよ.

  • コーパス中で頻出する述語と格パターンの組み合わせ
  • 「する」「見る」「与える」という動詞の格パターン(コーパス中で出現頻度の高い順に並べよ)

やることはだいたい分かった。ちょっと面白くなってきた感ある。

格と呼ぶからには、格助詞を選びたいけどなあ。まあええか。

この例、「始めて」は副詞ちゃう?って思うなあ。「初めて」は副詞で、同じやつやろ。IPA辞書でもUniDicでも、MeCab の解析では動詞になってまうから仕方ないんかなあ。

 

 

調べたことメモ

恥ずかしがらずに書く。

自作関数をモジュール化する

今更感あるけど、#040 で作った形態素解析結果を Morph クラスのオブジェクトにするやつを、別のファイルに書くことにした。

ファイル名の拡張子を除いた部分がモジュール名になる。最初に import モジュール しておいて、呼び出すときは モジュール.クラス() ってする。

リストの要素をタブ区切りでつなぐ

print() の中で処理できると効率良い。

'\t'.join([i for i in list])

 

前半完了(動詞と係る助詞を出力)

IPA辞書を使った。

# knock045.py
# 結果ファイル20行目まで

生れる   で
つく  が
泣く  で
する  だけ  は
始める   で
見る  は を
聞く  で
捕える   を
載せる   に
持ち上げる と
ある  が
落ちつく    で
見る  を
見る  の
思う  と
残る  が でも
する  をもって
する  が
逢う  に も
出会う   も

後半は第2章でやった気がしなくもないけど、だいぶ前やって忘れてまいましたわ。明日調べよう。