如何对分词后的文档进行聚类

我有一组文档,我想了解它们与某一特定文档在相似性上的接近程度。我刚刚学会了如何对分词后的文档进行聚类,但不知道如何检查它们与一个目标文档的距离。

我实现聚类的方式是,首先处理文档列表…

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)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注