嗨,我有一个小文件和一个大文件, 这里的代码甚至不适用于大文件,只适用于小文件,因此如何读取大文件并对其执行操作?当我阅读并尝试在一个循环中进行集群时,它不起作用,因为每次迭代都是在线的。 下面是小文件的问题: 行的文件,我需要将它们分为3组。 我尝试过亲和传播,但它没有得到组大小参数,它给了我4个组,而第4个组只有一个词与另一个组非常接近:
0
- *Bras5emax Estates, L.T.D.
:* Bras5emax Estates, L.T.D.
1
- *BOZEMAN Enterprises
:* BBAZEMAX ESTATES, LTD
, BOZEMAN Ent.
, BOZEMAN Enterprises
, BOZERMAN ENTERPRISES
, BRAZEMAX ESTATYS, LTD
, Bozeman Enterprises
2
- *PC Adelman
:* John Smith
, Michele LTD
, Nadelman, Jr
, PC Adelman
3
- *Gramkai, Inc.
:* Gramkai Books
, Gramkai, Inc.
, Gramkat Estates, Inc., Gramkat, Inc.
然后我尝试了K-MEANS,但结果是:
0
- *Gramkai Books
, Gramkai, Inc.
, Gramkat Estates, Inc., Gramkat, Inc.
:*
1
- *BBAZEMAX ESTATES, LTD
, BOZEMAN Enterprises
, BOZERMAN ENTERPRISES
, BRAZEMAX ESTATYS, LTD
, Bozeman Enterprises
, Bras5emax Estates, L.T.D.
:*
2
- *BOZEMAN Ent.
, John Smith
, Michele LTD
, Nadelman, Jr
, PC Adelman
:*
正如你所看到的,博兹曼·恩特。属于第2组,而不是第1组
我的问题是:有没有办法做得更好?K-MEANS中是否有集群中心
守则:
import numpy as np
import sklearn.cluster
import distance
f = open("names.txt", "r")
words = f.readlines()
words = np.asarray(words) #So that indexing with a list will work
lev_similarity = -1*np.array([[distance.levenshtein(w1,w2) for w1 in words] for w2 in words])
affprop = sklearn.cluster.KMeans(n_clusters=3)
affprop.fit(lev_similarity)
for cluster_id in np.unique(affprop.labels_):
print(cluster_id)
cluster = np.unique(words[np.nonzero(affprop.labels_==cluster_id)])
cluster_str = ", ".join(cluster)
print(" - *%s:*" % ( cluster_str))
可以通过几种方式改进给定文本名称(企业)的聚类
distance.levenshtein
的“标准化”版本,以便可以有意义地比较距离,例如:sorensen
或jaccard
,它们已经标准化李>下面是完整的代码示例:
结果:
最后,您可能需要将更改的名称与原始名称连接起来
相关问题 更多 >
编程相关推荐