Моя задача - определить «поддерживаемые языки» на основе файла данных ICU V8.
Кажется, нет единого простого ответа, потому что то, поддерживается ли язык, зависит от интересующих функций . Меня интересует следующее:
- Токенизация (словами в случае алфавитов c систем письма)
- Нормализация (сворачивание корпуса и удаление диакритических знаков)
- Сортировка (сортировка строк в алфавитном порядке)
Рассматриваемая версия ICU - 64.2. V8 icudtl.dat
- это 10 МБ подмножество , тогда как полный файл данных ICU составляет 25 МБ (icu/source/data/in/icudt64l.dat
в архиве).
icupkg позволяет мне перечислить элементы пакета:
curl "https://chromium.googlesource.com/chromium/deps/icu.git/+/5005010d694e16571b8dfbf07d70817841f80a69/common/icudtl.dat?format=TEXT" | base64 -d > icudt64l.dat
icupkg --list icudt64l.dat
приводит к списку с 1326 строками (3665 для полного ICU ). Около 900 строк начинаются с префикса :
brkitr/
- Итерация разрыва coll/
- Сопоставление curr/
- Валюта lang/
- Отображаемые имена языков region/
- Отображаемые имена регионов translit/
- Транслитерация unit/
- Единицы zone/
- Часовые пояса
Например, для сопоставлений довольно легко судить по именам, какие языковые данные включены:
coll/am.res
coll/ar.res
coll/bg.res
coll/bn.res
coll/ca.res
coll/cs.res
coll/da.res
coll/de.res
...
Для токенизации это трудно ответить из-за общих c записей типа brkitr/word.brk
:
brkitr/burmesedict.dict brkitr/ja.res brkitr/root.res
brkitr/char.brk brkitr/khmerdict.dict brkitr/ru.res
brkitr/cjdict.dict brkitr/laodict.dict brkitr/sent.brk
brkitr/de.res brkitr/line.brk brkitr/sent_el.brk
brkitr/el.res brkitr/line_loose.brk brkitr/thaidict.dict
brkitr/en.res brkitr/line_loose_cj.brk brkitr/title.brk
brkitr/en_US.res brkitr/line_normal.brk brkitr/word.brk
brkitr/es.res brkitr/line_normal_cj.brk brkitr/zh.res
brkitr/fr.res brkitr/pt.res brkitr/zh_Hant.res
brkitr/it.res brkitr/res_index.res
Будет ли ICU пытаться разбить любую строку на слова (или что-то подобное в других системах письма) с помощью generi c правила? Так что в основном поддерживаете любой язык в этом отношении?
Что касается нормализации, я не знаю, в каких файлах вообще могут находиться эти данные.
Есть ли общий ответ или, может быть, программный c способ определить, какие языки могут быть токенизированы и нормализованы с данным файлом данных ICU?