在python中聚类相似的单词,然后将聚类映射成数字

2024-05-08 05:49:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我熟悉k-均值聚类数据点,但不熟悉文本。。所以我有一列cvs格式的单词(有些行只有一个单词,有些行有更多等等),我想把那些有相似单词或更多单词的列进行聚类,然后将这些簇映射到数字作为索引,这些索引号需要作为第二列添加。我知道python中有scipy包和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)

我的列表示例是['Carbon Monoxide (Blood)', 'Carbon Monoxide Poisoning', 'Carbonic anhydrase inhibitor administered']

cleanlist的示例是[['Antibody', 'Cardiolipin'], ['Cardiomegaly'], ['Cardiomyopathy'], ['Cardiopulmonary', 'Resuscitation', '(CPR)'], ['Diet', 'Cardiovascular'], ['Disease', 'Cardiovascular']]

解决了[现在我有问题了,我的cleanlist不是每个索引只包含一个项,这使得匹配比较困难,如何解决这个问题??]在

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


Tags: in示例列表forifmy聚类item
3条回答

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

编辑:

对于你的例子来说这意味着

心脏病发作 心力衰竭=>距离7

心脏病发作 心碎=>距离6

心力衰竭 心碎=>距离7

心碎 香蕉=>距离12

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

如果你有较长的文本,你可以用它们的共同点来衡量相似性。在

但对于单个词来说,这种方法并不奏效。在

考虑:

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

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

你看:语言是关于背景知识和联想的。如果一台计算机不能同时将“苹果”和“梨”与“生长在树上的水果联系起来,通常是绿色的,内部是白色的,中间是黑色的种子,顶部是一个手掌大小的果实”,那么计算机就无法识别它们的共同点,因此无法将它们聚集在一起。在

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

rowText = "mary have a little lamb"

然后把单词分成一组:

^{pr2}$

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

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

现在,我们应该删除一些不太重要的词,如“a”、“an”、“is”、“are”等

将集合按顺序转换回列表,检查列表的长度。现在我们可以创建一个N维空间,例如,总列表是[“Mary”,“has”,“lamb”,“happy”]。行是“Mary has a little lamb”,所以我们可以将这个句子转换成[1,1,1,0]。在

现在你可以做集群了。正确的?在

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

你可以从贝耶斯那里引用我的观点。在

相关问题 更多 >