Pull to refresh

Comments 12

Или я что-то не пойму, или у меня просто текст (диктант по украинскому) оно определяет весь, как одно предложение…
Такая команда запуска правильная?:
java -jar aif-cli.jar -ssplit temp.txt

Вывод команды
log4j:WARN No appenders could be found for logger (com.aif.language.token.TokenSplitter).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Sentence: [ Марися вільно розкинулась у траві. Задивилася на завислі кетяги акації. Пахнуть вони густо, медово. Бджоли гудуть, обліплюють біло-рожевий цвіт, — десь, видно, здалека прилітають за нектаром. Десь із глибини урочища соловей подає голос. Кажуть, меншає на світі солов’їв. Невже планета справді прощається з цим сіреньким, самобутнім, найніжнішим своїм поетом? А з ким же ділити оте почуття, що підіймається, росте в тобі, хоча й не знаєш, для кого? Незвичайний стан переживає душа в цім давнім урочищі. Ніби п’янить самий дух акації, від нього аж чадієш, умліваєш, поринаєш у безміри якогось блаженства. Марися змружує очі, і одразу ніби зникає все, тане. Маєш над собою лише цей дивний світ, зітканий із золотавості сонця й клубків білого, обліпленого бджолами цвіту. Досягається якась не знана раніш гармонія, сонце розлилося, і сама ти вже ніби розчиняєшся в солодкій млості природи. в її запашистих медах… Зовсім заплющуєш очі, і тоді тебе нема, життя розтануло, світ зіллявся—на місці сонця вирує в небі тільки жовто-бура гаряча туманність, сповнена пахощів цвіту й золотої бджолиної музики. ]

Так же попробовал:
java -jar aif-cli.jar -ess temp.txt

Вывод команды
log4j:WARN No appenders could be found for logger (com.aif.language.token.TokenSplitter).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN No appenders could be found for logger (com.aif.language.token.TokenSplitter).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Group: 'GROUP_1', characters: ]
Group: 'GROUP_2', characters: ]
Спасибо, глянул, к сожалению текст оказался достаточно мал для корректной работы программы. Для теста скачал книгу на Украинском: vk.com/doc29866988_335722041?hash=00089797d7cd249b90&dl=e4d4a5250e944d2db5

команда:

java -jar ./aif-cli-1.1-jar-with-dependencies.jar -ess ./text_ukr2.txt


результат работы команды
log4j:WARN No appenders could be found for logger (com.aif.language.token.TokenSplitter).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Group: 'GROUP_2', characters: [; ,]
Group: 'GROUP_1', characters: [!: .]


Главное ограничение для алгоритма — размер входящего текста, для каждого языка (и даже конкретного случая) минимальный размер индивидуальный.
В добавок к предыдущему комментарию — да Вы верно запускаете команду. Просто сообщение (текст) очень маленькое что бы его хватило выучить язык на котором оно написано.
UFO just landed and posted this here
Но и это прекрасно решается если 90% текста все жа разделены запятыми;) Хотя в данной версии мы этого не делаем
UFO just landed and posted this here
Очень корректное замечание. Мы пока что не планируем поддерживать группу языков к которой относится упомянутый Вами тайский. Не по тому что там алгоритм не будет работать, а потому что текущая имплементация пока не может причинить алгоритм к этим языкам. Поддержка подобных языков будет включена в план после выхода первой релизной версии AIF, так что не очень скоро =(
Я не совсем понимаю, вы позиционируете свою библиотеку как лингво-независимую, но тут же делаете замечание, что она работает только для определённых языков и текстов определённого размера. Не проще ли задать жёсткие правила для каждого языка с его знаками препинаний, аббревиатурами и числовыми разделителями, как сделано во всех программах для перевода?
Именно потому что программы перевода используют этот подход они столь плохо переводят человеческие тексты где вполне могут использоваться термины не внесенные в банк знаний языково модели. Наша библиотека и остальные решаем разные задачи. Мы пытаемся построить разные связи в тексте и на их основе обработать текст, что позволяет работать намного лучше в условиях когда текст на входе не литературно идеальный. Попробуйте скормить OpenNLP библиотеке на вход дамп из чата игроков eve Online. Собственно изначально прототип прошлой версии решал задачу обработки чата где общались носители Украинского и Русского языков и при этом использовали «суржик».

Сегодняшние системы четко показывают придел возможностей лингву-зависимых систем, они прекрасно работают в случае простых текстов но менее корректно работают в более сложных случаях.

Делать еще одну систему которая изначально ставит себя в те же рамки качества не хотелось, и мы пытаемся разработать новый подход к решению данной задачи. Что получится точно можно будет сказать когда выпустим первый релиз.
То, что авторы изначально зафиксировали пробел как особенный символ — не есть хорошо. Подмешивается априорно известная информация, которая искажает результаты.

Как это делал в своё время я. Я брал текст, и, не используя никакой априорной информации о его структуре, начинал разбирать. Методом выделения в тексте часто встречающихся подстрок. Такими подстроками со временем выделялись слова с окончаниями, например «дождь.\n». От подстроки «дождь» подстрока «дождь.\n» отличается частотой встречаемости в тексте. Частота появления в тексте дождь с точкой ниже частоты появления в тексте дождь без точки. Запомним отношение частот для обеих подстрок. Тогда, выделив ".\n" в отдельную подстроку, мы можем заметить, что соотношение частот других подстрок (других слов) с точкой и без точки примерно такое-же, как и для дождя. Из чего можно сформировать гипотезу, что ".\n" — является универсальным разделителем, применимым к любым словам. Применяя указанный подход дальше можно выделить отдельно характеристики "." и "\n" и сформировать какие-то гипотезы и по ним.

Копая таким методом, у нас выделяются для большинства слов псевдокорни, а для тех, для которых не выделяются, можно по частотам совместного использования определить взаимозаменяемые слова (которые близки по смыслу, что, собственно, и искали).
Sound really interesting!

Have small question:
if you have next tokens in text:
cat
cats
cat.

How you will separate 's' and '.'. Both of this characters could be in the end of different tokens?

Also, maybe you have interest and time to help in this project?
Текст, записанный в текстовый файл, использует априорно известную информацию о знаках используемой кодировки. Думаю, вполне резонно опереться и на заложенную в них семантику — хотя-бы на уровне деления на пробельные и пунктуационные символы, буквы и цифры. Раз уж на восьмибитность или UTF8 разрешаем себе опереться.
Sign up to leave a comment.

Articles