[Lookup] Language: English, Japanese

Lookup
Top Page
Screenshots
Dictionaries
Documentation
Mailing Lists
Project Summary
CVS Repository

Links
Edict
EBNETD
FreePWING
FPWBook
DICT Project
FreeDict Project

Emacs
GNU Emacs
NTEmacs (ja)
Aquamacs

This page is
[Lookup]

Hosted by
[SourceForge]
[RingServer]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4 その他の主な設定項目


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4.1 拡張検索の準備

日頃から検索をしていると、入力のちょっとした誤りくらいは自動的に修正して検索を行なってくれると有り難く思います。Lookup には、入力された検索語を補正するためのいくつかの機能が備わっています。

単語の語尾を取り除く

英語などで、単語の複数形や過去形などに付く余分な文字列を取り除き、原型を推測するための処理を stemming といいます。これが出来ると、文字列の修正なしに検索を行なえるので便利です。Lookup では、辞書オプション :stemmer を指定することで、stemming を行なうよう設定出来ます。

オプション :stemmer には、stemming を行なう関数を指定します。標準では、英単語用の stemming 関数 stem-english が備えられています。次のように設定して下さい。

 
(lookup-set-dictionary-option "agent:DICT" ':stemmer 'stem-english)

これで指定した辞書から検索を行なうときには、stemming が行なわれるようになります。具体的には、次の手順で検索されます。

  1. 元の検索語で検索する。

    始めは入力をそのまま検索します。それで見付かれば何も問題ありません。

  2. 設定された stemming 関数で原型を推測する。

    stemming 関数は、文字列を受け取ってその原型の候補のリストを返します。 Lookup は候補のそれぞれについて、辞書から単語が見付かるまで検索を繰り返します。検索語が単純な複数形や過去形をしていれば、一度のやり直しで結果にたどり付けるはずです。

  3. 共通の語頭を持った似た単語を探し出す。

    例えば、‘lexicographer’ という語は載っていないが、 ‘lexicography’ なら載っているという辞書があるかもしれません。 stemming ではそのようなケースに対応することは出来ませんが、参考程度にその情報を示してくれると親切です。そこで、ある程度の語長を持つ語を検索した場合に限って、Lookup は共通語頭を持つ語の検索に挑戦します。

これでも何も見付からなければ検索を諦めます。その場合、二回か三回の検索処理が無駄になりますが、遠隔地の辞書サーバにアクセスしているのでもない限り、これは大したコストではありません。よってあらかじめ厳格なスペルチェックを行なうよりも、この方式を用いる方が、効率的に自動補正を行なえます。

スペルチェックを行なう

語尾だけの問題ではなく、綴りそのものを間違えたのでは何も見付かりません。そこで検索語のスペルチェックを行ない、その上で検索を行なう機能が欲しくなります。

Lookup のスペルチェック機能は、検索エージェント ‘ndspell’ として実現されています(see section ndspell)。lookup-search-agents の設定において、リストに ndspell を加えることでスペルチェックが行なわれるようになります。

ここでリストのどの位置に ndspell を加えるかが問題となります。ndspell を置く位置を変えることで、スペルチェックを行なうタイミングを変えることが可能です。

リストの最初に ndspell を置くと、いきなりスペルチェックを始めます。スペルミスがあまりにも多く、スペルチェックをしてから検索を始めたいという人には、この方法が向いているかもしれません。

しかし、検索の度に毎回スペルチェックを行なうというのは効率的ではありません。そこで ndspell をリストの最後に置くことで、まず他の辞書で一度検索を行ない、それでも何も見付からなかったときのみ、ndspell でスペルチェックを行なうようにすることが出来ます。ndspell は、そのような利用を想定して作られています。

もしどうしてもスペルチェックを行ないたいということがあれば、Entry バッファで g を押して再検索を行なうことで、ndspell にスペルチェックを強制することも可能です。より詳しくは、ndspell を参照して下さい。

任意の拡張検索

辞書の性質によっては、ユーザーが任意の置き換えを定義したい場合があるかも知れません。そのような場合には、:expander オプションと :expand-filter オプションが利用できます。

例えば、次のような設定ができます。

 
(lookup-set-dictionary-option "agent:DICT" ':expander 'foo-expander)
(lookup-set-dictionary-option "agent:DICT" ':expand-filter 'foo-filter)

ただし、foo-expander は、文字列を取り、文字列のリストを返す関数でなければなりません。また、foo-filter は、文字列とエントリのリストを取り、エントリのリストを返す関数でなければなりません。

このように設定すると、Lookup は以下のような検索処理を行います。

  1. 元の検索語で検索する。
  2. 検索語を foo-expander によって置換して再検索を行う。
  3. 得られたエントリを、foo-filter を用いてフィルタリングする。

前節で説明した漢字ひらがな拡張検索機能は、次のような設定と同値です。

 
(lookup-set-dictionary-option "agent:DICT" ':expander 'lookup-kanji-get-readings)
(lookup-set-dictionary-option "agent:DICT" ':expand-filter 'lookup-kanji-filter)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]