Yahoo!デベロッパーネットワーク2006年04月01日 04時00分05秒

Yahoo!デベロッパーネットワーク

http://developer.yahoo.co.jp/

開発者がXMLやRSSなどの技術を利用して、自分のサイトやアプリケーションをYahoo!検索と融合するのを手伝うもの。 ドキュメントやSDK、コミュニティも準備されている。 SOAP は使わない。

XMLnmz(RssNamazu より以前に考えていた別用途のもの)で考えていたようなもののようです。

ドキュメントのリクエストパラメータやレスポンスフィールドは、いろんな意味で参考になりそう。(libnmz や Search-Namazu の設計とか。)

MeCab 0.90 における mecabrc ファイルの優先順位2006年04月04日 02時27分56秒

MeCab 0.90 における mecabrc ファイルの優先順位

1. コマンドラインパラメータ -r, --rcfile で指定した mecabrc ファイル

2. 環境変数 HOME が設定されている場合 ~/.mecabrc ファイル

3. 環境変数 MECABRC で指定した mecabrc ファイル

4. レジストリ HKEY_LOCAL_MACHINE\software\mecab\mecabrc の mecabrc ファイル
[Windowsのみ]

5. レジストリ HKEY_CURRENT_USER\software\mecab\mecabrc の mecabrc ファイル
[Windowsのみ]

6. DLL と同じディレクトリの mecabrc
[Windowsのみ]

7. MECAB_DEFAULT_RC
UNIX は /usr/local/etc/mecabrc
Windows は、C:\Program Files\mecab\etc\mecabrc

 注意) コンパイルオプションに変更が可能


Windows版はインストーラにより、Administrator でインストールを行うとHKEY_LOCAL_MACHINE (共有利用)を設定します。 通常は、HKEY_CURRENT_USER (個人利用)を設定します。

Windows 版の mecabrc の位置は {app}\etc\mecabrc です。

ちなみに 辞書は UNIX では /usr/local/lib/mecab/dic/ipadic に Windows では {app}\dic\ipadic になります。

MeCab PPM2006年04月04日 15時46分19秒

MeCab 0.90 がリリースされましたので、MeCab の PPM を作成しました。

 http://www.akaneiro.jp/PPMPackages/800/MeCab.ppd

ppm コマンドでインストールができます。

 C:> ppm uninstall MeCab
 C:> ppm install http://www.akaneiro.jp/PPMPackages/800/MeCab.ppd

MeCab Perl モジュールは ppm コマンドでインストールできますが、Text-Kakasi 同様に PPM のインストールだけでは動作せず、辞書と mecabrc のインストールおよび設定が必要になります。

 http://www.akaneiro.jp/public/mecab-ipadic.zip

から辞書ファイルをダウンロードして、手順に従ってインストールを行ってください。

Namazu for Windows 2.0.16 では EUC-JP の辞書を前提にしています。

[追記]

現在、インストール方法が変わりました。 詳しくは http://namazu.asablo.jp/blog/2008/09/29/3788573 をご覧ください。

MeCab 分かち書き用辞書2006年04月04日 19時13分27秒

MeCab の辞書作成ツールの mecab-dict-index には -w オプションがあり、分かち書き用の辞書を作成することができます。

Namazu では MeCab を分かち書きにしか使いませんので、分かち書き用の辞書で十分です。

分かち書き用の辞書は通常の辞書よりサイズが小さくなります。
sys.dic のサイズを比較すると以下の通りです。
通常 36897200
分かち書き用 15062273

また、-c オプションに euc-jp shift_jis utf-8 を指定することで、それぞれの漢字コードの辞書が作成できます。(Namazu では EUC-JP の辞書を使います。)

sys.dic のサイズを比較すると
euc-jp 36897200
shift-jis 36755616
cp932 36753464
utf-8 48055864
となりました。
Perl のバージョンは 5.8.0 でしたので、cp932 の結果は Perl のバージョンによって異なるでしょう。

ところで、Linux で作成した辞書と Windows で作成した辞書とで、ファイルサイズは同じでしたが、内容に差がありました。
この差は何によって生じるものかは不明です。(精度の問題???)

mecab-ipadic-2.7.0 200604082006年04月08日 17時03分09秒

mecab-ipadic-2.7.0 20060408 が公開されましたので、辞書をバージョンアップしました。

http://www.akaneiro.jp/public/mecab-ipadic.zip

から辞書ファイルをダウンロードして、手順に従ってインストールを行ってください。

外字2006年04月09日 18時44分03秒

外字は全文検索に不向きです。 自由に定義できるため、どのような内容が定義されているのかを知る手段がありません。

しかし、世の中には市販されている有名な外字フォントというものも多々あります。 (外字はコードというよりもフォントに依存すると考えるのが妥当です。)

例えばMacintoshDTPで定番となっている「ビブロスフォント外字セット」

 http://www.biblosfont.co.jp/product.html

もそのひとつです。Windows 版の

 http://www.est.co.jp/fe/kigou/index.html

もあります。

あらかじめビブロスフォントを使用している文書であるとわかっている場合には、これらの外字を全文検索用に別の文字に置き換える等の処理を行えば、全文検索に利用することもできるでしょう。

例えば、

(0) -> 0 や (普) -> 普 といった置換するライブラリです。

かなり限定した用途であり、運用する上で注意しないといけませんが、そういった特殊な用途に特化するのも面白いかもしれません。

ただ、ひとつの文書の中に複数のフォントを切り替えていることは多々あり、それぞれ別の外字が定義されていると、フォントごとにテキストを取り出さないと正しく処理できないので、あくまでも外字の種類は1種類のみといった簡単な対応しかできないでしょう。

