Нормализация падежа/склонения/числа/времени и т.д.

kill-still

Сейчас в качестве фильтра токенов для поисковых запросов использую алгоритм "Snowball". Всё работает замечательно, но при исправлении опечаток в окончании возникают артефакты в виде крушк->кружк. (ищется известный токен, ближайший по расстоянию редактирования) При этом при наличии окончания всё работает хорошо, т.к. я заменяю по вхождению: крушка->кружка, крушкой->кружкой. Посоветуйте мультиязычный алгоритм, который бы не отбрасывал окончания, как снежок, а нормализовывал их (кружкой->кружка). Для того, чтобы опечатки в окончании исправлялись правильно: крушк->кружка

okis

у пианиста и бачана был лемматизатор, вот: http://github.com/bachan/libturglem
а насколько хочется многоязычный?

kill-still

а насколько хочется многоязычный?
пока что надо английски/русский/белорусский/хохляцкий/казахский и скоро потребуется китайский, но там я вообще хз как всё устроено.

Lunochka

Для того, чтобы опечатки в окончании исправлялись правильно: крушк->кружка
а с чего это он узнает, что надо кружка, а не кружку, кружке, кружки и т.п.?

SCIF32

по правилом русское языкам, вестимо
видимо по этой фразе предполагается проверять лемматизатор :)
"мгу", кстати, по правилам русского языка надо лемматизировать к "мга"

SCIF32

(ищется известный токен, ближайший по расстоянию редактирования)
имхо проще будет тут что-то по хачить, например, выбирать не просто расстояние левенштейна, а выбирать вариант лучший по языковой модели http://en.wikipedia.org/wiki/Language_model
языковую модель можно построить по какому-нибудь корпусу. википедию, например, скачать, или сайты твоей предметной области, или придумать самому откуда взять запросов/текстов по твоей тематике.
нормальный лемматизатор будет использовать сложнее и для каждого языка скорее всего будет свой, если и будет.

apl13

"мгу", кстати, по правилам русского языка надо лемматизировать к "мга"
"Минет" — "минуть".

Ivan8209

Меня, раз уж пошли вопросы про такие случаи, волновало бы совсем другое.
Например, определение корня слова "вынуть."
Да и то же "кружку" тоже непонятно, как обрабатывать.
---
...Я работаю антинаучным аферистом...

kill-still

Что-то все реализации, что я нахожу, делают только прямое преобразование - из именительного в другие падежи, а обратных я ещё не нашёл.
Может быть, при индексации "раскрывать" слово на множество термов? Но тогда будет пухнуть индекс.

Ivan8209

> Что-то все реализации, что я нахожу, делают только прямое преобразование -
> из именительного в другие падежи, а обратных я ещё не нашёл.
Я бы не удивлялся. Пример словоформы "кружку" очень хороший, кстати:
хорошо видно, какие возникают сложности при определении именительного падежа.
---
...Я работаю антинаучным аферистом...

psihodog

$ echo вынуть кружку | ./mystem -nie utf-8
вынуть{вынимать=V,пе=инф,сов}
кружку{кружка=S,жен,неод=вин,ед|кружок=S,муж,неод=дат,ед}

Ivan8209

1. Местный падеж не осилило.
2. Про "вынуть" задавался вопрос о корне слова, а не о неопределённой форме.
Хотя, да, за то, что смогло определить именительный падеж --- зачёт.
---
"Прогресс науки обратно пропорционален числу выходящих журналов."

SCIF32

о, вспомнил еще один хороший пример

echo "ип" | ./mystem -nie utf-8
ип{ипать=V,разг,обсц,несов=прош,ед,изъяв,муж}

Ivan8209

Смех смехом, но есть, например, такие словоформы, как "вина" и "чайку".
И если не распознавать отделительный падеж, то простое
"Налей чайку зелёного, налей..." (Визбор, "Октябрь, Садовое кольцо")
и "Налей вина зелёного, налей..." (у Визбора --- "Налей винца зелёного...")
считаются неверными, а при попытке поправить превращаются в сюрреализм.
Причём для этого не нужно каких-то жаргонных слов и иноязычных заимствований.
---
"Французский знаете.
Делите.
Множите.
Склоняете чудно."

yuda

скоро потребуется китайский
Могу утешить: в китайском нет морфологии.
И огорчить: мучений с токенизацией хватит за глаза

yuda

ип{ипать=V
Вот честно, когда добавлял в словарь - проверил, находилась именно такая форма, и именно в таком значении. Теперь бедные Индивидуальные Предприниматели страдают...
А с Гюльчатай прокол вышел, да.

yuda

1. Местный падеж не осилило.
Где ты у "кружку" местный падеж нашёл?
На вот тебе и местный и партиальный:
echo 'чайку в шкафу' | ./mystem -nie utf-8
чайку{чайка=S,жен,од=вин,ед|чаек=S,муж,неод=дат,ед|=S,муж,неод=парт,ед|чайка=S,фам,муж,од=вин,ед}
в{в=PR=|в=S,сокр=им,ед|=S,сокр=им,мн|=S,сокр=род,ед|=S,сокр=род,мн|=S,сокр=дат,ед|=S,сокр=дат,мн|=S,сокр=вин,ед|=S,сокр=вин,мн|=S,сокр=твор,ед|=S,сокр=твор,мн|=S,сокр=пр,ед|=S,сокр=пр,мн}
шкафу{шкаф=S,муж,неод=дат,ед|=S,муж,неод=местн,ед}

Ivan8209

> Где ты у "кружку" местный падеж нашёл?
Употребляется, точно.
---
"А я обучался азбуке с вывесок,
листая страницы железа и жести."
Оставить комментарий
Имя или ник:
Комментарий: