2015-07-10 3 views
0

Я пытаюсь использовать несколько методов поиска информации один за другим. Для каждого из них я хочу, чтобы тексты были предварительно обработаны точно так же. Мои предварительно обработанные тексты представлены в виде списка списков слов. К сожалению scikit-узнает, что TfidfVectorizer, похоже, принимает только списки строк. В настоящее время я делаю это так (что, конечно, очень неэффективный):TFIDF с предварительно обработанными данными

from sklearn.feature_extraction.text import TfidfVectorizer 

train_data = [["the","sun","is","bright"],["blue","is","the","sky"]] 

tfidf = TfidfVectorizer(tokenizer=lambda i:i.split(",")) 
converted_train = map(lambda i:",".join(i), train_data) 
result_train = tfidf.fit_transform(converted_train) 

Есть ли способ использовать scikit-TfidfVectorizer учится выполнять поиск информации непосредственно на такого рода данные, отвечающие?

Если нет, возможно ли, чтобы TfidfVectorizer выполнил предварительную обработку и повторно использовал свои предварительно обработанные данные?

ответ

1

Я сам нашел ответ. Моя проблема была, что я просто не используется ни в качестве Tokenizer в TfidfVectorizer:

tfidf = TfidfVectorizer(tokenizer=None) 

Вы должны вместо этого использовать Tokenizer, который только передает данные. Также вы должны убедиться, что векторный указатель не преобразует списки в нижний регистр (который не работает). Рабочий пример:

from sklearn.feature_extraction.text import TfidfVectorizer 

train_data = [["the","sun","is","bright"],["blue","is","the","sky"]] 

tfidf = TfidfVectorizer(tokenizer=lambda i:i, lowercase=False) 
result_train = tfidf.fit_transform(train_data)