Migemo: ローマ字のまま日本語をインクリメンタル検索

最終更新日: 2001-02-17


Migemo とは

migemo はローマ字のまま日本語をインクリメンタル検索するため のツールです。かな漢字変換してから検索するという重労働からあ なたを解放します。現在のところ Emacs用のインターフェイス (isearch へのラッパー) が用意されています。 最新版は http://migemo.namazu.org/ から入手可能です。

目次

新着情報

動作画面

漢字の検索

「活発」をインクリメンタル検索しているところ。 "kap" の時点で到達。

[I-search: ] [I-search: k]
[I-search: ka] [I-search: kap]

カタカナの検索

「カナブン」をインクリメンタル検索しているところ。"kana" の時点で到達。

[I-search: ] [I-search: k]
[I-search: ka] [I-search: kan]
[I-search: kana]

いわゆる全角英数字の検索

"3a:"をインクリメンタル検索しているところ。ASCII の "3a:" で検索可能。

[I-search: ] [I-search: 3]
[I-search: 3a] [I-search: 3a:]

行をまたぐ検索

「検索」をインクリメンタル検索しているところ。

[I-search: ] [I-search: k]
[I-search: ke] [I-search: ken] [I-search: kens]

英語の綴りでカタカナ語を検 索

「ソフトウェア」をインクリメンタル検索しているところ。

[I-search: ] [I-search: s]
[I-search: so] [I-search: sof]
[I-search: soft] [I-search: softw]

必要なもの

使い方

提供される関数

気が利いている点

既知の問題

仕組み

仕組みは簡単です。利用者が 1文字入力するたびに、ローマ字列か ら正規表現を生成して、それで検索するという富豪 的 な方法です。これを「動的パターン展開」と呼んでいます。 ここでは "nez" を例として説明します。まず、辞書を引いて候補 を抽出します (実際には辞書引き以外の処理も施します)。次の正 規表現は候補をすべて"\|" でつないだものです。

    nez\|nez\|寝\|寢\|根魚\|根崎\|寝醒め\|根差\|根差し\|
    寝惚\|寝相\|根津\|禰津\|鼠\|鼡\|鼠色\|鼠男\|鼠達\|鼠取\|
    捻\|捩\|螺\|捻子\|螺子\|捩子\|ネジ\|捻じ伏\|拗\|
    捩じ込み\|根占\|捩じり鉢巻き\|捩り鉢巻き\|根城\|ねざ\|
    ねじ\|ねず\|ねぜ\|ねぞ\|ねっ\|ネザ\|ネズ\|ネゼ\|ネゾ\|ネッ

この正規表現には、「鼠」「鼠色」「鼠男」のように「鼠」から始 まる候補がたくさんあります。これらは1つの「鼠」にまとめられ ます。また、「寝」「螺」のような 1文字の候補は文字クラスとし てまとめられます。このようにして正規表現を短くすると、 Emacs の [Regular Expression too big] というエラーを防げます。ほか の候補についても同様の処理を施すと、次の正規表現になります。

    [寝鼠捻螺寢拗捩鼡]\|nez\|ねざ\|ねじ\|ねず\|ねぜ\|ねぞ\|
    ねっ\|ネザ\|ネジ\|ネズ\|ネゼ\|ネゾ\|ネッ\|根魚\|根差\|
    根崎\|根城\|根占\|根津\|禰津\|nez

行をまたぐ検索を実現するために、2 byte の文字の間に "\s *" を埋めむと、次の正規表現ができあがります。

    [寝鼠捻螺寢拗捩鼡]\|nez\|ね\s *ざ\|ね\s *じ\|ね\s *ず\|
    ね\s *ぜ\|ね\s *ぞ\|ね\s *っ\|ネ\s *ザ\|ネ\s *ジ\|
    ネ\s *ズ\|ネ\s *ゼ\|ネ\s *ゾ\|ネ\s *ッ\|根\s *魚\|
    根\s *差\|根\s *崎\|根\s *城\|根\s *占\|根\s *津\|
    禰\s *津\|n\s *e\s *z

"\s " の意味はモードによって変わります。モードによっては行を またぐ検索ができないことがあります。

と、上のように正規表現を生成する処理を migemo.pl が担当しま す。Emacs とは双方向パイプで通信します。辞書は SKKSKK-JISYO.L を加工したものを利用します。

高速化のために、"a", "k", "s", "t", n", "ka", "sa", "ta", "na" などの短い文字列に対しては、あらかじめ生成した正規表現 を migemo.pl に埋め込んでいます。

ところで、ローマ字のまま日本語をインクリメンタル検索する別の 方針として、検索するたびにバッファの内容全体をローマ字に変換 し、それに対して検索するという方法が考えられます。この方法は、 テキストが大きくなると破綻します。

KAKASI -Jj -Kj -Hj で 100 KB のテキストファイルをローマ字に 変換すると、Pentium MMX 266 MHzの手元の計算機では初回に約 4 秒、次回からは約 2秒かかります。isearch で2秒も待たされては ストレスがたまります。 (筆者は 100 KB超のテキストファイルを 頻繁に編集します)

豆知識

ダウンロード

CVSから最新版を入手する

    % cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot login
    CVS password:   # Enter/Returnキーを叩く
    % cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot co sary

関連リンク集

メーリングリスト

migemo@namazu.org
Migemo に関する議論を行うメーリングリストです。
migemo メーリングリストへ参加(登録)するには、本文に subscribe あなたの名前 (名前はローマ字で。例: Tarou Yamada) と書いたメールを migemo-ctl@namazu.org へ送ります。
退会するには本文の先頭に # bye とだけ書いたメールを migemo-ctl@namazu.org に送ります。その際、 From: は メーリングリストに登録しているアドレスに設定してください。
過去の記事

TODO


高林哲 (satoru@namazu.org)