Migemo とは?
Migemo はローマ字のまま日本語をインクリメンタル検索するため のツールです。かな漢字変換をすることなく日本語のインクリメン タル検索を快適に行うことができます。
新着情報
- 2004-06-28: 関連リンク集に fub と XUL/Migemoプロジェクト を追加しました。
- 2004-01-28: yoshi223氏による MigemizeExplorer が公開されました。
Windows の「エクスプローラーにおいてローマ字入力のみで日本語 ファイルをインクリメンタルに検索/選択することを可能にする」 ツールです。 - 2003-05-29: Migemo 0.40 を公開
- 連文節の検索に対応しました。
- C/Migemoに対応しました。
- Emacs側でのキャッシュに対応しました。
(白井秀行さんによる改良) - Ruby 1.8 でも動くようにしました。
- その他、細かい修正をたくさん施しました。
- 2000-07-04: 最初の版を公開
必要なもの
- Emacs
Emacs 20.7, 21.2.1, XEmacs 21.4 で動作確認しています。 - APEL
おそらく必要です。 - Ruby 1.6以降
- Ruby/Romkan
- Ruby/Bsearch
使い方
- gzip -dc migemo-xxx.tar.gz | tar xvf -
でソースを展開し、 migemo-xxx ディレクトリへ移動。 - ./configure && make && make install
で migemo をインストール - ~/.emacs に (load "migemo.el") を追加する
- migemo.el を読み込むと C-s, C-r (isearch-{forward,backward}) でローマ字のまま日本語をインクリメンタル検索で きるようになります
元に戻すには M-x migemo-toggle-isearch-enable
提供するもの
- Emacs用インターフェイス
- Ruby用のライブラリ
Emacs 側でのキャッシュを有効にする
Emacs 側でのキャッシュを有効にする場合は次のような設定を .emacs に加えます。
(setq migemo-use-pattern-alist t) (setq migemo-use-frequent-pattern-alist t)
C/Migemo を利用する
C/Migemo を使う場合は次のような設定を .emacs に加えます。
(setq migemo-command "cmigemo") (setq migemo-options '("-q" "--emacs" "-i" "\a")) (setq migemo-dictionary "somewhere/migemo/euc-jp/migemo-dict") (setq migemo-user-dictionary nil) (setq migemo-regex-dictionary nil))
提供される関数
- M-x migemo-forward
前方に migemo (ローマ字のまま日本語をインクリメンタル検索) する - M-x migemo-backward
後方に migemo (ローマ字のまま日本語をインクリメンタル検索) する - M-x migemo-toggle-isearch-enable
isearch-{forward,backward} へのラッパーを on/off - M-x migemo-expand-pattern
カーソル位置の左側のローマ字列を migemo の正規表現に展開する
スクリーンショット
漢字の検索
「活発」をインクリメンタル検索しているところ。 "kap" の時点で到達。
連文節の検索
「連文節の検索」のような複数の文節にまたがる言葉を検索すると きは SKKと同様に "renbunsetuNoKensaku" のように文節の先頭を 大文字で入力します。
カタカナの検索
「カナブン」をインクリメンタル検索しているところ。"kana" の時点で到達。
全角英数字の検索
"3a:"をインクリメンタル検索しているところ。ASCII の "3a:" で検索可能。
行をまたぐ検索
「検索」をインクリメンタル検索しているところ。
英語の綴りでカタカナ語を検 索
「ソフトウェア」をインクリメンタル検索しているところ。
気が利いている点
- ASCII の文字をインクリメンタル検索できる
"bb || !bb" のような文字列を普通に検索できる - ひらがな、カタカナをインクリメンタル検索できる
"aiueo" で "あいうえお", "アイウエオ" をインクリメンタル検索できる - 全角英数字に対応
"abc123=+-" で "abc123=+−" をインクリメンタル検索できる - 英語の綴りでカタカナ語をインクリメンタル検索できる
辞書に登録されている単語だけです。例: software, internet - 行をまたぐ検索ができる
- ローマ字はヘボン式と訓令式の両方に対応
のつもりだけど、完璧ではないでしょう。処理はどろどろしている。 - nn と n' に対応
「ん」は nn または n' と打てます。安全なときは n と打てます。例:
反応: hannnou, han'nou
漢字: kanji, kannji, kan'ji
既知の問題
- 用言の対応はいいかげん
活用は対応していない 。tae で「耐え」は検索できない。 - 辞書に載っていない単語は検索できない
ひらがな、カタカナ、英数字記号は大丈夫 - 複数の語からなる文字列を検索するときは制限がある
たとえば「動詞の対応」を検索するには DousiNoTaiou のように 文節を先頭を大文字にする必要がある - 実用的な速度で動くが、やはりちょっと遅い
いまどきの計算機なら不満はない。 - isearch-backward が不安定
これは根が深い問題です。ラッパーを改良する必要があります。- 行をまたぐ検索ができない
- 英語の綴りによる検索が不完全
"soft" まではいいが "softw" で失敗する。
仕組み
仕組みは簡単です。利用者が 1文字入力するたびに、ローマ字列か ら正規表現を生成して、それで検索するという力技な方法です。 ここでは "nez" を例として説明します。まず、辞書を引いて候補 を抽出します (実際には辞書引き以外の処理も施します)。次の正 規表現は候補をすべて"\|" でつないだものです。
nez\|nez\|ねざ\|ネザ\|ねじ\|ネジ\|ねず\|ネズ\|ねぜ\| ネゼ\|ねぞ\|ネゾ\|ねっ\|ネッ\|根差\|根魚\|根崎\|寝醒め\| 根差し\|寝惚\|寝相\|根津\|禰津\| 鼠\|鼡\|鼠色\|鼠男\|鼠 達\|鼠取\|捻\|捩\|螺\|捻子\|螺子\|捩子\|ネジ\|拗\|捻じ伏 \|捩じ込み\|根占\|捩じり鉢巻き\|捩り鉢巻き\|根城
この正規表現には、「鼠」「鼠色」「鼠男」のように「鼠」から始 まる候補がたくさんあります。これらは1つの「鼠」にまとめられ ます。また、「寝」「螺」のような 1文字の候補は文字クラスとし てまとめられます。このようにして正規表現を短くすると、 Emacs の [Regular Expression too big] というエラーを防げます。ほか の候補についても同様の処理を施すと、次の正規表現になります。
[鼠捻螺拗捩鼡]\|nez\|nez\|ね[ざじずぜぞっ]\|ネ[ザジズ ゼゾッ]\| 根[魚差崎城占津]\|寝\([惚相]\|醒め\)\|禰津
行をまたぐ検索を実現するために、1文字ごとに "\s *" を埋めむと、次の正規表現ができあがります。
[鼠捻螺拗捩鼡]\|n\s *e\s *z\|n\s *e\s *z\|ね\s *[ざじずぜ ぞっ]\|ネ\s *[ザジズゼゾッ]\|根\s *[魚差崎城占津]\|寝\s *\ ([惚相]\|醒\s *め\)\|禰\s *津
Emacs の "\s " の意味はモードによって変わります。モードによっては行を またぐ検索ができないことがあります。
と、上のように正規表現を生成する処理を Ruby/Migemo が担当しま す。Emacs とは双方向パイプで通信します。辞書は SKK のSKK-JISYO.L を加工したものを利用します。
高速化のために、"a", "k", "s", "t", n", "ka", "sa", "ta", "na" などの短い文字列に対しては、あらかじめ生成した正規表現 をキャッシュしています。
ところで、ローマ字のまま日本語をインクリメンタル検索する別の 方針として、検索するたびにバッファの内容全体をローマ字に変換 し、それに対して検索するという方法が考えられます。この方法は、 テキストが大きくなると破綻します。
KAKASI -Jj -Kj -Hj で 100 KB のテキストファイルをローマ字に 変換すると、Pentium MMX 266 MHzの手元の計算機では初回に約 4 秒、次回からは約 2秒かかります。isearch で2秒も待たされては ストレスがたまります。 (筆者は 100 KB超のテキストファイルを 頻繁に編集します)
豆知識
- ASCII文字だけをインクリメンタル検索したいときは C-u C-s, C-u C-r で isearch-regexp を使うと便利です
ダウンロード
- version 0.40: migemo-0.40.tar.gz
- CVS
関連リンク集
- C/Migemo
Cで実装されたMigemoのライブラリです。 Unix用の共有ライブラリと Windows用の DLL があります。 - migemo.l
テキストエディタxyzzy用の Migemoです。C/Migemoを利用しています。 - MigemizeExplorer
Windows の「エクスプローラーにおいてローマ字入力のみで日本語 ファイルをインクリメンタルに検索/選択することを可能にする」 ツールです。 - fub
Migemo 検索ができるブラウザ。Internet Explorer 互換。 - XUL/Migemoプロジェクト - MozillaでMigemoを使いたい!
Mozilla や Firefox で Migemo 検索をしようというプロジェクト。
メーリングリスト
Migemo メーリングリスト案内ページ から参加できます。
文献
- 高林 哲: 横着プログラミング 第2回: Migemo: 日本語のインクリメンタル検索, UNIX MAGAZINE, Vol. 17, No. 2, pp. 129-136, February, 2002.
- 高林 哲, 小松 弘幸, 増井 俊之: Migemo: 日本語のインクリメンタル検索, 情報処理学会論文誌, Vol. 43, No. 12, pp. 3698-3705, December, 2002.