Python 如何将相似的列表聚集在一起?

Python 如何将相似的列表聚集在一起?,python,algorithm,machine-learning,cluster-analysis,Python,Algorithm,Machine Learning,Cluster Analysis,我正在寻找一种算法,它能够对内容几乎相同的字符串列表进行分组 这是一个列表示例。总共有5个不同的单词 A = ['first', 'second', 'third'] B = ['first', 'forth'] C = ['second', 'third'] D = ['first', 'third'] E = ['first', 'fifth'] F = ['fourth', 'fifth'] 你可以看到A,C和D有很多共同点,还有B,E和F 我想到了一种聚类算法,它可以为同一个集群提供几

我正在寻找一种算法,它能够对内容几乎相同的字符串列表进行分组

这是一个列表示例。总共有5个不同的单词

A = ['first', 'second', 'third']
B = ['first', 'forth']
C = ['second', 'third']
D = ['first', 'third']
E = ['first', 'fifth']
F = ['fourth', 'fifth']
你可以看到A,C和D有很多共同点,还有B,E和F

我想到了一种聚类算法,它可以为同一个集群提供几乎相同的列表

我想要两个集群,确保一个单词至少是一个集群

在本例中,列表A、C和D应具有集群1

B、E和F簇2


Python中是否有一种算法(或机器学习)可用于解决此类问题?

这看起来是一个很好的模型用例


LDA
是一种无监督的模型,可以在一组观察结果中找到相似的组,然后可以使用这些组为每个组分配一个主题

以下是您可以进行此操作的方法:

from sklearn.feature_extraction.text import CountVectorizer
import lda
拟合a以从字符串列表中获取令牌计数矩阵:

l = [' '.join(i) for i in [A,B,C,D,E,F]]
vec = CountVectorizer(analyzer='word', ngram_range=(1,1))

X = vec.fit_transform(l)
CountVectorizer
的结果上使用并安装一个模型(还有其他带有
lda
模型实现的模块,如中)

并为
2
创建的主题分配组号:

doc_topic = model.doc_topic_

for i in range(len(l)):
    print(f'Cluster {i}: Topic ', doc_topic[i].argmax())

Cluster 0: Topic  1 # -> A
Cluster 1: Topic  0
Cluster 2: Topic  1 # -> C
Cluster 3: Topic  1 # -> D
Cluster 4: Topic  0
Cluster 5: Topic  0

这看起来是一个很好的模型用例


LDA
是一种无监督的模型,可以在一组观察结果中找到相似的组,然后可以使用这些组为每个组分配一个主题

以下是您可以进行此操作的方法:

from sklearn.feature_extraction.text import CountVectorizer
import lda
拟合a以从字符串列表中获取令牌计数矩阵:

l = [' '.join(i) for i in [A,B,C,D,E,F]]
vec = CountVectorizer(analyzer='word', ngram_range=(1,1))

X = vec.fit_transform(l)
CountVectorizer
的结果上使用并安装一个模型(还有其他带有
lda
模型实现的模块,如中)

并为
2
创建的主题分配组号:

doc_topic = model.doc_topic_

for i in range(len(l)):
    print(f'Cluster {i}: Topic ', doc_topic[i].argmax())

Cluster 0: Topic  1 # -> A
Cluster 1: Topic  0
Cluster 2: Topic  1 # -> C
Cluster 3: Topic  1 # -> D
Cluster 4: Topic  0
Cluster 5: Topic  0