やってみる

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

MeCabのCSVファイルをEUC-JPからUTF-8へ変換する

 動詞や形容詞の活用を一覧したり変形したい。元データのCSVを漁る。

 動詞や形容詞の活用を一覧したり変形したい。

成果物

目的

 たとえば「叩く」という動詞を入力すると「叩きます」に変換するなどがしたい。

 これを実現するには用言の活用形を取得する必要がある。以下のような経緯で変形できると予想する。

  1. 用言の活用形一覧を取得する
  2. 指定した活用形を取得する
  3. 文を変形する

前回まで

用言データ

  • /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

 ファイルの文字コードUTF-8に変換する。

 iconvnkfいずれかのコマンドで可。

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. 1の動詞の「連用形」を取得する
  3. 2の末尾に「ます」を連結する

 これで動詞から「ます調」に変換できるはず。

情報源

所感

 次回はこれをプログラムに落とし込んで見る。

 ところで本件は応用範囲が広そう。たとえば自動的に文調や口調を変換できるLintツールやコンバータが作れそう。

 本件を文章中で使えるようにしたい。そのためには工夫が必要か。MeCabによる形態素解析をして動詞の基本形を抽出する必要がある。

  • 入力: 私はあなたを叩く
  • MeCab: 私/は/あなた/を/叩く
  • Code:
    • 基本形動詞「叩く」→連用形「叩き」
    • 「ます」を末尾に付与
  • 出力: 私はあなたを叩きます

 「だ・である」調から「です・ます」調に変換なら、他にも多くのパターンがある。

入力 出力
私はあなたを叩いた 叩きました
私はあなたに叩かれた 叩かれました
私はあなたを叩いたはず 叩いたはずです
私はあなたを叩いたはずだ 叩いたはずです
私はあなたを叩いただろう 叩いたでしょう
私はあなたを叩いたのである 叩いたのです
私はあなたを叩くだろう 叩くでしょう

 この辺の法則はまだよくわからん。言語学でも嗜めばよろしいか? 「言葉は生き物」という格言があるくらいだから定性化できないかもしれん。やってみるしかない。

対象環境

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