Мне нужно написать программу для лемматизации текста (разные формы слов).Поскольку я собираюсь использовать разные библиотеки лемматизации и сравнивать их, я решил использовать шаблон стратегии.
Моя идея состоит в том, чтобы обернуть все в один класс и, в зависимости от функции лемматизации, изменить только мой метод лемматизации..
Вот мой класс:
import re
import types
create_bound_method = types.MethodType
class Lemmatizator(object):
def __init__(self, filename=None, lemmatization=None):
if lemmatization and filename:
self.filename = filename
self.lemmatize = create_bound_method(lemmatization, self)
def _get_text(self):
with open(f'texts/{self.filename}.txt', 'r') as file:
self.text = file.read()
def _split_to_unique(self):
text = re.sub(r'[^\w\s]', '', self.text)
split_text = re.split(r'\s', text)
self.unique_words = set(split_text)
return self.unique_words
def lemmatize(self):
return 'Lemmatize function or text are not found'
Затем я создаю свой метод лемматизации:
def nltk_lemmatization(self):
words = {}
for word in self.unique_words:
if word:
words[word] = {
'noun': wnl.lemmatize(word),
'adverb': wnl.lemmatize(word, pos='r'),
'adjective': wnl.lemmatize(word, pos='a'),
'verb': wnl.lemmatize(word, pos='v')
}
return words
И пытаюсь применить его:
nltk_lem = Lemmatizator('A Christmas Carol in Prose', nltk_lemmatization)
nltk_lem.lemmatize()
Но я получаю следующую ошибку:
for word in self.unique_words:
AttributeError: у объекта 'Lemmatizator' нет атрибута 'unique_words'
что не так?