Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2013, 16:25   #31
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Abstraction, Откуда она узнает, что "изловчимся" - слово без ошибки, а "мимся" - слово с ошибкой - это не есть задача века, говорю узнает!
*здесь должна была быть цитата из Станиславского, но мне надоело*
Abstraction вне форума Ответить с цитированием
Старый 09.04.2013, 18:34   #32
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Прочёл 4 страницы, но так и не понял, чего хочет автор
В любом случае вручную лопатить словари и вычислять "сколько букв с конца отрезать" — гиблое дело. Есть специальные библиотеки для морфоанализа, в частности на питоне самая примитивная — pymorphy.

Примерно как пользоваться:
1. получить грам.форму через get_graminfo: "ЗАШАРПАЮТ" — "Г", "дст,буд,3л,мн" (глагол, действительный залог, будущее время, 3 лицо, множ. форма)
2. изменить в форме что-то (лицо, время...)
3. преобразовать через inflect_ru исходное слово в новую форму

Код:
# coding: utf-8

import os
from pymorphy import get_morph

# путь к русским словарям (рядом со скриптом в папке dicts)
dicts_path = os.path.join(os.path.dirname(__file__), "dicts")

# создать объект-морфоанализатор
morph = get_morph(dicts_path, 'sqlite')

# анализируемое слово в верхнем регистре
word = u'зашарпают'.upper()

# получить информацию по слову
gram_form = morph.get_graminfo(word)[0]

info = gram_form['info'] # род, лицо, число, залог, вид...
class_ = gram_form['class'] # часть речи

print u"Исходный глагол: %s (%s, %s)" % (word, class_, info)
print u"Инфинитив: %s" % list(morph.normalize(word))[0]
print u"2 лицо мн.ч:", morph.inflect_ru(u"ЗАШАРПАЮТ", u"дст,буд,2л,мн")
print u"2 лицо ед.ч:", morph.inflect_ru(u"ЗАШАРПАЮТ", u"дст,буд,2л,ед")
print u"Прошлое время, ед.число, женский род:", morph.inflect_ru(word, u"прш,ед,жр")

# ------------------------------

def print_morphized(word, gram_form, gram_class=None):
	"""Выводит в консоль все варианты слова, соответствующие заданной грамматической форме и части речи"""
	forms = morph.decline(word, gram_form, gram_class)
	print gram_form, ":"
	for form in forms:
		print "\t", form['word']


def print_morphized_one(word, gram_form, gram_class=None):
	"""Выводит в консоль вариант слова, который соотвествует данной грамматической форме и части речи, 
	   а также менее всего отличается от исходного."""
	form = morph.inflect_ru(word, gram_form, gram_class)
	print gram_form, ":", form

print u"\nВсякие разные формы:"
print_morphized(word, u'1л')
print_morphized(word, u'2л')
print_morphized(word, u'3л')
print_morphized(word, u'1л,мн')
print_morphized(word, u'ед,3л')
print_morphized(word, u'прш', u'Г') # тут нужно дополнительно уточнить что это глагол, иначе выдаст много шарп'ов :)

print u'\n"Самая подходящая" форма:'
print_morphized_one(word, u'1л')
print_morphized_one(word, u'2л')
print_morphized_one(word, u'3л')
print_morphized_one(word, u'1л,ед')
print_morphized_one(word, u'ед,3л')
print_morphized_one(word, u'прш')
Выдаст
Код:
(venv) D:\morfology>python run.py
Исходный глагол: ЗАШАРПАЮТ (Г, дст,буд,3л,мн)
Инфинитив: ЗАШАРПАТЬ
2 лицо мн.ч: ЗАШАРПАЕТЕ
2 лицо ед.ч: ЗАШАРПАЕШЬ
Прошлое время, ед.число, женский род: ЗАШАРПАЛА

Всякие разные формы:
1л :
        ЗАШАРПАЮ
        ЗАШАРПАЕМ
        ЗАШАРПАЕМ
        ЗАШАРПАЕМТЕ
        ЗАШАРПАЮ
        ЗАШАРПАЕМ
2л :
        ЗАШАРПАЕШЬ
        ЗАШАРПАЕТЕ
        ЗАШАРПАЙ
        ЗАШАРПАЙТЕ
        ЗАШАРПАЕШЬ
        ЗАШАРПАЕТЕ
        ЗАШАРПАЙ
        ЗАШАРПАЙТЕ
3л :
        ЗАШАРПАЕТ
        ЗАШАРПАЮТ
        ЗАШАРПАЕТ
        ЗАШАРПАЮТ
1л,мн :
        ЗАШАРПАЕМ
        ЗАШАРПАЕМ
        ЗАШАРПАЕМТЕ
        ЗАШАРПАЕМ
ед,3л :
        ЗАШАРПАЕТ
        ЗАШАРПАЕТ
прш :
        ЗАШАРПАЛ
        ЗАШАРПАЛА
        ЗАШАРПАЛО
        ЗАШАРПАЛИ
        ЗАШАРПАЛ
        ЗАШАРПАЛА
        ЗАШАРПАЛО
        ЗАШАРПАЛИ

"Самая подходящая" форма:
1л : ЗАШАРПАЕМ
2л : ЗАШАРПАЕТЕ
3л : ЗАШАРПАЮТ
1л,ед : ЗАШАРПАЮ
ед,3л : ЗАШАРПАЕТ
прш : ЗАШАРПАЛИ
Документация тут http://pythonhosted.org/pymorphy/index.html. Либа, как я уже сказал, совершенно дубовая и многого не знает, но вполне функциональная. Есть более продвинутые и сложные библиотеки (NLTK), более полные словари (opencorpora), и наверняка есть под другие языки.
пыщь

Последний раз редактировалось JTG; 09.04.2013 в 18:44.
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск лица casio23 Общие вопросы Delphi 3 26.05.2012 01:55
Распознание лица harkonen C# (си шарп) 0 27.02.2012 15:07
Распознавание лица Даниил_глазко Свободное общение 3 31.10.2011 15:01
Неправильных глаголов в Excel таблица. Как сортировать глаголы по группам изменчивости? xcislav Microsoft Office Excel 1 16.07.2011 15:58
Времена глаголов в английском языке pro100-delphi Свободное общение 27 23.10.2009 20:17