Регулярные выражения для японского языка в Lua - PullRequest
3 голосов
/ 20 января 2011

Я хочу обработать японский словарь в Lua (точнее, 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, поэтому, если есть лучший подход к этому, я был бы рад узнать.

В любом случае, есть ли возможность получить японские слова?

Ответы [ 2 ]

4 голосов
/ 20 января 2011

Вы не можете использовать %a для этого.Он соответствует только одному октету (зависит от локали, но обычно это только байт, который кодирует букву в ASCII или Latin-1.)

Чтобы соответствовать буквам в кодировке UTF-8, вам нужно разбить их на диапазоны:байты, как в примере здесь .

Например, некоторые шаблоны для хирагана в кодировке UTF-8 могут включать:

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

Полный список шаблонов для сопоставления все буквы Unicode (которые должны включать сотни поддиапазонов) были бы громоздкими.

1 голос
/ 20 января 2011

Я не гуру Луа, но я думаю, что вам, вероятно, не повезло.Lua не использует файлы Unicode "как есть".Он просто обрабатывает то, что читает, как серию байтов и не интерпретирует его.В частности, ваш вызов gmatch () вряд ли будет делать то, что вы хотите.

Недавно в списке рассылки здесь было большое обсуждение i18nЭто обсуждение здесь также может помочь.

...