Извлечение текстовых объектов из фрейма данных - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть фрейм данных с двумя текстовыми полями и другими функциями, такими как этот формат:

 message            feature_1      feature_2       score        text
 'This is the text'     4             7            10          extra text
 'This is more text'    3             2            8           and this is another text

Теперь моя цель состоит в том, чтобы предсказать оценку, и при попытке преобразовать этот фрейм данных в матрицу возможностей, чтобы передать его в мою модель машинного обучения, вот что я сделал:

    # Create vectorizer for function to use
    vectorizer = TfidfVectorizer()
    # combine the numerical features with the TFIDF generated matrix
    X = sp.sparse.hstack( (vectorizer.fit_transform(df.message),
                      df[['feature_1', 'feature_2']].values, vectorizer.fit_transform(df.text)),
                      format='csr')

Теперь при печати формы моей матрицы X я получил 2x13, но когда я проверяю X_columsn, вот так:

X_columns = vectorizer.get_feature_names() + df[['feature_1', 'feature_2']].columns.tolist()

Я не получаю все слова в корпусе, он приносит мне только слова, существующие в df.text, и атрибут других функций без слов в df.message.

['and', 'another', 'extra', 'is', 'text', 'this', 'feature_1', 'feature_2']

Как я могу сделать так, чтобы X содержал все мои функции для работы с кадрами !!

1 Ответ

0 голосов
/ 06 ноября 2018

Как правило, поместите ваш векторизатор на весь корпус текстов, чтобы вычислить словарный запас, а затем преобразовать весь текст в векторы.

Вы подгоняете векторизатор два раза, поэтому второй вызов fit_transform перезаписывает первый и соответственно обновляет словарь. Попробуйте установить оба текстовых поля, чтобы сначала вычислить словарный запас по всему корпусу, а затем преобразовать каждое текстовое поле следующим образом:

from sklearn.feature_extraction.text import TfidfVectorizer
import scipy as sp

vectorizer = TfidfVectorizer()
vectorizer.fit(df.message.append(df.text))
X = sp.sparse.hstack( (vectorizer.transform(df.message),
                 df[['feature_1', 'feature_2']].values, vectorizer.transform(df.text)),
                 format='csr')

X_columns = vectorizer.get_feature_names() + df[['feature_1', 'feature_2']].columns.tolist()

Это дает мне:

X_columns
Out[51]: ['and', 'another', 'extra', 'is', 'more', 'text', 'the', 'this', 'feature_1', 'feature_2']

Это то, что вы ищете?

...