2017-03-21 42 views
0

我有8个文档,并且我运行了TF-IDF来获取数组。我不明白我是如何找出哪一个是给定输入查询的最佳文档匹配?从一组文档中输入查询的最佳匹配

all_documents = [doc1, doc2, ...., doc7] 
sklearn_tfidf = TfidfVectorizer(norm='l2',min_df=0, use_idf=True, smooth_idf=False, sublinear_tf=True, tokenizer=tokenize) 
sklearn_representation = sklearn_tfidf.fit_transform(all_documents).toarray() 
+0

通过最好的文档,你是指最接近输入查询的文档吗?你必须使用'TfidfVectorizer'来输入查询,然后从你有的7个文件中找到到矢量的距离(这可以是余弦距离/欧氏距离)。 – titipata

+0

@titipat感谢您的方法。但据我所知,找到任何提到的距离矢量的长度应该是相同的。我将如何做到这一点? – user3235169

回答

0

使用TfidfVectorizer变换输入到tf-idf格式。然后,您可以使用距离度量(余弦,欧几里得,曼哈顿,...)来计算最接近您输入的文档。

每个文档都应该使用相同的词汇表。我假设你的8个文档向量具有相同的长度?您创建的sklearn_tfidf对象具有属性vocabulary_,该属性包含向量中使用的所有单词。您的输入查询应该减少到只包含这些词。

Document1: dogs are cute 
Document2: cats are awful 

引出的[dogs, cats, are, cute, awful]一个词汇。包含除这些5之外的其他单词的查询不能使用。例如,如果您的查询是cute animals,那么animals没有意义,因为在其中一个文档中找不到它。该查询因此简化为以下矢量:[0,0,0,1,0],因为cute是唯一可以在文档中找到的单词。

+0

感谢您的方法。但据我所知,找到任何提到的距离矢量的长度应该是相同的。我将如何做到这一点? – user3235169

+0

每个文档应该使用相同的词汇表。我假设你的8个文档向量具有相同的长度?您创建的'sklearn_tfidf'对象具有一个属性'vocabulary_',其中包含向量中使用的所有单词。您的输入查询应该减少到只包含这些词。 – PinkFluffyUnicorn

+0

是的,每个矢量的长度是1058.但是,如何将输入字符串转换为长度为1058的矢量? – user3235169