やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

MeCabで品詞・活用形・語を取得するスクリプトのインタフェース考察

 pythonスクリプトとその起動引数、出力について。

やりたいこと

  1. 品詞を取得する
  2. 活用形の一覧を取得する
  3. 指定した活用形の語を取得する

 これらができれば、あとは好きに加工できるはず。

目的 スクリプト
品詞を取得する get_lexical_category.py
活用形の一覧を取得する list_conjugation.py
指定した活用形の語を取得する get_conj_word

1. get_lexical_category.py

python3 get_lexical_category.py "品詞・活用形を問わない何らかの語"
品詞名1
品詞名2
品詞名3
...

 CSVファイルの1列目に完全一致または部分一致した行があるなら、そのファイル名(品詞)を出力する。

 

ただ、これはmecabコマンドにまかせたほうがいいかもしれない。

echo "" | mecab
私    名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
echo "学ぶ" | mecab
学ぶ 動詞,自立,*,*,五段・バ行,基本形,学ぶ,マナブ,マナブ
echo "私はMeCabを学んで文章を生成・修正するツールを作りたい。" | mebab
私    名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
MeCab   名詞,一般,*,*,*,*,MeCab,*,*
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
学ん  動詞,自立,*,*,五段・バ行,連用タ接続,学ぶ,マナン,マナン
で 助詞,接続助詞,*,*,*,*,で,デ,デ
文章  名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
生成  名詞,サ変接続,*,*,*,*,生成,セイセイ,セイセイ
・ 記号,一般,*,*,*,*,・,・,・
修正  名詞,サ変接続,*,*,*,*,修正,シュウセイ,シューセイ
する  動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
ツール   名詞,一般,*,*,*,*,ツール,ツール,ツール
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
作り  動詞,自立,*,*,五段・ラ行,連用形,作る,ツクリ,ツクリ
たい  助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
。 記号,句点,*,*,*,*,。,。,。

2. list_conjugation.py

python3 list_conjugation.py "用言(基本形)"
活用形名1
活用形名2
活用形名3
...

 用言(動詞・形容詞・助動詞)の基本形を入力すると、その語がもつ他の活用形名をすべて出力する。

3. get_conj_word

python3 get_conj_word "用言(基本形)" "活用形"
python3 get_conj_word "用言(活用形不問)" "活用形"
(指定した用言のうち指定した活用形の語)

 基本形のほうが処理が少なくて済む。だが、もし文章中の用言であったら、一度基本形を取得してから再度実行せねばならなくなる。それは面倒なので最初から活用形不問のほうが良いだろう。

 入力値は活用形不問にしておき、処理内部では基本形を取得する。

 CSV内では以下のような処理になる。

  1. 第一引数が1列目と一致する行を探す
  2. その行における11列目に基本形がある
  3. 2で得た基本形に一致する他の行を得る
  4. 3で得た行のうち第二引数に一致する活用形(CSVの10列目)を探す
  5. 4で得た行の1列目を返す

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで