で、今日は何をしようかと考えて...
Luaでmigemoを使用して、本当に「Lua」で「るわ」が検索出来るかどうかやってみようと思います。
まず、Luaで高度な処理を行うには、拡張モジュールを作る必要があります。
MigemoはC/Migemoを基礎ライブラリとして、ラッパI/Fとして作成します。
まずC/Migemoを、香り屋からsvnで取得して、ビルドします。
#今回は、Windowsでコンパイルしています。
C:¥temp> svn co http://cvs.kaoriya.net/svn/CMigemo/trunk cmigemo次に、今回作成したluamigemoをビルドします。
C:¥temp> cd cmigemo
C:¥temp¥cmigemo> cp config.mak config.mk.orig
C:¥temp¥cmigemo> vim config.mak
C:¥temp¥cmigemo> diff config.mk.org config.mk
38,39c38,39
< FILTER_CP932 = qkc -q -u -s
< FILTER_EUCJP = qkc -q -u -e
---
> #FILTER_CP932 = qkc -q -u -s
> #FILTER_EUCJP = qkc -q -u -e
41,42c41,42
< #FILTER_CP932 = nkf -s
< #FILTER_EUCJP = nkf -e
---
> FILTER_CP932 = nkf -s
> FILTER_EUCJP = nkf -e
C:¥temp¥cmigemo> vcvars32
Setting environment for using Microsoft Visual C++ tools.
C:¥temp¥cmigemo> nmake msvc
C:¥temp¥cmigemo> nmake msvc-dict
C:¥Lua¥luamigemo> nmake後は以下のコードを実行するまで
local migemo = require("migemo")今回は、migemoで取得した正規表現パタンを食わせる為にLrexlibという拡張を使用し、検証しています。
local rex_pcre = require("rex_pcre")
local mcx = migemo.open("C:/temp/cmigemo/dict/migemo-dict")
--migemo.set(
-- mcx,
-- migemo.DICTID_ROMA2HIRA,
-- "C:/temp/cmigemo/dict/roma2hira.dat")
migemo.set(mcx, migemo.OPINDEX_OR, "|");
migemo.set(mcx, migemo.OPINDEX_NEST_IN, "\\(");
migemo.set(mcx, migemo.OPINDEX_NEST_OUT, "\\)");
function test(subject, query)
local pattern = migemo.query(mcx, query)
local match = rex_pcre.match(subject, pattern)
if match then
print(subject.." is matched with "..query)
else
print(subject.." is not matched with "..query)
end
end
test("まっつん", "mattun")
test("マッツン", "mattun")
test("マッツン", "mattn")
test("幹事", "kanji")
test("私はマッツンです", "watashiHaMattunDesu")
test("るわ", "lua")
実行結果は
まっつん is matched with mattunとなり、結果「Lua」では「るわ」は検索出来ない事が分かりました。
マッツン is matched with mattun
マッツン is not matched with mattn
幹事 is matched with kanji
私はマッツンです is matched with watashiHaMattunDesu
るわ is not matched with lua
ダウンロード:luamigemo.tar.gz



![Validate my RSS feed [Valid RSS]](http://mattn.kaoriya.net/images/valid-rss.png)

