Kazuhiro's blog
ようこそ! Kazuhiro's blog
火曜日, 4月 25 2017 @ 03:44 午後 JST
 記事を友人にメールする 印刷用画面 

lsd-fuw is released

Lookup

ライフサイエンス辞書は2010年版まではJIS X 4081版のデータも公開されていましたが、現在はその公開も中止されています。 そこで、もう少し新しいデータを利用しており、再配布が許可されている、Firefox 用のアドオンであるライフサイエンス辞書ツールに含まれるデータを利用してLookup 1.4+mediaから検索できるようにしてみました。 ちなみに、最も新しい版のデータは「ライフサイエンス生き字引」という名前のAndroid及びiPhoneアプリに含まれているようです (データの構造はよく分かりませんでしたが、少なくともAndroid用の体験版には含まれているようでした)。

ライフサイエンス辞書ツールに含まれる辞書データはSQLite3のデータベースになっています。 当初は直接データベースを検索するエージェントを作って検索していましたが、日本語見出しに対する検索にものすごく時間がかかりました。 その為、結局FreeUWINGを使って変換するツールを作りました。 ちなみに、変換時も日本語見出しになると変換速度が一気に落ちます。

 記事を友人にメールする 印刷用画面 

Lookup 1.99の更新 その2

Lookup

以前にも紹介したLookup 1.99ですが、川幡さんが色々と対応書籍の拡充を図っており、PDIC/Unicodeの辞書 (要するに英辞郎 第四版) も検索できるようになりました。詳しくはスクリーンショット対応辞書の一覧を確認してください。 Lookup 1.4+mediaで拡張された機能もほとんど取り込まれていたと思いますが、例によってEmacs 23でしか動かないそうです。 興味のある方はどうぞ。

タグ:Lookup PDIC

 記事を友人にメールする 印刷用画面 

SDIC辞書のインデキシングを最適化する

Lookup

とか書くと偉そうに聞こえますが、自作のコードで必要な部分だけのインデックスポイントを書きださせることで、インデックスのサイズを小さくするという話です。 既存のアイデアではありますが、こういうのはスクリプト言語でやった方が楽じゃないかなぁという事で、紹介します。

SDICを使ってSDIC形式の辞書を検索する時、SUFARY(あるいはSary)を使ってインデキシングを行うことで検索の高速化が可能になります。 しかし、速くなるのはいいのですが、mkary等でインデキシングを行うと元のSDIC辞書のおよそ3倍という、結構な大きさのインデックスファイルが必要になります。 SDIC形式な辞書の場合、コメントの部分や、タグや実体参照の途中等からマッチさせる必要はありません。というか、されるとうれしくありません。 ですので、この部分についてはインデックスポイントを出力しないようにしてみます。 これにより、インデックスのサイズがおよそ2割前後小さくなりました。 また、全文検索を捨てて検索語だけでインデックスを作ったり、後方一致検索も捨てることで更に小さくできます。

mkary 最適化 検索語のみ 前方一致検索のみ
gene.sdic.ary 9,591,548 7,754,864 3,007,944 229,480
jedict.sdic.ary 10,397,976 7,422,524 2,245,376 452,778

一応公開しておきます。使い方ですが

% perl sdic_dumpip.pl gene.sdic

の様に使います。検索語のみでインデックスを作成する場合は

% perl sdic_dumpip.pl --index=keyword gene.sdic

の様にしてください。前方一致検索用のインデックスを作成する場合は

% perl sdic_dumpip.pl --index=prefix gene.sdic

の様にしてください。いずれの場合でも書き出し後にmkary(あるいはmksary)によるインデックスのソートが必要です。

% mkary -so gene.sdic
% mksary -s gene.sdic

タグ:SDIC Lookup

(2008/09/08 追記) <K>以外のタグもスキップするように変更しました。

 記事を友人にメールする 印刷用画面 

よくわからない解説

Lookup

