Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Библиотеки старые, не развиваются.
Плохо поддерживают русский язык.
Работают только с чистым, специально подготовленным, текстом
Плохо поддерживают UTF-8. Например, SriLM с флагом tolower ломает кодировку.
Из списка немного выделяется KenLM. Регулярно поддерживается и не имеет проблем с UTF-8, но она также требовательна к качеству текста.
Можно глупый вопрос в лоб.
KenLM вроде работает с русским. Даже питоний враппер есть.
Да и никто не мешает просто все эти "проблемы" решить пре-процессингом на питоне без C++. Даже будет мало кода и код легко поддерживать.
Соответственно глупый вопрос — зачем еще одна библиотека?
https://github.com/anyks/alm/#training-using-your-own-features
А токены из нескольких букв?
Или нужно делать "замену алфавита"?
Requirements Python3
Может я пропустил что-то, а интерфейса для вызова на питоне нет?
https://github.com/anyks/alm/#build-on-linux-and-freebsd
А вы планируете поддерживать пакеты в apt / pip?
Это повысит аудиторию проекта раз в 10.
Имхо, токенизация для одного домена — собирается за выходные из говна и палок зная домен.
И аналогично допинывается по скорости.
А для всех доменов — писать общую либу токенизации это благие намерения.
$ echo 'На рис. 1 изображена ваза, см. наш каталог. Заходи к нам на сайт https://example.com/1,2,3#сноска-1 за более подробной информацией' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens

На рис. 1 изображена ваза, см. наш каталог. Заходи к нам на сайт https://example.com/1,2,3#сноска-1 за более подробной информацией
[
[
"На",
"рис.",
"1",
"изображена",
"ваза",
",",
"см.",
"наш",
"каталог",
"."
],[
"Заходи",
"к",
"нам",
"на",
"сайт",
"https://example.com/1,2,3#сноска-1",
"за",
"более",
"подробной",
"информацией"
]
]
$ echo '[["На","рис.","1","изображена","ваза",",","см.","наш","каталог","."],["Заходи","к","нам","на","сайт","https://example.com/1,2,3#сноска-1","за","более","подробной","информацией"]]' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens

[["На","рис.","1","изображена","ваза",",","см.","наш","каталог","."],["Заходи","к","нам","на","сайт","https://example.com/1,2,3#сноска-1","за","более","подробной","информацией"]]
На рис. 1 изображена ваза, см. наш каталог.
Заходи к нам на сайт https://example.com/1,2,3#сноска-1 за более подробной информацией
На рис. 1 изображена ваза, см. наш каталог. Заходи к нам на сайт https://example.com/1,2,3#сноска-1 за более подробной информациейРезультат:[["На","рис.","1","изображена","ваза",",","см.","наш","каталог","."],["Заходи","к","нам","на","сайт","https://example.com/1,2,3#сноска-1","за","более","подробной","информацией"]]echo 'Люди любят г. Волгоград, имеющий историю, уходящую в века.' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens
Люди любят г. Волгоград, имеющий историю, уходящую в века.
[
[
"Люди",
"любят",
"г.",
"Волгоград",
",",
"имеющий",
"историю",
",",
"уходящую",
"в",
"века",
"."
]
]
echo '[["Люди","любят","г.","Волгоград",",","имеющий","историю",",","уходящую","в","века","."]]' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens
[["Люди","любят","г.","Волгоград",",","имеющий","историю",",","уходящую","в","века","."]]
Люди любят г. Волгоград, имеющий историю, уходящую в века.
echo 'Люди любят рис. Нью дели имеет историю, уходящую в века' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens
Люди любят рис. Нью дели имеет историю, уходящую в века
[
[
"Люди",
"любят",
"рис",
"."
],[
"Нью",
"дели",
"имеет",
"историю",
",",
"уходящую",
"в",
"века"
]
]
echo '[["Люди","любят","рис","."],["Нью","дели","имеет","историю",",","уходящую","в","века"]]' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens
[["Люди","любят","рис","."],["Нью","дели","имеет","историю",",","уходящую","в","века"]]
Люди любят рис.
Нью дели имеет историю, уходящую в века
echo 'Наш сайт выпивка.рф объявляет набор гостей. Ваш адрес: выпивка.рф/1,2 человека уже зашли, будь третьим! (Напоминаю: выпивка.рф/1)' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens
Наш сайт выпивка.рф объявляет набор гостей. Ваш адрес: выпивка.рф/1,2 человека уже зашли, будь третьим! (Напоминаю: выпивка.рф/1)
[
[
"Наш",
"сайт",
"выпивка.рф",
"объявляет",
"набор",
"гостей",
"."
],[
"Ваш",
"адрес",
":",
"выпивка.рф/1,2",
"человека",
"уже",
"зашли",
",",
"будь",
"третьим",
"!"
],[
"(",
"Напоминаю",
":",
"выпивка.рф/1",
")"
]
]
echo '[["Наш","сайт","выпивка.рф","объявляет","набор","гостей","."],["Ваш","адрес",":","выпивка.рф/1,2","человека","уже","зашли",",","будь","третьим","!"],["(","Напоминаю",":","выпивка.рф/1",")"]]' | ./bin/alm -alphabet "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -method tokens
[["Наш","сайт","выпивка.рф","объявляет","набор","гостей","."],["Ваш","адрес",":","выпивка.рф/1,2","человека","уже","зашли",",","будь","третьим","!"],["(","Напоминаю",":","выпивка.рф/1",")"]]
Наш сайт выпивка.рф объявляет набор гостей.
Ваш адрес: выпивка.рф/1,2 человека уже зашли, будь третьим!
(Напоминаю: выпивка.рф/1)
Если поставить simple.c в конец, то получается, что использование символа ...
Если поставить simple.c
поставить simple.c в
simple.c в конец,
в конец, то
конец, то получается,
то получается, что
получается, что использование
что использование символа
simple.c в конец,
в конец, то
конец, то получается,
то получается, что
получается, что использование
Если поставить simple.c
поставить simple.c в
simple.c в конец
в конец <punct>
конец <punct> то
<punct> то получается
то получается <punct>
получается <punct> что
<punct> что использование
что использование символа
ведь это — просто токенизатор, неоднозначности в таком виде он снимать не умеет.
Предложенный вами вариант будет интерпретирован как аббревиатура.
Токенизатор это только часть функционала библиотеки, основной функционал это — языковая модель.
Альтернативное понимание контекста с помощью статистической языковой модели