我有一组文档,我想了解它们与某一特定文档在相似性上的接近程度。我刚刚学会了如何对分词后的文档进行聚类,但不知道如何检查它们与一个目标文档的距离。
我实现聚类的方式是,首先处理文档列表…
text = [ "This is a test", "This is something else", "This is also a test"]
然后我使用以下函数对它们进行分词…
def word_tokenizer(sentences): tokens = word_tokenize(sentences) stemmer = PorterStemmer() tokens = [stemmer.stem(t) for t in tokens if t not in stopwords.words('english')] return tokens
我将这个函数传递给TfidfVectorizer
…
tfidf_vect = TfidfVectorizer( tokenizer=word_tokenizer, max_df=0.9, min_df=0.1, lowercase=True )tfidf_matrix = tfidf_vect.fit_transform(text)
然后我使用Kmeans
对矩阵进行聚类…
kmeans = KMeans(n_clusters=3)kmeans.fit(tfidf_matrix)
然后我保存每个聚类并打印结果…
for i, label in enumerate(kmeans.labels_): clusters[label].append(i)res = dict(clusters)for cluster in range(3): print("cluster ", cluster, ":") for i, sentence in enumerate(res[cluster]): print("\tsentence ", i, ": ", text[sentence])
结果如下…
cluster 0 : sentence 0 : This is also a testcluster 1 : sentence 0 : This is something elsecluster 2 : sentence 0 : This is a test
这些信息很有用,但假设我有一个目标文档,我想查看这些文档与目标文档的相似度,该怎么做呢?
例如,假设我有以下目标…
target = ["This is target"]
我如何检查text
中的每个文档与这个目标的相似度?
回答:
你可以简单地使用KMeans.predict()
预测X中每个样本所属的最接近的聚类。
在向量量化文献中,cluster_centers_被称为代码簿,predict返回的每个值是代码簿中最接近代码的索引。
这将返回新句子所属聚类的索引。
对目标句子应用相同的预处理并调用predict()。确保使用相同的tfidfvectorizer来转换句子。
类似于这样:
target_tfidf_matrix = tfidf_vect.transform(target)results = kmeans.predict(target_tfidf_matrix)