最近本来在研究word2vec,想计算两个句子的相似度。
偶然看到synonmys,感觉好强大啊,以后要多多学习!
synonyms:中文近义词工具包 synonyms可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。
两个句子的相似度比较:
例子:
sen1 = "发生历史性变革"sen2 = "发生历史性变革"r = pare(sen1, sen2, seg=True)
其中,参数 seg 表示 pare是否对sen1 和 sen2进行分词,默认为 True。返回值:[0-1],并且越接近于1代表两个句子越相似。
计算结果:
旗帜引领方向 vs 道路决定命运: 0.429旗帜引领方向 vs 旗帜指引道路: 0.93发生历史性变革 vs 发生历史性变革: 1.0
中文分词:
例子:
import synonymssynonyms.seg("中文近义词工具包")
结果:
(['中文', '近义词', '工具包'], ['nz', 'n', 'n'])
分词结果由两个list组成的元组,分别是单词和对应的词性。该分词不去停用词和标点。
打印近义词:
例子:
>>> synonyms.display("飞机")'飞机'近义词:1. 架飞机:0.8373992. 客机:0.7646093. 直升机:0.7621164. 民航机:0.7505195. 航机:0.7501166. 起飞:0.7357367. 战机:0.7349758. 飞行中:0.7326499. 航空器:0.72394510. 运输机:0.720578
获得一个词语的向量:
例子:
>>> synonyms.v("飞机")array([-2.412167 , 2.2628384 , -7.0214124 , 3.9381874 , 0.8219283 ,-3.2809453 , 3.8747153 , -5.217062 , -2.2786229 , -1.2572327 ],dtype=float32)
该向量为numpy的array,当该词语是未登录词时,抛出 KeyError异常。
什么是未登录词??
获得一个分词后句子的向量:
synonyms.sv(sentence, ignore=False)
sentence: 句子是分词后通过空格联合起来
ignore: 是否忽略OOV,False时,随机生成一个向量
数据来源:
Synonyms的词表容量是125,792,下面选择一些在同义词词林、知网和Synonyms都存在的几个词,给出其近似度的对比: