Страницы

Поиск по вопросам

Показаны сообщения с ярлыком морфология. Показать все сообщения
Показаны сообщения с ярлыком морфология. Показать все сообщения

воскресенье, 29 марта 2020 г.

Однозначная лемматизация слов русского текста [закрыт]

#python #морфология


        
             
                
                    
                        
                            Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
                        
                        Закрыт 1 месяц назад.
                                                                                
           
                
        
Текст состоит из правильных в меру предложений русского языка.
Можно использовать pymorphy2 — будут выданы варианты, как в классическом примере
СТАЛИ — Veb, Noun. Как опираясь на информацию соседствующих в предложении слов правильно
выбрать единственный правильный вариант. Буду благодарен за идеи, алгоритмы, примеры
на python, готовые модули в которых это работает.
    


Ответы

Ответ 1



Выбор однозначных гипотез во многих случаях - задача нетривиальная: Он видел их семью своими глазами (У меня есть такая оранжевая майка с этим симпатичным семиглазиком) ;) Вы можете использовать размеченные корпусы русского языка, чтобы составить свой алгоритм. В простейшем случае вы можете просто использовать готовые частотности на опорных текстах и полагаться на то, что и у вас будет примерно такое же совпадение. Как человек, вручную снявший неоднозначность в сотнях тысяч разнородных примеров для открытого корпуса могу только пожелать удачи в вашей затее.

Ответ 2



На python, использую pymorphy2 и машинное обучение: https://github.com/chomechome/maru https://github.com/IlyaGusev/rnnmorph Инструменты для NLP с исходниками на github http://www.solarix.ru/

понедельник, 2 марта 2020 г.

Удаление из строки служебных частей речи(союзы, предлоги частицы, междометия и др.) Python 3

#python #python_3x #строки #обработка #морфология


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

Пример:
Строка до применения: "Однако я так и не смог закончить"
Строка после применения: "я не смог закончить"
    


Ответы

Ответ 1



Если вы хотите удалить избранные части речи из строки, то можно части речи определить [к примеру] используя pymorphy2: import pymorphy2 # $ pip install pymorphy2 def pos(word, morth=pymorphy2.MorphAnalyzer()): "Return a likely part of speech for the *word*.""" return morth.parse(word)[0].tag.POS words = "Однако я так и не смог закончить".split() functors_pos = {'INTJ', 'PRCL', 'CONJ', 'PREP'} # function words print(*[word for word in words if pos(word) not in functors_pos]) # -> я смог закончить Часть речи по одному только слову может быть неверно определена. В частном случае, вы можете просто свой набор слов для удаления поддерживать. Можно разобрать части речи, используя averaged_perceptron_tagger_ru из nltk: import nltk # $ pip install nltk # nltk.download('averaged_perceptron_tagger_ru') words = nltk.word_tokenize("Однако я так и не смог закончить") functors_pos = {'CONJ', 'ADV-PRO', 'CONJ', 'PART'} # function words print(*[word for word, pos in nltk.pos_tag(words, lang='rus') if pos not in functors_pos]) # -> я смог закончить

среда, 26 февраля 2020 г.

Отбросить приставку слова

#python #nlp #pymorphy2 #морфология


Мне нужно получить инфинитив слова и отбросить его приставку с помощью pymorphy2.
Я пытался найти нужную информацию в документации, но не нашёл (есть KnownPrefixAnalyzer,
но ничего не написано про то, как им пользоваться. Очевидно, это внутренний анализатор).
Буду благодарен за любую помощь.
    


Ответы

Ответ 1



Попробуйте так: from pymorphy2 import MorphAnalyzer from pymorphy2.units.by_analogy import KnownPrefixAnalyzer, UnknownPrefixAnalyzer morph = MorphAnalyzer() def cut_prefix(word, morph=MorphAnalyzer()): analyzers = [ KnownPrefixAnalyzer(morph), UnknownPrefixAnalyzer(morph)] seen = set() word_lower = word.lower() res = [] for analyzer in analyzers: parsed = analyzer.parse(word, word_lower, seen) if not parsed: continue tmp = parsed[0] res.extend(tmp) if len(tmp) >= 5: if tmp[4] and tmp[4][0]: return morph.normal_forms(tmp[4][0][1])[0] return res тесты: In [131]: cut_prefix("приукрасила") Out[131]: 'украсить' In [132]: cut_prefix("подловил") Out[132]: 'ловить' In [133]: cut_prefix("мегаабракадабра") Out[133]: 'абракадабра' In [134]: cut_prefix("перенедоел") Out[134]: 'недоесть' In [140]: cut_prefix("безопасный") Out[140]: 'опасный' In [141]: cut_prefix("безобразие") Out[141]: 'образие'

пятница, 17 мая 2019 г.

Удаление из строки служебных частей речи(союзы, предлоги частицы, междометия и др.) Python 3

Усердно погуглив, на русском и английском, так и не смог найти библиотеку, которая позволяет удалить из строки абсолютно все служебные части речи, если кто знает подскажите ссылку, буду весьма благодарен.
Пример: Строка до применения: "Однако я так и не смог закончить" Строка после применения: "я не смог закончить"


Ответ

Если вы хотите удалить избранные части речи из строки, то можно части речи определить [к примеру] используя pymorphy2
import pymorphy2 # $ pip install pymorphy2
def pos(word, morth=pymorphy2.MorphAnalyzer()): "Return a likely part of speech for the *word*.""" return morth.parse(word)[0].tag.POS
words = "Однако я так и не смог закончить".split() functors_pos = {'INTJ', 'PRCL', 'CONJ', 'PREP'} # function words print(*[word for word in words if pos(word) not in functors_pos]) # -> я смог закончить
Часть речи по одному только слову может быть неверно определена. В частном случае, вы можете просто свой набор слов для удаления поддерживать.

Можно разобрать части речи, используя averaged_perceptron_tagger_ru из nltk
import nltk # $ pip install nltk # nltk.download('averaged_perceptron_tagger_ru')
words = nltk.word_tokenize("Однако я так и не смог закончить") functors_pos = {'CONJ', 'ADV-PRO', 'CONJ', 'PART'} # function words print(*[word for word, pos in nltk.pos_tag(words, lang='rus') if pos not in functors_pos]) # -> я смог закончить