動詞や形容詞の活用を一覧したり変形したい。元データのCSVを漁る。
動詞や形容詞の活用を一覧したり変形したい。
成果物
目的
たとえば「叩く」という動詞を入力すると「叩きます」に変換するなどがしたい。
これを実現するには用言の活用形を取得する必要がある。以下のような経緯で変形できると予想する。
- 用言の活用形一覧を取得する
- 指定した活用形を取得する
- 文を変形する
前回まで
用言データ
/usr/share/mecab/dic/ipadic
品詞 | ファイル名 |
---|---|
動詞 | Verb.csv |
形容詞 | Adj.csv |
助動詞 | Auxil.csv |
文字コード確認
辞書ファイルの文字コードはEUC-JPと思われる。これをUTF-8に変換する。
nkf --guess /tmp/work/Verb.csv
EUC-JP (LF)
file
コマンドは間違っている
file -i /tmp/work/Verb.csv
/tmp/work/Verb.csv: text/plain; charset=iso-8859-1
EUC-JP→UTF-8
iconv
かnkf
いずれかのコマンドで可。
iconv -f EUC-JP -t UTF-8 /tmp/work/Verb.csv > /tmp/work/Verb.utf8.iconv.csv
nkf -w /tmp/work/Verb.csv > /tmp/work/Verb.utf8.nkf.csv
両方でやってみた。差分なし。
diff Verb.utf8.iconv.csv Verb.utf8.nkf.csv
変換後はファイルサイズが増えた。
文字コード | サイズ |
---|---|
EUC-JP |
10.3MB |
UTF-8 |
13.9MB |
シェル
# MeCabの辞書をEUC-JPからUTF-8に変換する Convert() { local PATH_OUT=${1:-/tmp/work} local DIR_IPADIC=/usr/share/mecab/dic/ipadic local CSV_FILES="Verb Adj Auxil" for FILE_NAME in ${CSV_FILES}; do cp "$(CsvPath "${FILE_NAME}")" "${PATH_OUT%/}/${FILE_NAME}.csv" iconv -f EUC-JP -t UTF-8 "${PATH_OUT%/}/${FILE_NAME}.csv" > "${PATH_OUT%/}/${FILE_NAME}.utf8.csv" done } CsvPath() { echo "/usr/share/mecab/dic/ipadic/${1:-Verb}.csv"; } Convert
叩く
の活用形
CSVファイルを開いて叩く
で検索。以下のようなレコードが見つかった。
叩く,679,679,7150,動詞,自立,*,*,五段・カ行イ音便,基本形,叩く,タタク,タタク 叩か,683,683,6446,動詞,自立,*,*,五段・カ行イ音便,未然形,叩く,タタカ,タタカ 叩こ,681,681,7150,動詞,自立,*,*,五段・カ行イ音便,未然ウ接続,叩く,タタコ,タタコ 叩き,689,689,7157,動詞,自立,*,*,五段・カ行イ音便,連用形,叩く,タタキ,タタキ 叩い,687,687,6696,動詞,自立,*,*,五段・カ行イ音便,連用タ接続,叩く,タタイ,タタイ 叩け,675,675,7143,動詞,自立,*,*,五段・カ行イ音便,仮定形,叩く,タタケ,タタケ 叩け,685,685,7143,動詞,自立,*,*,五段・カ行イ音便,命令e,叩く,タタケ,タタケ 叩きゃ,677,677,7150,動詞,自立,*,*,五段・カ行イ音便,仮定縮約1,叩く,タタキャ,タタキャ 叩く,679,679,7151,動詞,自立,*,*,五段・カ行イ音便,基本形,叩く,ハタク,ハタク 叩か,683,683,7828,動詞,自立,*,*,五段・カ行イ音便,未然形,叩く,ハタカ,ハタカ 叩こ,681,681,7150,動詞,自立,*,*,五段・カ行イ音便,未然ウ接続,叩く,ハタコ,ハタコ 叩き,689,689,7150,動詞,自立,*,*,五段・カ行イ音便,連用形,叩く,ハタキ,ハタキ 叩い,687,687,7537,動詞,自立,*,*,五段・カ行イ音便,連用タ接続,叩く,ハタイ,ハタイ 叩け,675,675,7001,動詞,自立,*,*,五段・カ行イ音便,仮定形,叩く,ハタケ,ハタケ 叩け,685,685,7001,動詞,自立,*,*,五段・カ行イ音便,命令e,叩く,ハタケ,ハタケ 叩きゃ,677,677,7150,動詞,自立,*,*,五段・カ行イ音便,仮定縮約1,叩く,ハタキャ,ハタキャ
「たたく」と「はたく」で読みが違うパターンも網羅されていた。
「叩く」→「叩きます」
「叩き」に変形すればよさそう。「連用形」か。
つまり変換は以下のようなプロセスになる。
- 「基本形」の動詞を入力させる
- 1の動詞の「連用形」を取得する
- 2の末尾に「ます」を連結する
これで動詞から「ます調」に変換できるはず。
情報源
所感
次回はこれをプログラムに落とし込んで見る。
ところで本件は応用範囲が広そう。たとえば自動的に文調や口調を変換できるLintツールやコンバータが作れそう。
本件を文章中で使えるようにしたい。そのためには工夫が必要か。MeCabによる形態素解析をして動詞の基本形を抽出する必要がある。
- 入力: 私はあなたを叩く
- MeCab: 私/は/あなた/を/叩く
- Code:
- 基本形動詞「叩く」→連用形「叩き」
- 「ます」を末尾に付与
- 出力: 私はあなたを叩きます
「だ・である」調から「です・ます」調に変換なら、他にも多くのパターンがある。
入力 | 出力 |
---|---|
私はあなたを叩いた | 叩きました |
私はあなたに叩かれた | 叩かれました |
私はあなたを叩いたはず | 叩いたはずです |
私はあなたを叩いたはずだ | 叩いたはずです |
私はあなたを叩いただろう | 叩いたでしょう |
私はあなたを叩いたのである | 叩いたのです |
私はあなたを叩くだろう | 叩くでしょう |
この辺の法則はまだよくわからん。言語学でも嗜めばよろしいか? 「言葉は生き物」という格言があるくらいだから定性化できないかもしれん。やってみるしかない。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13 ※
- bash 4.4.12(1)-release ※
- Python 3.5.3
- SQLite 3.29.0 ※
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux `