nicoWnnG のユーザー辞書を作成してみた
Android の IME として nicoWnnG を使っている
昔からある OpenWnn/nicoWnn をベースにしたアプリで
Google日本語入力や ATOK 等の有名アプリと比べると変換機能が劣るものの
英字・数字・記号入力時に
PC 同等の数字・記号両方揃った QWERTY 配列が使えるという
他のアプリが持ってない機能
があるため、これまで使ってきた。
nicoWnnG のキーボード |
PC のキーボードとほぼ同じ配置。キーが一つ一つが小さく見えるが、思ったより普通に入力できる。
Tab キーや Ctrl キーがあるのも美点。 Ctrl+c でコピーとかできるしね。
これと、例えば Google 日本語入力を比較すると、こんな風に
英字 |
数字 |
数字や記号を入力する場合、わざわざキーボードを切り換えなければならない。
日本語、英字、数字で 3 種類のキーボードを切り替えないといけないので面倒だ。
日本語、英字、数字で 3 種類のキーボードを切り替えないといけないので面倒だ。
しかし、最近やはり変換精度の悪さが気になりだしてきて…
#「きい」で「紀伊」が変換できないなんて…
そうだ!(・。・)b
足りない単語はユーザー辞書に登録すればいいんじゃね?
幸い、 nicoWnnG にはユーザー辞書のインポート機能がある。
ヘルプを見ると…ふんふん、タブ区切りのテキスト形式か。
今 PC で使ってる SKK の辞書を加工したら、簡単にできそうじゃないか。
ただし、登録できる単語数が 10000 までなので、ある程度絞る必要がある。
SKK-JISYO.L 辞書をテキストエディタで開いてと。175832 行あるな。
ざくっと一行一単語で考えると、 1/180 に削る必要がある。
え、∑(=゚ω゚=)マジ!?
まあ…なんとかなるだろw
最初に色々書いてあるが、 ";" で始まる行はコメントで変換関係ないから削除。
次に出てきたのが送り仮名付きの入力を変換するのに使うルール郡。
わるがしこs /悪賢/
「わるがしこさ」「わるがしこそ」等を「悪賢さ」「悪賢そ」等に変換するためのルールであるが、辞書への登録は単語単位なので必要なし。
送り仮名なしの単語郡は ";; okuri-ari entries." 以下に書いてあるので、そこまでの行をざくっと削除。
そうすると、半角記号→全角記号の変換ルールが出てきた。
! /!/感嘆符/
必要ないので削除。
その次の数字入りの入力に関する変換ルール
#、#てん /#1、#1点/
これも単語単位でないので削除。
次。
>あい /愛/
接尾辞変換…だから単語単位だっつってんだろうが(゚Д゚)ゴルァ!
削除。
AIDS /エイズ/後天性免疫不全症候群/
アルファベット→カタカナ変換は PC ではよく使うがスマホでは使わね。削除。
あ /亜/吾;私/彼;=吾/阿;阿呆/婀;婀娜っぽい/痾;宿痾/唖;聾唖/亞;「亜」の旧字(人名用漢字)/椏;また/娃;美女/哇/襾/安;?/明;?/嗚;?/
…やっと、普通の変換ルールが出てきた。
しかし、漢字一文字の変換って必要だろうか。いや、必要でない。
久し振りに反語を使ってみたので、削除。
あ> /亜;亜熱帯,亜低木,亜硝酸/
接頭辞変換も以下同文。
…これで、だいぶ減ったはず。
しかし、作業はこれから。
まず、 "/" 区切りになっているのをタブ区切りにしないといけない。
その際、
あいかわ /相川/愛川/鮎川/合川/
となっている箇所は
あいかわ <tab> 相川
あいかわ <tab> 愛川
あいかわ <tab> 鮎川
あいかわ <tab> 合川
のよう一行ずつ読みと変換結果、という形に加工しないといけない。
さすがに、一つ一つ手作業でやってると日が暮れるので、 perl スクリプトを書いて変換。
最終的にできた単語数…
167258
まだ多いわ!!
て言うか減ってねぇ!! (#`皿´) ムキーーーー!
て言うか減ってねぇ!! (#`皿´) ムキーーーー!
…結果、単語の少ない M 辞書 を使うことで単語数を 5966 まで抑えることができました
どうせまた使うだろうから、使ったスクリプトを残しておく。ついでに "/" の処理だけではなく、その前に書いた「余計な行の削除」も含めておいた。
Dropbox にも置いてあるけど…。ま、自慢念のためってことでw
ちなみに、 SKK の辞書は EUC-JP, nicoWnng の辞書は Shift-JIS である。
また、使った Cygwin の $LANG は utf-8 になっている。
Dropbox にも置いてあるけど…。ま、
ちなみに、 SKK の辞書は EUC-JP, nicoWnng の辞書は Shift-JIS である。
また、使った Cygwin の $LANG は utf-8 になっている。
#!/usr/bin/perl
## SKK-JISYO を元に nicoWnng のユーザー辞書を作成
use utf8;
use Encode;
my $outputCode = 'cp932'; # 出力文字コード
## 引数の確認
$fileName = shift(@ARGV);
if (!defined($fileName))
{
die("Input file name.");
}
open(FILE, "<", $fileName) or die("file open error.");
## ヘッダ (先頭が '!' で始まる行はコメント)
print encode($outputCode, "! convert from $fileName by $0\r\n"); # 改行 CRLF
## 以下、辞書から登録
$okuri_nashi = 0;
while ()
{
my $line = decode('EUC-JP', $_);
## ややこしいので送り仮名なしエントリのみを対象
if ($line =~ /^;; okuri-nasi entries\./)
{
$okuri_nashi = 1;
}
if ($okuri_nashi != 1)
{
next;
}
if ($line =~ /^([ぁ-ん]{2,}) \/(.*)\//) # UTF-8 の文字コードは ぁあぃい… の順
{ # 一文字の読みは不要
my $yomi = $1;
my @words = split('/', $2);
foreach my $wd (@words)
{
$wd =~ s/;.*$//g; # annotate は不要
$wd =~ s/[a-zA-Z0-9]+//g; # 英語の読みも不要
if (length($wd) > 1) # 一文字の登録も不要
{
my $outputLine = encode($outputCode, $yomi."\t".$wd."\r\n");
print $outputLine;
}
}
}
}
close(FILE);
コメント
コメントを投稿