*かんなの辞書をOSASKで使うためのメモ ***注意:(´_ゝ`)が勝手に調子にのってやってるだけですので、あまり深く気にしないでください。 テキスト形式のかんな辞書ではできましたが、他の辞書ではどうやるのか知りません。~ ---- 例として、とりあえずhttp://omaemona.sourceforge.net/packages/Zisyo/から、2ch.tを持ってきます。COLOR(blue){注意:03/08/27に更新されていますが、最近のものでは試していません。} ---- $ vi 2ch.t~ ddコマンドでコメント行を削除し、~ :%s/#[^ ]*/\t/g で整形する。viじゃなくてもいいと思う。~ $ qkc -sm 2ch.t~ で文字コードを合わせる。~ OSASKのFDを挿入。~ $ mount /mnt/floppy~ $ cp /mnt/floppy/te_dict0.txt ./~ $ cat te_dict0.txt 2ch.t > /mnt/floppy/te_dict0.txt~ $ umount /mnt/floppy~ 再起動して、あとは!guide!.txtでも読んでください。~ **お叱り -そういえばte_dicv0.binしたときに、error:insertとかたくさんでてたな。。。いちおう使えてますが、なんか多分間違えてます。馬鹿か?>自分 -- [[(´_ゝ`)]] SIZE(10){2003-08-29 (金) 15:32:37} -うーん!。これはなかなか面白い試みですねぇ。私も早速試してみよう。 -- [[hideyosi]] SIZE(10){2003-08-29 (金) 15:42:30} -そのエラーは同じ読みを検出したというエラーだと思います。心当たりはありますか? -- [[K]] SIZE(10){2003-08-29 (金) 15:50:29} -すみません。よく意味が分かりませんでした。できた辞書は使えることしか試してないもので。。オリジナルのte_dict0.txtには「入出力」や、「防衛」の行が重複しているようですが。。 -- [[(´_ゝ`)]] SIZE(10){2003-08-29 (金) 15:57:21} -すみません、おっしゃるとおりでした。重複はまずいのですが、それはerror:insertにはならないようです。・・・ちょっとまじめに調べてみました。そのエラーが出るのは、次のうちのどれかです。 -- [[K]] SIZE(10){2003-08-29 (金) 16:33:41} -1.辞書サイズが僕の想定限界に近くなりすぎた(256KB)。2.変換対象のひらがなはあるが、変換先の漢字(漢字ではなくてもいいが)がない。3.一つの読みに対して、変換候補が多すぎる(最大60)。・・・ありそうなのは容量オーバですかね。重複削ればサイズは減りますし、要望があれば上限をもっと増やすこともできます。 -- [[K]] SIZE(10){2003-08-29 (金) 16:39:48} -重複についてですが、例えば「あらし」が2ch.tでは次のように登録されています。 -- [[K]] SIZE(10){2003-08-29 (金) 16:46:06} あらし 荒らし あらし 荒ら氏 あらし 荒氏 あらし 新氏 あらし 嵐 -さらに読み「あらし」については、te_dicv0.txtにもあります。 あらし 嵐 -この結果、おそらく「あらし」を変換しても、この中のどれか一つしか変換候補に出てこないでしょう。もしこれを全部有効にしたければ、これらを一つにまとめる必要があります。 あらし 嵐 荒らし 荒ら氏 荒氏 新氏 -こうすればちゃんとこの順序で候補が出てきます。この辺の処理をやってくれるフィルターを作ればいいんですが、僕には面倒で・・・。 -将来的には読みの重複もエラーにする予定です。もっとも、それより先に用言活用対応辞書にアップグレードするかもしれませんが(その場合でも、今の辞書はそのまま利用できるようにする予定です)。 -- [[K]] SIZE(10){2003-08-29 (金) 16:55:14} -同じテキストファイル中で、同じ候補が縦にならんでいるのならば、Perlかなんかでちょちょっとやればすぐでは?ちなみに、現在のteditの辞書はSKKの辞書を整形したものに、川合さんが手を加えているかたちですね。 -- [[くーみん]] SIZE(10){2003-08-29 (金) 18:49:49} in_ar = [] while instr = gets in_ar << instr.chomp end in_ar.sort! hl = "" pt = "" in_ar.each {|s| if s != "" then if /^([^\/\s]+)(\s+)(.+)/ =~ s then key = $1 sth = $3 hl = key if hl == "" if hl == key then if pt == "" then pt = sth else pt = pt + " " + sth end else print hl + "\t" + pt + "\n" pt = sth hl = key end end end } print hl + "\t" + pt + "\n" if hl != "" 適当に名前を付けて(とりあえず tdicm.rb )保存、コマンドラインで以下のように実行。ファイルに入れる場合はリダイレクトかまして。 ruby tdicm.rb old.txt -↑Rubyでよければどうぞ 笑・・・だけどあまりテストしっかりしてないので・・・試してダメだったらゴメン -- [[nisi]] SIZE(10){2003-08-31 (日) 22:37:03} -早速へんなとこがあったので修正しました 汗 -- [[nisi]] SIZE(10){2003-08-31 (日) 22:51:24} -神!感謝感謝。 -- [[(´_ゝ`)]] SIZE(10){2003-09-02 (火) 18:58:48} -ちなみに複数の辞書を結合したい場合は結合したいファイル名を列挙してください。ワイルドカード指定でもいいですにょ -- [[nisi]] SIZE(10){2003-09-03 (水) 16:24:06} #comment
(This host) = http://osask.net