目次AutoHotkeyAppleScriptShellScriptJavaScript・CSSlinuxBeanTips太閤立志伝Vその他うp普通に日記
どんなに経験が豊富でも、人のために知識を出し惜しむなら門外漢と変わらない。
--.--.-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013.08.20 Tue

せっかくユーザー辞書を作成したのに、Windowsとともに使えなくなってしまうのは悔しい。

どうにか引越先のLinuxでもAnthyに辞書をインポートさせられないかと調べた所、
Canna形式のファイルに変換すれば自動で読み込んでくれることが判明。
簡単なシェルスクリプトを書いてワンタッチで移行できるようにしてみた。


対応している辞書形式

  • MS-IME
  • Google 日本語入力(Mozc)

手順

  1. Linuxにnkfをインストールしておく
  2. IME付属の辞書ツールから単語データをテキスト形式でエクスポートする
  3. 以下のシェルスクリプトをテキストエディタにコピペし、「dict2anthy」として保存する
    #!/bin/bash
    
    # パスの設定
    canna="${HOME}/.anthy/imported_words_default.d"
    
    # 辞書フォルダが無ければ作成
    if [ ! -d "${canna}" ]; then
    	echo "${canna}を作成しました"
    	mkdir "${canna}"
    fi
    
    # 改行の設定
    br="
    "
    
    # 引数と標準入力をまとめる
    args=""
    if [ ! -t 0 ] ; then
    	while read i ; do
    		args="${args}${br}${i}"
    	done
    fi
    for i in "$@" ; do
    	args="${args}${br}${i}"
    done
    
    # 区切り文字を改行に
    _IFS="$IFS";IFS="$br"
    
    # 処理ループ開始
    for i in $args ; do
    	
    	# 拡張子抜きのファイル名を取得
    	j="${i##*/}"
    	k="${j%.*}"
    	echo
    	echo "${i}${br}--> ${canna}/${k}.t"
    	
    	# GoogleIME形式からCanna形式に簡易変換
    	# http://www.tanu.org/~sakane/doc/public/howto-canna.html
    	
    	# MS-IME
    	line1=$(nkf --utf8 -Lu "${i}" | awk -F'[\t]' '{print $1" "$3" "$2}' | sed \
    	-e 's/ 名詞 / #T35 /'          \
    	-e 's/ 形容詞 / #KY /'         \
    	-e 's/ 形容動詞 / #T00 /'      \
    	-e 's/ 副詞 / #F04 /'          \
    	-e 's/ 連体詞 / #RT /'         \
    	-e 's/ 接続詞 / #CJ /'         \
    	-e 's/ 感動詞 / #CJ /'         \
    	-e 's/ 助数詞 / #JS /'         \
    	-e 's/ 接頭語 / #PRE /'        \
    	-e 's/ 接尾語 / #SUC /'        \
    	-e 's/ さ変名詞 / #T30 /'      \
    	-e 's/ ざ変名詞 / #ZX /'       \
    	-e 's/ さ変形動名詞 / #T30 /'  \
    	-e 's/ 形動名詞 / #T05 /'      \
    	-e 's/ 副詞的名詞 / #T35 /'    \
    	-e 's/ 人名 / #JN /'           \
    	-e 's/ 姓 / #JN /'             \
    	-e 's/ 名 / #JN /'             \
    	-e 's/ 地名その他 / #CN /'     \
    	-e 's/ 固有名詞 / #KK /'       \
    	-e 's/ あわ行五段 / #W5 /'     \
    	-e 's/ か行五段 / #K5 /'       \
    	-e 's/ が行五段 / #G5 /'       \
    	-e 's/ さ行五段 / #S5 /'       \
    	-e 's/ た行五段 / #T5 /'       \
    	-e 's/ な行五段 / #N5 /'       \
    	-e 's/ ば行五段 / #B5 /'       \
    	-e 's/ ま行五段 / #M5 /'       \
    	-e 's/ ら行五段 / #R5 /'       \
    	-e 's/ 一段動詞 / #KS /'       \
    	-e 's/ 姓名接頭語 / #PRE /'    \
    	-e 's/ 地名接頭語 / #CNPRE /'  \
    	-e 's/ 姓名接尾語 / #JNSUC /'  \
    	-e 's/ 地名接尾語 / #CNSUC1 /' \
    	                               \
    	-e 's/ 顔文字 / #KK /'         \
    	-e 's/ その他自立語 / #KK /'   \
    	-e 's/ 慣用句 / #KK /'         \
    	-e 's/ 独立語 / #KK /'         \
    	-e 's/ 抑制単語 / #KK /')
    
    	# Google 日本語入力
    	line2=$(echo "$line1" | sed    \
    	-e 's/ 固有名詞 / #KK /'       \
    	-e 's/ 名詞サ変 / #T30 /'      \
    	-e 's/ 名詞形動 / #T05 /'      \
    	-e 's/ 地名 / #CN /'           \
    	-e 's/ 組織 / #KK /'           \
    	-e 's/ 動詞ワ行五段 / #W5 /'   \
    	-e 's/ 動詞カ行五段 / #K5 /'   \
    	-e 's/ 動詞サ行五段 / #S5 /'   \
    	-e 's/ 動詞タ行五段 / #T5 /'   \
    	-e 's/ 動詞ナ行五段 / #N5 /'   \
    	-e 's/ 動詞マ行五段 / #M5 /'   \
    	-e 's/ 動詞ラ行五段 / #R5 /'   \
    	-e 's/ 動詞ガ行五段 / #G5 /'   \
    	-e 's/ 動詞バ行五段 / #B5 /'   \
    	-e 's/ 動詞一段 / #KS /'       \
    	-e 's/ 動詞カ変 / #KX /'       \
    	-e 's/ 動詞サ変 / #SX /'       \
    	-e 's/ 動詞ザ変 / #ZX /'       \
    	-e 's/ 接尾一般 / #SUC /'      \
    	-e 's/ 接尾人名 / #JNSUC /'    \
    	-e 's/ 接尾地名 / #CNSUC1 /'   \
    	                               \
    	-e 's/ 動詞ハ行四段 / #W5 /'   \
    	-e 's/ 動詞ラ変 / #L5 /'       \
    	-e 's/ 終助詞 / #KK /'         \
    	-e 's/ 数 / #NN /'             \
    	-e 's/ アルファベット / #KK /' \
    	-e 's/ 記号 / #KJ /'           \
    	-e 's/ 句読点 / #KJ /'         \
    	-e 's/ 括弧開 / #KJ /'         \
    	-e 's/ 括弧閉 / #KJ /'         \
    	-e 's/ 短縮よみ / #KK /'       \
    	-e 's/ サジェストのみ / #KK /')
    
    	# ATOK
    	line1=$(echo "$line2" | sed  \
    	-e 's/ 固有人姓 / #JN /'     \
    	-e 's/ 固有人名 / #JN /'     \
    	-e 's/ 固有人他 / #JN /'     \
    	-e 's/ 固有地名 / #CN /'     \
    	-e 's/ 固有組織 / #KK /'     \
    	-e 's/ 固有商品 / #KK /'     \
    	-e 's/ 固有一般 / #KK /'     \
    	-e 's/ 名詞サ変 / #T30 /'    \
    	-e 's/ 名詞ザ変 / #ZX /'     \
    	-e 's/ 名サ形動 / #T30 /'    \
    	-e 's/ 数詞 / #NN /'         \
    	-e 's/ 冠数詞 / #NNPRE /'    \
    	-e 's/ 単漢字 / #KJ /'       \
    	-e 's/ カ行五段 / #K5 /'     \
    	-e 's/ ガ行五段 / #G5 /'     \
    	-e 's/ サ行五段 / #S5 /'     \
    	-e 's/ タ行五段 / #T5 /'     \
    	-e 's/ ナ行五段 / #N5 /'     \
    	-e 's/ バ行五段 / #B5 /'     \
    	-e 's/ マ行五段 / #M5 /'     \
    	-e 's/ ラ行五段 / #R5 /'     \
    	-e 's/ ワ行五段 / #W5 /'     \
    	-e 's/ ハ行四段 / #W5 /'     \
    	-e 's/ 一段動詞 / #KS /'     \
    	-e 's/ カ変動詞 / #KX /'     \
    	-e 's/ サ変動詞 / #SX /'     \
    	-e 's/ ザ変動詞 / #ZX /'     \
    	-e 's/ 形容詞イ / #KY /'     \
    	-e 's/ 形容詞エ / #KY /')
    	
    	# ATOK(古文。無理矢理当てはめただけ)
    	line2=$(echo "$line1" | sed  \
    	-e 's/ ワ行五段音便 / #W5 /' \
    	-e 's/ ナ変動詞 / #N5 /'     \
    	-e 's/ ラ変動詞 / #R5 /'     \
    	-e 's/ カ行上二段 / #K5 /'   \
    	-e 's/ ガ行上二段 / #G5 /'   \
    	-e 's/ タ行上二段 / #T5 /'   \
    	-e 's/ ダ行上二段 / #ZX /'   \
    	-e 's/ ハ行上二段 / #W5 /'   \
    	-e 's/ バ行上二段 / #B5 /'   \
    	-e 's/ マ行上二段 / #M5 /'   \
    	-e 's/ ヤ行上二段 / #KS /'   \
    	-e 's/ ラ行上二段 / #R5 /'   \
    	-e 's/ カ行下二段 / #K5 /'   \
    	-e 's/ ガ行下二段 / #G5 /'   \
    	-e 's/ サ行下二段 / #S5 /'   \
    	-e 's/ ザ行下二段 / #ZX /'   \
    	-e 's/ タ行下二段 / #T5 /'   \
    	-e 's/ ダ行下二段 / #ZX /'   \
    	-e 's/ ナ行下二段 / #N5 /'   \
    	-e 's/ ハ行下二段 / #W5 /'   \
    	-e 's/ バ行下二段 / #B5 /'   \
    	-e 's/ マ行下二段 / #M5 /'   \
    	-e 's/ ヤ行下二段 / #KS /'   \
    	-e 's/ ラ行下二段 / #R5 /'   \
    	-e 's/ ワ行下二段 / #W5 /'   \
    	-e 's/ 形容詞ウ / #KY /'     \
    	-e 's/ 形動タリ / #F00 /')
    
    	# ゔ行・数字
    	line1=$(echo "$line2" | sed  \
    	-e 's/^\([^ ]*\)ゔぁ\([^ ]*\) /\1ば\2 /' \
    	-e 's/^\([^ ]*\)ゔぃ\([^ ]*\) /\1び\2 /' \
    	-e 's/^\([^ ]*\)ゔぅ\([^ ]*\) /\1ぶ\2 /' \
    	-e 's/^\([^ ]*\)ゔぇ\([^ ]*\) /\1べ\2 /' \
    	-e 's/^\([^ ]*\)ゔぉ\([^ ]*\) /\1ぼ\2 /' \
    	-e 's/^\([^ ]*\)ゔ\([^ ]*\) /\1ぶ\2 /'   \
    	-e 's/^\([^ ]*\)ヴぁ\([^ ]*\) /\1ば\2 /' \
    	-e 's/^\([^ ]*\)ヴぃ\([^ ]*\) /\1び\2 /' \
    	-e 's/^\([^ ]*\)ヴぅ\([^ ]*\) /\1ぶ\2 /' \
    	-e 's/^\([^ ]*\)ヴぇ\([^ ]*\) /\1べ\2 /' \
    	-e 's/^\([^ ]*\)ヴぉ\([^ ]*\) /\1ぼ\2 /' \
    	-e 's/^\([^ ]*\)ヴ\([^ ]*\) /\1ぶ\2 /'   \
    	                                         \
    	-e 's/^\([^ ]*\)0\([^ ]*\) /\10\2 /'    \
    	-e 's/^\([^ ]*\)1\([^ ]*\) /\11\2 /'    \
    	-e 's/^\([^ ]*\)2\([^ ]*\) /\12\2 /'    \
    	-e 's/^\([^ ]*\)3\([^ ]*\) /\13\2 /'    \
    	-e 's/^\([^ ]*\)4\([^ ]*\) /\14\2 /'    \
    	-e 's/^\([^ ]*\)5\([^ ]*\) /\15\2 /'    \
    	-e 's/^\([^ ]*\)6\([^ ]*\) /\16\2 /'    \
    	-e 's/^\([^ ]*\)7\([^ ]*\) /\17\2 /'    \
    	-e 's/^\([^ ]*\)8\([^ ]*\) /\18\2 /'    \
    	-e 's/^\([^ ]*\)9\([^ ]*\) /\19\2 /')
    	
    	# 小文字
    	line2=$(echo "$line1" | sed  \
    	-e 's/^\([^ ]*\)a\([^ ]*\) /\1a\2 /'    \
    	-e 's/^\([^ ]*\)b\([^ ]*\) /\1b\2 /'    \
    	-e 's/^\([^ ]*\)c\([^ ]*\) /\1c\2 /'    \
    	-e 's/^\([^ ]*\)d\([^ ]*\) /\1d\2 /'    \
    	-e 's/^\([^ ]*\)e\([^ ]*\) /\1e\2 /'    \
    	-e 's/^\([^ ]*\)f\([^ ]*\) /\1f\2 /'    \
    	-e 's/^\([^ ]*\)g\([^ ]*\) /\1g\2 /'    \
    	-e 's/^\([^ ]*\)h\([^ ]*\) /\1h\2 /'    \
    	-e 's/^\([^ ]*\)i\([^ ]*\) /\1i\2 /'    \
    	-e 's/^\([^ ]*\)j\([^ ]*\) /\1j\2 /'    \
    	-e 's/^\([^ ]*\)k\([^ ]*\) /\1k\2 /'    \
    	-e 's/^\([^ ]*\)l\([^ ]*\) /\1l\2 /'    \
    	-e 's/^\([^ ]*\)m\([^ ]*\) /\1m\2 /'    \
    	-e 's/^\([^ ]*\)n\([^ ]*\) /\1n\2 /'    \
    	-e 's/^\([^ ]*\)o\([^ ]*\) /\1o\2 /'    \
    	-e 's/^\([^ ]*\)p\([^ ]*\) /\1p\2 /'    \
    	-e 's/^\([^ ]*\)q\([^ ]*\) /\1q\2 /'    \
    	-e 's/^\([^ ]*\)r\([^ ]*\) /\1r\2 /'    \
    	-e 's/^\([^ ]*\)s\([^ ]*\) /\1s\2 /'    \
    	-e 's/^\([^ ]*\)t\([^ ]*\) /\1t\2 /'    \
    	-e 's/^\([^ ]*\)u\([^ ]*\) /\1u\2 /'    \
    	-e 's/^\([^ ]*\)v\([^ ]*\) /\1v\2 /'    \
    	-e 's/^\([^ ]*\)w\([^ ]*\) /\1w\2 /'    \
    	-e 's/^\([^ ]*\)x\([^ ]*\) /\1x\2 /'    \
    	-e 's/^\([^ ]*\)y\([^ ]*\) /\1y\2 /'    \
    	-e 's/^\([^ ]*\)z\([^ ]*\) /\1z\2 /')
    
    	# 大文字
    	line1=$(echo "$line2" | sed  \
    	-e 's/^\([^ ]*\)A\([^ ]*\) /\1A\2 /'    \
    	-e 's/^\([^ ]*\)B\([^ ]*\) /\1B\2 /'    \
    	-e 's/^\([^ ]*\)C\([^ ]*\) /\1C\2 /'    \
    	-e 's/^\([^ ]*\)D\([^ ]*\) /\1D\2 /'    \
    	-e 's/^\([^ ]*\)E\([^ ]*\) /\1E\2 /'    \
    	-e 's/^\([^ ]*\)F\([^ ]*\) /\1F\2 /'    \
    	-e 's/^\([^ ]*\)G\([^ ]*\) /\1G\2 /'    \
    	-e 's/^\([^ ]*\)H\([^ ]*\) /\1H\2 /'    \
    	-e 's/^\([^ ]*\)I\([^ ]*\) /\1I\2 /'    \
    	-e 's/^\([^ ]*\)J\([^ ]*\) /\1J\2 /'    \
    	-e 's/^\([^ ]*\)K\([^ ]*\) /\1K\2 /'    \
    	-e 's/^\([^ ]*\)L\([^ ]*\) /\1L\2 /'    \
    	-e 's/^\([^ ]*\)M\([^ ]*\) /\1M\2 /'    \
    	-e 's/^\([^ ]*\)N\([^ ]*\) /\1N\2 /'    \
    	-e 's/^\([^ ]*\)O\([^ ]*\) /\1O\2 /'    \
    	-e 's/^\([^ ]*\)P\([^ ]*\) /\1P\2 /'    \
    	-e 's/^\([^ ]*\)Q\([^ ]*\) /\1Q\2 /'    \
    	-e 's/^\([^ ]*\)R\([^ ]*\) /\1R\2 /'    \
    	-e 's/^\([^ ]*\)S\([^ ]*\) /\1S\2 /'    \
    	-e 's/^\([^ ]*\)T\([^ ]*\) /\1T\2 /'    \
    	-e 's/^\([^ ]*\)U\([^ ]*\) /\1U\2 /'    \
    	-e 's/^\([^ ]*\)V\([^ ]*\) /\1V\2 /'    \
    	-e 's/^\([^ ]*\)W\([^ ]*\) /\1W\2 /'    \
    	-e 's/^\([^ ]*\)X\([^ ]*\) /\1X\2 /'    \
    	-e 's/^\([^ ]*\)Y\([^ ]*\) /\1Y\2 /'    \
    	-e 's/^\([^ ]*\)Z\([^ ]*\) /\1Z\2 /')
    	
    	# 半角英字に隣接した記号・波ダッシュ問題・空行
    	line2=$(echo "$line1" | sed \
    	-e 's/\([ -~。-゚]\)。/\1\./' \
    	-e 's/\([ -~。-゚]\)、/\1,/'  \
    	-e 's/\([ -~。-゚]\)ー/\1-/'  \
    	-e 's/\([ -~。-゚]\)=/\1=/'  \
    	-e 's/\([ -~。-゚]\)・/\1\//' \
    	-e 's/\([ -~。-゚]\)//\1\//' \
    	-e 's/\([ -~。-゚]\)\/\1\\/' \
    	-e 's/\([ -~。-゚]\)¥/\1\\/' \
    	-e "s/\([ -~。-゚]\)’/\1\'/" \
    	-e 's/\([ -~。-゚]\)”/\1\"/' \
    	-e 's/\([ -~。-゚]\)(/\1\(/' \
    	-e 's/\([ -~。-゚]\))/\1\)/' \
    	-e 's/\([ -~。-゚]\)「/\1\[/' \
    	-e 's/\([ -~。-゚]\)」/\1\]/' \
    	-e 's/\([ -~。-゚]\){/\1\{/' \
    	-e 's/\([ -~。-゚]\)}/\1\}/' \
    	-e 's/\([ -~。-゚]\)</\1\/' \
    	-e 's/\([ -~。-゚]\)!/\1!/'  \
    	-e 's/\([ -~。-゚]\)?/\1\?/' \
    	-e 's/\([ -~。-゚]\)&/\1&/'  \
    	-e 's/\([ -~。-゚]\)$/\1\$/' \
    	-e 's/\([ -~。-゚]\)@/\1@/'  \
    	-e 's/\([ -~。-゚]\)%/\1%/'  \
    	-e 's/\([ -~。-゚]\)#/\1#/'  \
    	-e 's/\([ -~。-゚]\)+/\1\+/' \
    	-e 's/\([ -~。-゚]\)*/\1\*/' \
    	-e 's/\([ -~。-゚]\)^/\1\^/' \
    	-e 's/\([ -~。-゚]\)|/\1\|/' \
    	-e 's/\([ -~。-゚]\)_/\1_/'  \
    	-e 's/\([ -~。-゚]\)〜/\1~/'  \
    	-e 's/\([ -~。-゚]\)~/\1~/'  \
    	-e 's/^\([^ ]*\) \([^ ]*\) \([^ ]*\)〜\([^ ]*\)/\1 \2 \3~\4/' \
    	-e '/^\s*$/d')
    	
    	# 一時ファイルに書き出し
    	echo "$line2" > "${HOME}/__convdict_${k}.tmp"
    
    	# ソートして辞書フォルダに格納
    	# http://www.ofug.net/~yamajun/document/anthy-dict/
    	env LANG=C sort "${HOME}/__convdict_${k}.tmp" > "${canna}/${k}.t"
    	
    	rm "${HOME}/__convdict_${k}.tmp"
    done
    
    # 区切り文字を戻す
    IFS="$_IFS"
    
    echo
    
  4. スクリプトに実行権限を付与する(プロパティで操作するか「chmod +x dict2anthy」を実行)
  5. ターミナルから「./dict2anthy hoge.dic」という具合にスクリプトを実行する
  6. 試しに辞書内の単語を入力してみる
テーマ:Linux - ジャンル:コンピュータ
ShellScript    Comment(0)  TrackBack(0)   Top↑
管理者にだけ表示を許可する

TrackBackURL
→ http://hitaaki.blog47.fc2.com/tb.php/42-54b712a9
Template by まるぼろらいと
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。