同様に CP932 の機種依存文字も変換するライブラリがあれば良いかもしれません。(こちらの方が実用的)

例えば、

(株) -> 株 や 平成(1文字) -> 平成(2文字)

といったよう。

異体字2006年04月09日 22時34分27秒

JIS X 0208 の JIS83制定時の変更点

 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jis78-83.html

を見ていて、kakasi の異体字辞書(itaijidict)に含まれていない文字があることに気づきました。

JIS83で第1水準と第2水準が入れ替わったもの(22組) のうち5組

礦砿
邇迩
鶯鴬
諫諌
頸頚

JIS83で字形を変更し、従来の字形を第2水準に追加したもの(4字) のうち1組

堯尭

これらは JIS X 0208 の JIS83制定時の変更で挿し換わったものであるから異体字になります。 近いうちに itaijidic に追加して公開したいと思います。

そう思って異体字辞書を調べてみると

 http://www.eonet.ne.jp/~kotobukispace/ddt/ddtj.html

にフリーの異体字辞書がありました。 厳密異体辞書、慣用異体辞書という区別があったり、JIS第3・4水準対応という区別もあったりもします。

kakasi での使用を考えた場合には、慣用異体字までは必要ないような印象を受けましたが、用途によっては有用でしょう。

また kakasi の場合は、EUC-JP ですので JIS X 0213 をサポートしたEUC-JISX0213を考えるというよりは、UNICODE化の際にJIS第3・4水準対応を考えた方が良いでしょう。

コマンドプロンプトからのエラーメッセージ STDERR/STDOUT のリダイレクト2006年04月10日 16時31分09秒

何故かあまり知られていませんが、NT/2000/XP/2003 Server のコマンドプロンプトからエラーメッセージ STDERR/STDOUT をリダイレクトすることができます。

 http://support.microsoft.com/default.aspx?scid=kb;en-us;110930

NUL に標準エラーをリダイレクトするために、次のコマンドを使用します。

 C:\> dir file.xxx 2> nul

標準出力からファイルに出力と 標準エラーからファイルの出力を指定できます。

 C:\> dir file.xxx > output.msg 2> output.err

単一なファイルに標準出力と標準エラーを出力できます。

 C:\> dir file.xxx 1> output.msg 2>&1

Windows 95/98/Me の場合、MS-DOS プロンプト(command.com)では駄目ですが、Win95cmd.exe であれば同じように利用できます。

KAKASI, ChaSen, MeCab の異体字の扱い2006年04月10日 22時19分49秒

KAKASI には異体字辞書 itaijidict があるので、辞書にある異体字の違いは吸収されます。
例えば kakasidict には「国語」は登録されていますが、「國語」は登録されていません。しかし、itaijidict で 「國」と「国」が関係付けられているため、

$ echo 國語 | kakasi -JH
こくご

と異体字を用いた単語であっても、認識します。
ChaSen/MeCab を調べてみると、ChaSen では

$ echo 国語 | chasen
国語 コクゴ 国語 名詞-一般
EOS

$ echo 國語 | chasen
國 クニ 國 名詞-一般
語 ゴ 語 名詞-接尾-一般
EOS

となり、単語として認識していません。
MeCab では

$ echo 国語 | mecab
国語 名詞,一般,*,*,*,*,国語,コクゴ,コクゴ
EOS

$ echo 國語 | mecab
國 名詞,一般,*,*,*,*,國,クニ,クニ
語 名詞,接尾,一般,*,*,*,語,ゴ,ゴ
EOS

となり、こちらも単語として認識していません。

ChaSen/MeCab では異体字の単語を登録しておかなければならないということでしょうか。

ところで、Namazu は異体字を特別扱いしていないので、"国語" で "國語" が見つかることはありません。
そういうモードがあると良いかもしれません。(旧字の文献を検索する場合等には)

kakasidict に含まれない7文字のJIS第2水準漢字2006年04月15日 01時56分22秒

kakasi は、先頭の漢字1文字をキーとした配列をもっていて、そこに含まれる単語のうちもっとも長い物をマッチさせるという設計です。

 http://www.namazu.org/pipermail/kakasi-dev/2005-March/000020.html

このため、漢字の単語の先頭文字が辞書に含まれていなければなりません。 JISX0208-1990 にJIS第1水準漢字、JIS第2水準漢字はそれぞれ2,965文字、3,390文字、合計6,355文字ありますが、このうち kakasidict に含まれる漢字1文字のものは 6,348文字でした。

 匕  0xd2b8
 楝  0xdcc2
 苹  0xe7f9
 萍  0xe8cc
 薜  0xe9b0
 裲  0xeaec
 鶇  0xf3a9

これら7文字(JIS第2水準漢字)は kakasidict に含まれていません。このためこの文字で始まる単語は認識されません。 kakasidict には以下の単語が登録されていますが、これは登録されていないのに等しいわけです。

 あいくち 匕首
 ひしゅ 匕首
 うちかけ 裲襠

例えば、

 $ echo 匕首 | kakasi -w
 匕 首

となり、認識できていないことがわかります。 上記 7 文字は追加しておきたいですね。 辞書に登録するために IME で読みを調らべてみると、以下の読みが見つかりました。

 ひ さじ 匕
 れん おうち 楝
 へい びょう 苹
 へい びょう うきくさ 萍
 へい ばい 薜
 りょう ろう うちかけ 裲
 つう とう つぐみ 鶇

なお、これはいずれも Chasen/MeCab では認識されませんでした。ipadic に含まれていないからでしょう。