Synonyms
Chinese Synonyms for Natural Language Processing and Understanding.
最好的中文近义词工具包。
synonyms
可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。
Welcome
pip install -U synonyms
兼容py2和py3,当前稳定版本 v3.x。
Node.js 用户可以使用 node-synonyms了。
npm install node-synonyms
本文档的配置和接口说明面向python工具包, node版本查看项目。
Usage
支持使用环境变量配置分词词表和word2vec词向量文件。
环境变量 | 描述 |
---|---|
SYNONYMS_WORD2VEC_BIN_MODEL_ZH_CN | 使用word2vec训练的词向量文件,二进制格式。 |
SYNONYMS_WORDSEG_DICT | 中文分词主字典,格式和使用参考 |
synonyms#seg
中文分词
import synonyms synonyms.seg("中文近义词工具包")
分词结果,由两个list组成的元组,分别是单词和对应的词性。
(['中文', '近义词', '工具包'], ['nz', 'n', 'n'])
该分词不去停用词和标点。
synonyms#nearby
import synonyms print("人脸: %s" % (synonyms.nearby("人脸"))) print("识别: %s" % (synonyms.nearby("识别"))) print("NOT_EXIST: %s" % (synonyms.nearby("NOT_EXIST")))
synonyms.nearby(WORD)
返回一个元组,元组中包含两项:([nearby_words], [nearby_words_score])
,nearby_words
是WORD的近义词们,也以list的方式存储,并且按照距离的长度由近及远排列,nearby_words_score
是nearby_words
中对应位置的词的距离的分数,分数在(0-1)区间内,越接近于1,代表越相近。比如:
synonyms.nearby(人脸) = ( ["图片", "图像", "通过观察", "数字图像", "几何图形", "脸部", "图象", "放大镜", "面孔", "Mii"], [0.597284, 0.580373, 0.568486, 0.535674, 0.531835, 0.530 095, 0.525344, 0.524009, 0.523101, 0.516046])
在OOV的情况下,返回 ([], [])
,目前的字典大小: 125,792。
synonyms#compare
两个句子的相似度比较
sen1 = "发生历史性变革" sen2 = "发生历史性变革" r = synonyms.compare(sen1, sen2, seg=True)
其中,参数 seg 表示 synonyms.compare是否对sen1 和 sen2进行分词,默认为 True。返回值:[0-1],并且越接近于1代表两个句子越相似。
旗帜引领方向 vs 道路决定命运: 0.429 旗帜引领方向 vs 旗帜指引道路: 0.93 发生历史性变革 vs 发生历史性变革: 1.0
synonyms#display
以友好的方式打印近义词,方便调试,display
调用了 synonyms#nearby
方法。
>>> synonyms.display("飞机") '飞机'近义词: 1. 架飞机:0.837399 2. 客机:0.764609 3. 直升机:0.762116 4. 民航机:0.750519 5. 航机:0.750116 6. 起飞:0.735736 7. 战机:0.734975 8. 飞行中:0.732649 9. 航空器:0.723945 10. 运输机:0.720578
synonyms#v
获得一个词语的向量,该向量为numpy的array,当该词语是未登录词时,抛出 KeyError异常。
>>> 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)
synonyms#sv(sentence, ignore=False)
获得一个分词后句子的向量,向量以BoW方式组成
sentence: 句子是分词后通过空格联合起来 ignore: 是否忽略OOV,False时,随机生成一个向量