对相似的单词进行聚类,然后在python中将聚类映射为数字



我熟悉聚类数据点的k-means,但不熟悉文本。。所以我有一列cvs格式的单词(有些行只有一个单词,有些行有更多等等),我想对那些有相似单词或更多单词的单词进行聚类,然后将这些聚类映射到数字作为索引,这些索引号需要作为第二列添加。我知道python中有scipy packages和word2vec,但这是我第一次处理集群文本。。你知道怎么做吗??任何代码示例都将受到赞赏

编辑:我想要的不是含义相似的单词,我想要的是类似的确切文本,例如:我们有三个单词在不同的三行:心脏病发作、心力衰竭、心碎。。例如我希望这些行在一个集群中,因为它们有一个共同的单词"心……顺便说一句,所有的行都以某种方式相互连接,所以我真正想要的是集群确切的单词

from csv import DictReader
import sets

### converting my cvs file into list!!
with open("export.csv") as f:
   my_list = [row["BASE_NAME"] for row in DictReader(f)]

#print(my_list)  
## having every word in the cvs file
Set = list()   
for item in my_list:
      MySet = list(set(item.split(' ')))
      Set.append(MySet)
#print(Set)
cleanlist = []
[cleanlist.append(x) for x in Set if x not in cleanlist]
print(cleanlist[1])
#print(cleanlist)
###my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
#for item in my_list:
for i in xrange(len(cleanlist)):
      # matching = [s for s in my_list if cleanlist[i] in s]
   # matching =  [x for x in my_list if cleanlist[i] in x]
    matching = any( cleanlist[[i]] in item for item in my_list)
print(matching)

my_list的示例为['Carbon Monoxide (Blood)', 'Carbon Monoxide Poisoning', 'Carbonic anhydrase inhibitor administered']

清洁清单样本为[['Antibody', 'Cardiolipin'], ['Cardiomegaly'], ['Cardiomyopathy'], ['Cardiopulmonary', 'Resuscitation', '(CPR)'], ['Diet', 'Cardiovascular'], ['Disease', 'Cardiovascular']]

解决了[现在我遇到了问题,我的清理列表不是每个索引只包含一个项目,这使得匹配的比较很困难,如何解决这个问题?]

此外,我想为每次比较创建一个列表,所以对于干净列表的每次比较,我想创建一个在它们之间有相似单词的列表,有什么帮助吗??

我是机器学习的新手,但也许我可以给你一些建议。假设我们有一排:

rowText = "mary have a little lamb"

然后把单词拆分成一组:

MySet = set(rowText.split(' '))

现在我们可以在这个集合中添加更多的行,最后我们得到了一个包含所有单词的大集合。

MySet.add(newRowText.split(' '))

现在,我们应该去掉一些不那么重要的词,如"a"、"an"、"is"、"are"等。

按顺序将集合转换为列表,检查列表的长度。现在我们可以创建一个N维空间,例如,总列表是["Mary"、"has"、"lamb"、"happy"]。这一行是"玛丽有一只小羊羔",所以我们可以把这个句子转换成[1,1,0]。

现在你可以进行集群了。正确的

如果你发现"玛丽"很重要,你可以像[2,1,0]一样调整玛丽的重量。

你可以从贝叶斯中引用我的观点。

对文本进行聚类很困难,而且大多数方法都不能很好地工作。聚类单个单词本质上需要大量的背景知识。

如果你有较长的文本,你可以通过它们的共同单词来衡量相似性。

但对于单个单词来说,这种方法是行不通的。

考虑:

  • 苹果
  • 香蕉
  • 橙色
  • 豌豆

对于一个懂得很多的人来说,苹果和梨应该是最相似的两种。对于一台只有这3到6字节字符串数据的计算机来说,pear和pea是最相似的词。

你知道:语言是关于背景知识和联想的。一台无法将"苹果"one_answers"梨"与"树上生长的水果,通常外绿内白,中心有黑色种子,顶部有一根棕榈大小的茎"联系起来的计算机通常无法识别它们的共同点,因此无法对它们进行聚类。

对于集群,您需要某种距离测量。我建议使用汉明距离(参见https://en.wikipedia.org/wiki/Hamming_distance)。我认为用它来衡量两个单词之间的相似性是很常见的。

编辑:

对于你的例子,这意味着

心脏病发作心力衰竭=>dist 7

心脏病发作心碎=>dist 6

心力衰竭心碎=>dist 7

心碎了香蕉=>蒸馏12

最新更新