で、今日は何をしようかと考えて...
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
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
次に、今回作成したluamigemoをビルドします。
C:¥Lua¥luamigemo> nmake
後は以下のコードを実行するまで
local migemo = require("migemo")
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")
今回は、migemoで取得した正規表現パタンを食わせる為にLrexlibという拡張を使用し、検証しています。実行結果は
まっつん is matched with mattun
マッツン is matched with mattun
マッツン is not matched with mattn
幹事 is matched with kanji
私はマッツンです is matched with watashiHaMattunDesu
るわ is not matched with lua
となり、結果「Lua」では「るわ」は検索出来ない事が分かりました。ダウンロード: