2011-01-20 13 views
3

ルアで日本語のボキャブラリーを処理したい(LuaTeXを具体的にする)。ボキャブラリは、読み込まれるテキストファイルに格納されます。単語が正規表現にマッチしなければならないファイルの各行の読み取り中(: | がくせい | student |ラインが同様に書かれている):ルアの日本語の正規表現

function readFile(fn) 
    local file = assert(io.open(fn, "r")) 
    local contents = file:read("*a") 
    file:close() 
    return contents 
end 

function processTest(contents) 
    for line in contents:gmatch("%a+") do 
     print(line) 
    end 
end 

a = readFile("vocabulary.org") 
processTest(a) 

今だけ英語の単語が印刷されてしまうという問題:

student 

私はLuaとLuaTeXを初めて使っていると言わざるを得ないので、もっと良いアプローチがあれば分かりました。

とにかく、日本語の単語を取得する可能性はありますか?

答えて

4

あなたはこのため%aを使用することはできません。単一のオクテット(ロケールに依存しますが、通常はASCIIまたはLatin-1の文字をエンコードするバイトのみ)に一致します。

UTF-8でエンコードされた文字を一致させるには、例のように。here

例えばUTF-8でエンコードされたひらがなのためのいくつかのパターンは、次のものがあります

(\227\129[\129-\191]) 
(\227\130[\128-\160]) 

を(サブレンジの数百を含める必要があります)すべてユニコード文字にマッチするパターンの完全なリストは扱いにくいだろう。

+0

string.gsubを使用してCJK文字を照合するにはどうすればよいですか? – northtree

1

私はLuaの第一人者ないんだけど、私はあなたが運のうち、おそらくあると思います。 LuaはUnicodeファイルをそのまま "ネイティブに"消費しません。これは、読み込んだ内容を一連のバイトとして扱い、解釈を行いません。特に、あなたのgmatch()コールは、あなたが望むことをする可能性がありません。

最近hereメーリングリストの国際化について大きな議論がありました。このディスカッションhereも役に立ちます。