UbuntuのeblookでEBGの辞書がひけない話の続きです。 EBGに対して(だけかどうか不明ですが)、ウムラウトの入った文字を含む単語を検索しようとするとLookupが反応しなくなったそうです。 呼ばれもしないのにしゃしゃり出ていろいろ試していただいた結果、一応解決したようです。 途中、解決しなかったらどうしようかと思いましたが。

過程はコメント欄でのやり取りを見て頂くとして、結局Readlineとiconvのサポートを切る事でうまく動作するようになりました。今のところ一番あやしいのはReadlineサポートです。 (コメント欄ではiconvも切るように書きましたが、iconvでおかしくなっているのであればshell-modeでも症状が再現するはずなので、その可能性は低いと思っています。) 何故Readlineサポートが有効だとダメなのかは追求していません。

通常、Lookupから呼ばれたeblookはReadlineサポートを無効にしますが、Emacsがターミナル上で動作している場合などはReadlineサポートは有効のまま動作します。ちなみに、以下のようなコードで判定を行っています。

if (!isatty(fileno(stdin))) interactive_mode = 0;

今回はこの判定がおかしかったのかもしれませんがやっぱり追求していません。 とりあえず思いついた、eblookのReadlineサポートを無効にする手段は以下の通りです。

eblookのReadlineサポートを無効にしてビルドする

eblookを使うのがLookupからだけであればReadlineサポートは必要ありません。

eblook-1.6.1+media (とLookup 1.4+media)を使う。

eblook-1.6.1+mediaにはReadlineサポートを無効にするオプションがあります。

また、eblookにおける日本語の文字コードですが、Lookup 1.4.1のデフォルトでは常にeuc-jpになります。 ndeb-process-coding-systemのデフォルト値もUNIX環境ではeuc-jpになるはずです。 Lookup 1.3ではeblookの文字コードはeblookの自動判定に任せますから、環境変数の値等に依存しています。 その為、ndeb-process-coding-systemもそれに合わせる必要があります。

(追記) Lookup 1.4+mediaでも、Readlineを有効にした状態のeblookにiso-8859-1な文字列を送ると動作がおかしくなりました。 Readlineを無効にすると解消したので、やはりReadline機能が問題になっているようです。

タグ:eblook Lookup

 記事を友人にメールする 印刷用画面 

eblookの文字コードについて

Lookup

UbuntuのLookupでEBGの辞書がひけないという話があったのでちょっと調べた結果のメモ。 ただし確認できる環境がないので未確認です。

とりあえずEUC-JP以外の文字コードを設定した場合はEBGはひけなさそうな気がします。 eblookは起動後に(日本語の)入出力に使う文字コードを決定し、出力時には内部コード(EUC-JP)を変換し、入力時にはEUC-JPへと変換します。 EUC-JPが指定されている場合は変換処理を行いません。

が、この文字コード変換処理はEBGの書籍を選択した時にも内部コードをEUC-JPとみなしたまま行われているような気がします。 これを回避するにはeblookをEUC-JPで使い、変換処理を行わせないようにする必要があります。

パッケージのことは分かりませんが、Lookup 1.4.1の場合はndeb-program-argumentsがデフォルト値のままであれば

(setq ndeb-process-coding-system 'euc-jp)

で、EUC-JPで動きます。

Lookup 1.3で動いていたものがLookup 1.4.1で動かないという部分と、:codingオプションが効かないという部分はよくわかりませんでした。 Lookup 1.3と1.4.1の間では、eblookの起動時にeuc-jpを使用するようになったくらいで、それ以外の文字コードの扱いは、:codingオプションも含めて変わっていないはずです (eblook側は追っかけてません)。 ですので、上記のようにEUC-JPでeblookを使うようにし、エージェントオプションとして:codingを指定すればよさそうな気がするのですが。

(更にバグっぽい動きも見つけてしまったので)本当はeblookを変更すべきですが、自分のところでは動作の確認が全くできないうえに、EBXA-Cについても視野に入れると大きな変更になりそうなのでちょっと手を出しにくいです。

タグ: eblook Lookup