TF*IDF для поисковых запросов
Итак, я следил за этими двумя постами на TF*IDF, но немного запутался: http://css.dzone.com/articles/machine-learning-text-feature
По сути, я хочу создать поисковый запрос, который содержит поиск по нескольким документам. Я хотел бы использовать инструментарий scikit-learn, а также библиотеку NLTK для Python
Проблема в том, что я не вижу, откуда берутся два вектора TF*IDF. Мне нужен один поисковый запрос и несколько документов для поиска. Я подумал, что вычисляю баллы TF*IDF каждого документа по каждому запросу и нахожу косинусное сходство между ними, а затем ранжирую их, сортируя баллы в порядке убывания. Однако код, похоже, не подходит для правильных векторов.
Всякий раз, когда я сокращаю запрос только до одного поиска, он возвращает огромный список нулей, что действительно странно.
Вот код:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from nltk.corpus import stopwords
train_set = ("The sky is blue.", "The sun is bright.") #Documents
test_set = ("The sun in the sky is bright.") #Query
stopWords = stopwords.words('english')
vectorizer = CountVectorizer(stop_words = stopWords)
transformer = TfidfTransformer()
trainVectorizerArray = vectorizer.fit_transform(train_set).toarray()
testVectorizerArray = vectorizer.transform(test_set).toarray()
print 'Fit Vectorizer to train set', trainVectorizerArray
print 'Transform Vectorizer to test set', testVectorizerArray
transformer.fit(trainVectorizerArray)
print transformer.transform(trainVectorizerArray).toarray()
transformer.fit(testVectorizerArray)
tfidf = transformer.transform(testVectorizerArray)
print tfidf.todense()
1 ответ
Вы определяете train_set
а также test_set
как кортежи, но я думаю, что они должны быть списками:
train_set = ["The sky is blue.", "The sun is bright."] #Documents
test_set = ["The sun in the sky is bright."] #Query
Используя этот код, кажется, работает нормально.