Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 23, 2009 12:24:15

tilarids
От:
Зарегистрирован: 2009-01-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

Мне нужно реализовать функциональность, которая в соответствие слову в любой форме(падеж, число и т.д.) ставит слово в начальной форме(для глаголов - инфинитив, для существительных - единственное число, именительный падеж, etc). Это не стемминг, так как ищется не основа, а именно слово.

Примеры:
Дисковые -> Дисковый;
Тормозит -> Тормозить;
Друзья -> Друг;

Кто-нибудь может подсказать, реализован ли где-нибудь уже подобный велосипед? Язык реализации значения не имеет, но лучше всего - Python, С++ или Java. Подобный алгоритм вроде как реализован в Яндекс.Словарях, так что реализация возможна.



Офлайн

#2 Янв. 23, 2009 14:35:25

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

pytils не помог?

Офлайн

#3 Янв. 29, 2009 01:30:31

tilarids
От:
Зарегистрирован: 2009-01-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

Разве pytils это умеет? Кажется, нет



Офлайн

#4 Янв. 29, 2009 07:20:49

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

Неа, не умеет. Здесь, вероятно, нужно брать http://nltk.org/ , только не знаю умеет ли он стемминг (выделение корня) для русского. Если что, есть алгоритм стемминга и словарь для русского языка – http://snowball.tartarus.org/algorithms/russian/stemmer.html В любом случае, задача не такая простая.

P.S. Ну и стоит отличать “простой алгоритм, работающий в 95%” и “теоретически обоснованный алгоритм работающий для 99% и плюс куча исключений”.



Отредактировано (Янв. 29, 2009 07:22:58)

Офлайн

#5 Янв. 30, 2009 18:03:36

lightcaster
От:
Зарегистрирован: 2008-07-01
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

Да, lorien хорошую статью указал. Но тут нужен генератор, а не только анализатор.
Готовых генераторов вообще не встречал в открытом доступе. Но можно сделать самому :). Вот два решения.

В простом варианте:
1) тащим морфологическую базу отсюда http://aot.ru/download.php
2) парсим словарь и формируем словоформы
т.е. из этого
{ <основа> : }
формируем слова с указанием анкодов и леммы (полной морф. информации по версии aot.ru)
3) пихаем это все в шуструю бд (если python - shelve); лемматизатор готов
4) далее, герерация
- берем слово, которое нам нужно просклонять/изменить;
- получаем лемму и анкод;
- расшифровываем анкод, и на его основе формируем новый;
- используем этот анкод для нахождения искомой словоформы.

Вариант сложнее, но значительно красивее: вместо написания пишем трансдьюсер, куда скармливаем лемму и словоформу с морфологической информацией. Более подробно - слишком долго, сорри :). На aot.ru мого инфы по этому поводу.



Офлайн

#6 Янв. 30, 2009 18:08:11

lightcaster
От:
Зарегистрирован: 2008-07-01
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

Стоп, как всегда усложнил задачу.
Если нужно просто нормализовать слова, достаточно лемматизатора. Советую два:
- aot.ru
- mystem (http://company.yandex.ru/technology/mystem/ )



Офлайн

#7 Фев. 23, 2009 10:23:58

tilarids
От:
Зарегистрирован: 2009-01-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

lorien, lightcaster, спасибо! Pymorphy из хабровской статьи отлично справляется со своей задачей. И за алгоритмы стемминга тоже спасибо. Воспользуюсь еще вашими знаниями:
1) Существует ли алгоритмы стемминга/нормализации и словари для украинского языка?
2) Существует немалая вероятность, что часть или весь функционал прийдётся писать на Java. :( Какие-нибудь подобные решения, но для Java не подскажете?



Офлайн

#8 Март 1, 2009 22:58:20

tilarids
От:
Зарегистрирован: 2009-01-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

lorien
2) Так этот pymorphy по сути не такой уж большой - пару дней потрахаться - и будет порт на Java :-) Это если в мире Java родного ничего нету.
Согласен. Но зачем делать велосипед, если он уже есть? %) В принципе, меня сейчас больше удерживает не ситуация с Java, а с ситуацией с украинским языком. Любопытно, как работают всякие поисковики/переводчики/словари для украинского языка? Ведь в них частенько используется сходная функциональность…



Офлайн

#9 Ноя. 12, 2013 09:27:37

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

Нет ли чего готового для анализа частоты вхождения слов?
т.е. сначала делаем лемматизацию(перевод в нормальную форму), а потом считаем вхождения слов(возможно учитывая синонимы и близкие слова(однокоренные?или производные одно от другого) например творог - твороженный) + еще стоп лист нужен.



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#10 Сен. 14, 2014 13:14:51

Alexander_Panchenko
Зарегистрирован: 2014-09-14
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение инфинитива, "начальной" формы слова

Попробуйте pymystem3 – оболочку вокруг Yandex Mystem 3.

* https://pypi.python.org/pypi/pymystem3/0.1.1

* https://github.com/Digsolab/pymystem3

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version