pymorphy2 icon indicating copy to clipboard operation
pymorphy2 copied to clipboard

Слово «зара»

Open macleginn opened this issue 11 years ago • 3 comments

Формы слова «заря» анализируются как производные от существительного «зара», которое есть в словаре и предлагается как первый вариант:

>>> import pymorphy2
>>> ma = pymorphy2.MorphAnalyzer()
>>> ma.parse('заре')
[Parse(word='заре', tag=OpencorporaTag('NOUN,anim,femn,Name sing,datv'),  
normal_form='зара', score=0.25, methods_stack=((<DictionaryAnalyzer>, 'заре', 68, 2),)),  
Parse(word='заре', tag=OpencorporaTag('NOUN,anim,femn,Name sing,loct'),   
normal_form='зара', score=0.25, methods_stack=((<DictionaryAnalyzer>, 'заре', 68, 6),)) . . .]

macleginn avatar Apr 04 '14 12:04 macleginn

А в чем ошибка? Правильный вариант же тоже предлагается:

In [6]: m.parse('заре')
Out[6]: 
[Parse(word='заре', tag=OpencorporaTag('NOUN,anim,femn,Name sing,datv'), normal_form='зара', score=0.25, methods_stack=((<DictionaryAnalyzer>, 'заре', 68, 2),)),
 Parse(word='заре', tag=OpencorporaTag('NOUN,anim,femn,Name sing,loct'), normal_form='зара', score=0.25, methods_stack=((<DictionaryAnalyzer>, 'заре', 68, 6),)),
 Parse(word='заре', tag=OpencorporaTag('NOUN,inan,femn sing,datv'), normal_form='заря', score=0.25, methods_stack=((<DictionaryAnalyzer>, 'заре', 1486, 2),)),
 Parse(word='заре', tag=OpencorporaTag('NOUN,inan,femn sing,loct'), normal_form='заря', score=0.25, methods_stack=((<DictionaryAnalyzer>, 'заре', 1486, 6),))]

Зара - женское имя. Так вышло, что ни оно, ни слово "заря" в части Opencorpora со снятой неоднозначностью не встречается, поэтому pymorphy2 выдает их в более-менее случайном порядке.

kmike avatar Apr 04 '14 13:04 kmike

Ну плохо, конечно, что первый вариант - неправильный, но такие ситуации всегда будут; без знания контекста невозможно сказать, какая форма слова правильная, а pymorphy2 работает с отдельными словами.

Можно улучшать оценки вероятности и для отдельных слов - например, понижать их для имен, если слово начинается с маленькой буквы, и т.д. Сейчас там один метод работает (вероятность P(tag|word) оценивается по OpenCorpora, для отдельных слов), можно еще что-то придумать.

kmike avatar Apr 04 '14 13:04 kmike

Спасибо за ответ! Я использую оберточный метод для извлечения базовой формы — у меня в текстах бывают слова типа «й», в ответ на которые анализатор выдает пустой список, приходится на это проверять и возвращать список с исходной формой, чтобы не получить ошибку, — можно просто добавить туда проверку на граммему имени собственного.

macleginn avatar Apr 04 '14 13:04 macleginn