modeless SKK
modeless SKKのプロトタイプの作成中。Sekka:石火(仮名)
曖昧検索の評価
プロトタイプといっても、曖昧検索がどれくらい効果的かという実験をしようとしているところ。 曖昧検索というのはGoogle検索の『もしかして』機能をイメージしてもらえれば良いかと思う。それをローマ字の綴りに限定したもの。 昔からある yc.el や ゆでたまご等の modeless 入力メソッドの弱点は、目視では変換前のローマ字綴り間違いに気づきにくいというところ。 例えば、『しぜんげごしょり』なら間違いにきがつきやすいが、『shizengegosyori』では全くどこが抜けたのかわからないだろう。 今回の曖昧検索を modeless SKK に適用すれば、上のキーワードでも『自然言語処理』を変換候補にすることが可能だ。
さて、実装だが、SKKのラージ辞書 (SKK-JISYO.L) をローマ字をキーに検索できるようにし、辞書に入っているローマ字と、ユーザー入力のローマ字のJaro-Winkler距離が近い方から列べるとどんな具合いかを見た。 結果はなかなか脈ありな感じ。 以下に実行結果を載せているけれども、 『雰囲気』に対するローマ字クエリとしてfunnikiでもfunikiでも、さらに間違ったfuinkiでも救えていたり、『漢字変換』に対しては kajinhenkan や kanjihekan を救えているのはいいかも。
実験の様子
- JaroW()がJaro-Winklerの距離(値域 0.0 ≦ 1.0)
- 閾値 = 0.940000 は JaroWの値での足切り値
$ ./aimai
> henkan
閾値 = 0.940000 探索件数(1176)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *henkan*:*変換/返還*
JaroW(0.96667) Jaro(0.94444) PairD(0.88889) *henka*:*変化/返歌*
JaroW(0.95000) Jaro(0.91667) PairD(0.83333) *henkango*:*変換後/返還後*
JaroW(0.95000) Jaro(0.91667) PairD(0.83333) *henkanbu*:*変換部*
JaroW(0.95000) Jaro(0.91667) PairD(0.66667) *henkabun*:*変化分*
JaroW(0.95000) Jaro(0.91667) PairD(0.83333) *henkanji*:*変換時*
JaroW(0.95000) Jaro(0.91667) PairD(0.83333) *henkanki*:*変換器/変換機*
JaroW(0.95000) Jaro(0.91667) PairD(0.66667) *henkaten*:*変化点*
JaroW(0.95000) Jaro(0.91667) PairD(0.66667) *henkouan*:*変更案*
> henkann
閾値 = 0.940000 探索件数(1176)
----------
JaroW(0.97143) Jaro(0.95238) PairD(0.90909) *henkan*:*変換/返還*
JaroW(0.95556) Jaro(0.92593) PairD(0.71429) *henkanten*:*変換点*
JaroW(0.94286) Jaro(0.90476) PairD(0.80000) *henka*:*変化/返歌*
JaroW(0.94000) Jaro(0.90000) PairD(0.66667) *henkantani*:*変換単位*
> funiki
閾値 = 0.940000 探索件数(2851)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *funiki*:*雰囲気/氛圍氣;「雰」別字、「囲」「気」旧字*
JaroW(0.97143) Jaro(0.95238) PairD(0.72727) *funinki*:*不人気*
JaroW(0.94167) Jaro(0.91667) PairD(0.66667) *funehiki*:*船引*
JaroW(0.94167) Jaro(0.91667) PairD(0.66667) *funabiki*:*船曳*
> funniki
閾値 = 0.940000 探索件数(2851)
----------
JaroW(0.96667) Jaro(0.95238) PairD(0.90909) *funiki*:*雰囲気/氛圍氣;「雰」別字、「囲」「気」旧字*
JaroW(0.96667) Jaro(0.95238) PairD(0.66667) *funinki*:*不人気*
> fuinki
閾値 = 0.940000 探索件数(2851)
----------
JaroW(0.95556) Jaro(0.94444) PairD(0.40000) *funiki*:*雰囲気/氛圍氣;「雰」別字、「囲」「気」旧字*
> tokyo
閾値 = 0.940000 探索件数(3795)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *tokyo*:*トーキョー/東京*
JaroW(0.96667) Jaro(0.94444) PairD(0.88889) *tokyou*:*都響;[略語*東京都交響楽団]
JaroW(0.96111) Jaro(0.94444) PairD(0.66667) *tokiyo*:*時世*
JaroW(0.96111) Jaro(0.94444) PairD(0.88889) *tokkyo*:*特許*
JaroW(0.95333) Jaro(0.93333) PairD(0.57143) *toko*:*床/常*
JaroW(0.94667) Jaro(0.93333) PairD(0.57143) *toyo*:*豊/樋/豐;「豊」の旧字*
> toukyouto
閾値 = 0.940000 探索件数(3795)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *toukyouto*:*東京都*
JaroW(0.95556) Jaro(0.92593) PairD(0.75000) *toukyougo*:*東京語*
JaroW(0.95556) Jaro(0.92593) PairD(0.85714) *toukyou*:*東京/東教*
JaroW(0.95000) Jaro(0.91667) PairD(0.84211) *toukyoutomin*:*東京都民*
JaroW(0.95000) Jaro(0.91667) PairD(0.84211) *toukyoutonai*:*東京都内*
JaroW(0.95000) Jaro(0.91667) PairD(0.84211) *toukyoutosyo*:*東京図書*
> tokyoto
閾値 = 0.940000 探索件数(3795)
----------
JaroW(0.94286) Jaro(0.90476) PairD(0.80000) *tokyo*:*トーキョー/東京*
JaroW(0.94074) Jaro(0.92593) PairD(0.57143) *toukyouto*:*東京都*
> change
閾値 = 0.940000 探索件数(4109)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *change*:*チェンジ*
JaroW(0.97143) Jaro(0.95238) PairD(0.90909) *changer*:*チェンジャー*
JaroW(0.96667) Jaro(0.94444) PairD(0.88889) *chang*:*チャン/チャング*
JaroW(0.95000) Jaro(0.91667) PairD(0.83333) *changeup*:*チェンジアップ*
> chance
閾値 = 0.940000 探索件数(4109)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *chance*:*チャンス*
> tokugawaie
閾値 = 0.940000 探索件数(3795)
----------
JaroW(0.96000) Jaro(0.93333) PairD(0.87500) *tokugawa*:*徳川*
JaroW(0.96000) Jaro(0.93333) PairD(0.77778) *tokugawake*:*徳川家*
JaroW(0.96000) Jaro(0.93333) PairD(0.77778) *tokugawaki*:*徳川期*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaienari*:*徳川家斉;11th(1787-1837)*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaienobu*:*徳川家宣;6th(1709-12)*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaiemitu*:*徳川家光;3rd(1623-51)*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaietugu*:*徳川家継;7th(1713-16)*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaietuna*:*徳川家綱;4th(1651-80)*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaieyasu*:*徳川家康;1st(1603-05)*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaieharu*:*徳川家治;10th(1760-86)*
JaroW(0.94286) Jaro(0.90476) PairD(0.81818) *tokugawaiesada*:*徳川家定;13th(1853-58)*
> gengosyori
閾値 = 0.940000 探索件数(1487)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *gengosyori*:*言語処理*
JaroW(0.95385) Jaro(0.92308) PairD(0.85714) *gengosyorikei*:*言語処理系*
> nihongo
閾値 = 0.940000 探索件数(2278)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *nihongo*:*日本語*
JaroW(0.95556) Jaro(0.92593) PairD(0.85714) *nihongoon*:*日本語音*
JaroW(0.95556) Jaro(0.92593) PairD(0.85714) *nihongoka*:*日本語化/日本語可*
JaroW(0.94286) Jaro(0.90476) PairD(0.80000) *nihon*:*日本/二本*
JaroW(0.94286) Jaro(0.90476) PairD(0.83333) *nihonga*:*日本画*
JaroW(0.94286) Jaro(0.90476) PairD(0.83333) *nihongi*:*日本紀;六国史、または日本書紀のこと*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *nihongoban*:*日本語版*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *nihongobun*:*日本語文*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *nihongomei*:*日本語名*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *nihongofuu*:*日本語風*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *nihongoron*:*日本語論*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *nihongotuu*:*日本語通*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *nihongoyou*:*日本語用*
JaroW(0.94000) Jaro(0.90000) PairD(0.66667) *nihonsaigo*:*日本最後*
> kanakanji
閾値 = 0.940000 探索件数(7813)
----------
JaroW(1.00000) Jaro(1.00000) PairD(1.00000) *kanakanji*:*かな漢字/仮名漢字*
JaroW(0.95556) Jaro(0.92593) PairD(0.85714) *kanakan*:*かな漢/仮名漢*
> kanakannji
閾値 = 0.940000 探索件数(7813)
----------
JaroW(0.98000) Jaro(0.96667) PairD(0.94118) *kanakanji*:*かな漢字/仮名漢字*
JaroW(0.94000) Jaro(0.90000) PairD(0.80000) *kanakan*:*かな漢/仮名漢*
> kanakenji
閾値 = 0.940000 探索件数(7813)
----------
JaroW(0.95556) Jaro(0.92593) PairD(0.75000) *kanakanji*:*かな漢字/仮名漢字*
> kajinhenkan
閾値 = 0.940000 探索件数(7813)
----------
JaroW(0.97576) Jaro(0.96970) PairD(0.70000) *kanjihenkan*:*漢字変換*
> kanjihekan
閾値 = 0.940000 探索件数(7813)
----------
JaroW(0.96182) Jaro(0.93636) PairD(0.84211) *kanjihenkan*:*漢字変換*
JaroW(0.94000) Jaro(0.90000) PairD(0.66667) *kanjika*:*漢字化*
> q
quit.
$
参考資料
Jaro–Winkler distance - Wikipedia, the free encyclopedia (英語) AWK Users JP :: Jaro-Winkler 距離の計算 スペルミス修正プログラムを作ろう
ソースコード
[Nendo]で書いている。ライブラリはKyoto Cabinetとamatchを使っている。 src/aimai at d537aa2d48789eaca6aa8de7301b84a0ae2819b4 from kiyoka’s sekka - GitHub
課題
送り仮名の綴り間違いをどうするかが課題だなあ。