Как я могу заставить Scikit-learn TfidfVectorizer не обрабатывать текст? - PullRequest
0 голосов
/ 20 июня 2019

Я читаю некоторые текстовые данные из CSV и пытаюсь построить вектор признаков TF-IDF, используя эти данные.

Данные выглядят примерно так:

enter image description here

, где содержимое содержит специально отформатированные строки (synset).

Когда я пытаюсь построить вектор TF-IDF с этим, я ожидаю сохранить этот формат, но когда я делаю

tfidf = TfidfVectorizer()
data['content'] = data['content'].fillna('')
tfidf_matrix = tfidf.fit_transform(data['content'])

и посмотрите на tfidf.vocabulary_

Текстовые данные предварительно обрабатываются как:

{'square': 3754,
 '01': 0,
 '02': 1,
 'public_square': 3137,
 '04': 3,
 '05': 4,
 '06': 5,
 '07': 6,
 '08': 7,
 '03': 2,
 'feather': 1666,
 'straight': 3821,...

Я хочу, чтобы они считали square.n.01 как один текствместо того, чтобы разбивать его на части.

Я мог бы сделать это, если бы собирал TF-IDF с нуля, но я чувствую, что в этом нет необходимости.Любая помощь?

1 Ответ

1 голос
/ 20 июня 2019

вам нужно написать собственную функцию токенизации, которую нужно вызывать в параметре токенизатора tfidfVectorizer

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer


df = pd.DataFrame(data = [[['square.n.01','square.n.02','public_square.n.01']], 
[['two.n.01','deuce.n.04','two.s.01']]], columns = ['content'])

df['content'] = df['content'].astype(str)
df['content'] = df['content'].apply(lambda x: x.replace('[','').replace(']',''))

def my_tokenizer(doc):
    return doc.split(',')

tfidf = TfidfVectorizer(tokenizer = my_tokenizer)
tfidf_matrix = tfidf.fit_transform(df['content'])

print(tfidf.vocabulary_)
#o/p
{"'square.n.01'": 4,
 " 'square.n.02'": 2,
 " 'public_square.n.01'": 1,
 "'two.n.01'": 5,
 " 'deuce.n.04'": 0,
 " 'two.s.01'": 3}
...