Следующий код используется для предварительной обработки ввода (строчные буквы, удаление стоп-слов, токенизация, лемматизация, минимальная длина) и вывода словаря:
D2V
import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from gensim.utils import lemmatize
from gensim.sklearn_api.phrases import PhrasesTransformer
from gensim.parsing.preprocessing import STOPWORDS
STOPWORDS = list(STOPWORDS)
#data.text, data.labels, minimum example
data = pd.read_csv('https://pastebin.com/raw/2aBPN4b4')
def lemmatization(s):
result = []
for token in lemmatize(s, stopwords=STOPWORDS, min_length=2):
result.append(token.decode('utf-8').split('/')[0])
return result
X_train = data.apply(lambda r: lemmatization(r['text']), axis=1)
y_train = data.label
transform = PhrasesTransformer(min_count=1, threshold=2)
model = CountVectorizer(preprocessor=None, tokenizer=None)
pipeline = Pipeline([
('phrases', transform),
('vec', model)
])
pipeline.fit(X_train, y_train)
print(model.get_feature_names())
print(len(model.get_feature_names()))
В результате «AttributeError: объект« список »не имеет атрибута« ниже »»
Вопрос:
Как интегрировать PhrasesTransformer
в конвейер CountVectorizer
?
Решение:
Изменение
model = CountVectorizer(preprocessor=None, tokenizer=lemmatization)
до
model = CountVectorizer(preprocessor=' '.join, tokenizer=lemmatization)