4.2 文字列検索
Lookup のもっとも一般的な検索方法は、検索語となる文字列を指定して検索を行なうことです。以下、これについて詳しく説明します。
4.2.1 標準の検索コマンド
Lookup 標準の検索コマンドには、代表して次の五つのものがあります。
- M-x lookup-pattern
-
ミニバッファからの入力を検索語に検索を開始します。デフォルトの検索語として、ポイント位置の単語が取り出されます。
この時、変数 lookup-use-mecab の値が non-nil であれば、
Mecab プログラムを利用して日本語の単語もそれなりに切り出します。これはデフォルトでは nil になっています。
最近の Emacs であれば、デフォルトの検索語はミニバッファで M-n
とすることで編集することが出来ます。
- M-x lookup-region
-
リージョンの文字列を検索語に検索を開始します。
- M-x lookup-word
-
ポイント位置の単語を検索語に検索を開始します。
-
lookup-selection
-
マウスによる選択領域を検索語に検索を開始します。
これをマウスの適当なボタンにバインドしておくと、それをクリックすることで、そのときのマウスによる選択領域を検索語に検索を行なうことが出来ます。選択領域は Emacs のバッファである必要はなく、他のアプリケーション上であっても構いません。
これはイメージとしては、X Window System でのマウスによるコピー&ペーストとよく似ています。最初にコピーしたい領域をマウスで選択し、その後、コピー先のバッファで中ボタンをクリックすることでコピーは完了します。それと同様に、次のように設定しておくことで、Emacs のバッファにペーストする代わりに、
Lookup が検索を行なうようになります。
| (global-set-key [mouse-2] 'lookup-selection)
|
ただし、こうしてしまうと、標準のペーストの動作が使えなくなったりするので、実際には別のクリックにバインドしておくとよいでしょう。
-
lookup-secondary
-
マウスによる第二選択領域を検索語に検索を開始します。
Emacs の Secondary Selection の機能を用いて検索を行ないます。
(1)
Secondary Selection とは、ポイントを移動させることなくマウスで特定領域を選択するための機能で、デフォルトでは M-Mouse-1 にバインドされています。See (emacs)Secondary Selection.
これをうまく用いることで、マウスのダブルクリックやドラッグによって文字列を選択するだけで検索が行なえるようになっています。もし標準のバインドを置き換えてよいのであれば、次のように設定して下さい。
| (global-set-key [M-down-mouse-1] 'lookup-secondary)
(autoload 'lookup-secondary "lookup" nil t)
|
新たに定義するのであれば、例えば次のようにします。
| (global-set-key [S-mouse-1] 'mouse-start-secondary)
(global-set-key [S-drag-mouse-1] 'mouse-set-secondary)
(global-set-key [S-down-mouse-1] 'lookup-secondary)
(autoload 'lookup-secondary "lookup" nil t)
|
後者の例では、Shift キーを押しながら左のダブルクリックでカーソル位置の単語を、同じく領域をドラッグすることで選択部を検索するようになります。
これら四つのコマンドには更に、‘-full-window’ と ‘-other-frame’
を付加したバリエーションがあります。つまり、全部で以下の十五の標準検索コマンドが用意されています。
- M-x lookup-pattern
検索語を入力して検索する。
- M-x lookup-pattern-full-screen
M-x lookup-pattern と同じ。結果を画面全体で表示する。
- M-x lookup-pattern-other-frame
M-x lookup-pattern と同じ。結果を別のフレームで表示する。
- M-x lookup-region
リージョンの文字列を検索語に検索する。
- M-x lookup-region-full-screen
M-x lookup-region と同じ。結果を画面全体で表示する。
- M-x lookup-region-other-frame
M-x lookup-region と同じ。結果を別のフレームで表示する。
- M-x lookup-word
ポイント位置の単語を検索語に検索する。
- M-x lookup-word-full-screen
M-x lookup-word と同じ。結果を画面全体で表示する。
- M-x lookup-word-other-frame
M-x lookup-word と同じ。結果を別のフレームで表示する。
-
lookup-selection
マウスでの選択領域を検索語に検索する。
-
lookup-selection-full-screen
lookup-selection と同じ。結果を画面全体で表示する。
-
lookup-selection-other-frame
lookup-selection と同じ。結果を別のフレームで表示する。
-
lookup-secondary
Secondary Selection の文字列を検索語に検索する。
-
lookup-secondary-full-screen
lookup-secondary と同じ。結果を画面全体で表示する。
-
lookup-secondary-other-frame
lookup-secondary と同じ。結果を別のフレームで表示する。
‘-other-frame’ となっている各コマンドを用いたときのフレームのパラメータは、変数 lookup-frame-alist により与えられます。
4.2.2 標準の検索方式
M-x lookup-pattern で検索したい単語を入力したり、
M-x lookup-region などで検索語を指定したときの標準の検索方式を
単語検索 と呼びます。これは実際には固有の検索方式ではなくて、後述する各種の検索方式を間接的に呼び出すためのものです。
通常、検索語と完全にマッチしたエントリを探し出すことを「完全一致検索」と言いますが、Lookup では多種類の辞書を扱う関係から、これをデフォルトとしてしまうのでは少し問題があります。例えば ‘emacs’ という単語を検索するとき、辞書によっては見出し語として ‘GNU Emacs’ としか持たないために、それが見付からないということがあります。これは辞書側の問題だと言えばそうかもしれませんが、やはりそれでは不便なので、少し工夫が必要です。
もし辞書が ‘GNU Emacs’ という見出し語しか持たなくとも、完全一致検索ではなく「キーワード検索」でということなら、それを見付け出すことも出来るかもしれません。そのため標準の検索方式としては、辞書によって実際の検索方式を切り換えながら検索してくれるのが便利です。そのため単語検索は、状況に応じて実際の振る舞いを適当に変化させるようになっています。
単語検索が実際に行なう検索方式は、変数 lookup-default-method
により設定することが出来ます。これはデフォルトでは exact 、つまり完全一致検索となっています。これを前方一致検索にしたければ prefix
とします。可能な検索方式とそれに対応したシンボル名については、
検索方式のいろいろ を参照して下さい。
いくつかの検索エージェントでは、デフォルトの検索方式を上書きして、例えばキーワード検索を行なうように設定されています。詳しくはエージェントの各節を参照して下さい。また、特定のエージェントや辞書での検索方式を変えるには、辞書オプション :default-method を用いることが出来ます。
4.2.3 検索方式のいろいろ
文字列を指定する検索の中でも特に、M-x lookup-pattern のように特定のパターンを入力して行なう検索のことを、Lookup では パターン検索
と呼びます。パターン検索では、次のような特殊なパターンを指定することで、様々に検索方式を切り換えることが可能です。それぞれの検索方式には固有のシンボル名と記号が関連付けられており、いくつかの場所で利用されます。
- word
- 単語検索 (
default , ~ )
標準の検索方式です。これは実際には、下記のいずれかの検索方式を間接的に呼び出すようになっています。See section 標準の検索方式.
- ’word’
- 完全一致検索 (
exact , = )
-
与えられた文字列と完全に一致する見出し語を持つエントリを検索します。この例では ‘word’ や ‘Word’ などが見付かります。
- word*
- 前方一致検索 (
prefix , < )
-
与えられた文字列を見出し語の先頭に持つようなエントリを検索します。この例では ‘wordage’ や ‘wording’ などが見付かります。
- *word
- 後方一致検索 (
suffix , > )
-
与えられた文字列を見出し語の末尾に持つようなエントリを検索します。この例では ‘keyword’ や ‘headword’ などが見付かります。
- *word*
- 部分一致検索 (
substring , - )
-
与えられた文字列を見出し語の一部に含むようなエントリを検索します。この例では ‘unwordy’ や ‘swordsman’ などが見付かります。
- w*o?d
- グロブパターン
上の三つを更に進めた表現として、任意のグロブパターンが指定出来ます。つまり文字 ‘*’ が任意の文字列とマッチし、文字 ‘?’ が任意の一文字とマッチします。この例では ‘word’ や ‘womanhood’ などが見付かります。
この検索パターンは、実際にはパターンを正規表現に変換して検索を行ないます。今の例では ‘^w.*o.d$’ のように変換されます。従って、これを用いるには辞書が次の正規表現検索に対応していなければなりません。
- /word/
- 正規表現検索 (
regexp , r )
-
与えられた正規表現とマッチする見出し語を持つエントリを検索します。入力はそのまま検索エージェントに渡されるため、正規表現のスタイルは利用するエージェントに依存します。
- @word
- キーワード検索 (
keyword , @ )
-
辞書が見出し語だけでなくエントリ毎のキーワードを持つ場合、このパターンによってそれを検索することが出来ます。何をキーワードとして持つかは利用する検索エージェントによって異なるため、それぞれのエージェントについての説明を参照して下さい。
- /word
- 全文検索 (
text , / )
-
これは他の検索方式とは少し異なります。他のものは辞書にあらかじめ用意されているインデックスから検索を行ないますが、これは辞書の全体から力ずくで検索語を探し出します。そのためしばしば非常に多くの検索時間を必要とするため、この検索パターンを指定すると確認のためのプロンプトが表示されます。
- リファレンス (
:reference , % )
-
これは検索方式ではありませんが、同じく記号が割り当てられているのでここで説明しておきます。リファレンス とは、あるエントリと関連付けられている別のエントリのことを言います。通常、Web ページと同様に、エントリ本文から別のエントリへとリンクが張られています。
他の検索方式を利用したのではなく、リンクを辿ってリファレンスを表示したときには、そのときの検索方式として上の記号が用いられます。
以上の全ての検索方式に辞書が対応しているわけではありません。辞書が対応している検索方式を知るためには、最初に M-x lookup としたとき出力される辞書一覧バッファを参照して下さい。(see section 特定の辞書を利用する)
辞書が対応していない検索法が指定された場合には、現在は単純に無視されます。これは将来的には未対応の通知を出すように変更するかもしれません。
|