Code Monkey home page Code Monkey logo

rulemma's Introduction

rulemma - лемматизатор для русскоязычных текстов для R&D в NLP

Этот лемматизатор написан полностью на Питоне, что позволяет при необходимости модифицировать его выдачу под конкретную задачу - в этом причина упоминания "R&D" в описании.

Подготовленная модель лемматизации включена в библиотеку, поэтому лемматизатор полностью готов к использованию после установки.

Для установки достаточно выполнить в консоли:

pip3 install git+https://github.com/Koziev/rulemma

Пример использования

На вход лемматизатор принимает результаты частеречного разбора, который выполняется отдельной библиотекой rupostagger. В свою очередь частеречная разметка выполняется по результатам токенизации, которую можно выполнить с помощью rutokenizer.

Следующий код выполнит лемматизацию предложения "Мяукая, голодные кошки ловят жирненьких хрюнделей":

import rutokenizer
import rupostagger
import rulemma


lemmatizer = rulemma.Lemmatizer()
lemmatizer.load()

tokenizer = rutokenizer.Tokenizer()
tokenizer.load()

tagger = rupostagger.RuPosTagger()
tagger.load()

sent = u'Мяукая, голодные кошки ловят жирненьких хрюнделей'
tokens = tokenizer.tokenize(sent)
tags = tagger.tag(tokens)
lemmas = lemmatizer.lemmatize(tags)
for word, tags, lemma, *_ in lemmas:
	print(u'{:15}\t{:15}\t{}'.format(word, lemma, tags))

В результате будет выведено:

Мяукая         	мяукать        	VERB|VerbForm=Conv
,              	,              	PUNCT
голодные       	голодный       	ADJ|Case=Nom|Degree=Pos|Number=Plur
кошки          	кошка          	NOUN|Case=Nom|Number=Plur
ловят          	ловить         	VERB|Mood=Ind|Number=Plur|Person=3|Tense=Notpast|VerbForm=Fin
жирненьких     	жирненький     	ADJ|Case=Acc|Degree=Pos|Number=Plur
хрюнделей      	хрюндель       	NOUN|Case=Acc|Number=Plur

Обратите внимание на последний токен 'хрюнделей'. Лемматизатор содержит модель для обработки out-of-vocabulary слов, и во многих случаях она нормально приводит слово к лемме, учитывая результаты частеречной разметки.

rulemma's People

Contributors

koziev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

rulemma's Issues

Would you be open to porting this to Javascript?

Hey @Koziev,

I stumbled upon your project here while searching for Russian lemmatizer implementations in JS.

Would you be open to porting this to Javascript? I can start working on this but I wanted to check with you first.

Let me know what you think! Great work on this project by the way 💯

Database error при попытке запустить пример

Windows, python 3.6. Не знаю, какая информация еще может понадобиться.

DatabaseError                             Traceback (most recent call last)
c:\GitProjects\ai\dpo-freeformat-routing\research\modeling.py in 
     36 sent = u'Мяукая, голодные кошки ловят жирненьких хрюнделей'
     37 tokens = tokenizer.tokenize(sent)
---> 38 tags = tagger.tag(tokens)
     39 lemmas = lemmatizer.lemmatize(tags)
     40 for word, tags, lemma, *_ in lemmas:

C:\ProgramData\Anaconda3\lib\site-packages\rupostagger\rupostagger.py in tag(self, words)
    121 
    122     def tag(self, words):
--> 123         X = self.vectorize_sample([BEG_TOKEN]+words+[END_TOKEN])
    124         y_pred = self.tagger.tag(X)
    125         return zip(words, y_pred[1: -1])

C:\ProgramData\Anaconda3\lib\site-packages\rupostagger\rupostagger.py in vectorize_sample(self, words)
    113                 iword2 = iword + j
    114                 if nb_words > iword2 >= 0:
--> 115                     features = self.get_word_features(words[iword2], str(j))
    116                     word_features.update(features)
    117 

C:\ProgramData\Anaconda3\lib\site-packages\rupostagger\rupostagger.py in get_word_features(self, word, prefix)
     97                 if self.use_gren:
     98                     tags = set()
---> 99                     for tagset in self.word2tags[uword]:
    100                         tags.update(tagset.split(' '))
    101 

C:\ProgramData\Anaconda3\lib\site-packages\ruword2tags\ruword2tags.py in __getitem__(self, word)
    134                 hit = True
    135             else:
--> 136                 for r in self.cur.execute('SELECT id_tagsets FROM word_tagsets WHERE word=:word', {'word': word}):
    137                     id_tagsets = int(r[0])
    138                     self.word2tagsets_cache[word] = id_tagsets

DatabaseError: file is not a database

Cannot load some modules

import rutokenizer
#Traceback (most recent call last):
#
#  File "<ipython-input-34-fe9c2c9403a4>", line 1, in <module>
#    import rutokenizer

#ModuleNotFoundError: No module named 'rutokenizer'


import rupostagger
#Traceback (most recent call last):
#
 # File "<ipython-input-35-f3c22b8e9cc6>", line 1, in <module>
#    import rupostagger

#ModuleNotFoundError: No module named 'rupostagger'


import rulemma

lemmatizer = rulemma.Lemmatizer()

lemmatizer.load()

tokenizer = rutokenizer.Tokenizer()
#Traceback (most recent call last):
#
#  File "<ipython-input-39-e44cc92630e8>", line 1, in <module>
#    tokenizer = rutokenizer.Tokenizer()
#
#NameError: name 'rutokenizer' is not defined

Я могу сделать просто лемматизацию через lemmatizer, не выводя части речи?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.