Реализация PhrasesTransformer () в конвейер CountVectorizer? - PullRequest
0 голосов
/ 05 января 2019

Следующий код используется для предварительной обработки ввода (строчные буквы, удаление стоп-слов, токенизация, лемматизация, минимальная длина) и вывода словаря:

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)
...