python synonyms文本处理:计算词语相似度,提取段落关键词

python中的synonyms库可以处理中文文本,例如找到词语的相近词,计算词语之间、句子之间的相似度,提取某段新闻的关键词等。

我们来看一个简单的示例。

1.安装与下载

首先要安装synonyms库,并下载词汇文件words.vector.gz。

pip install -U synonyms

图片

图片

python -c "import synonyms" #下载word vector文件

词汇文件下载地址:

https://gitee.com/chatopera/cskefu/attach_files/610602/download/words.vector.gz

#查看当前库的信息

synonyms.describe()#从描述中能够看到当前的词汇量。

2.寻找相近词

import synonyms #首次使用时会自动下载words.vector.gz

#synonyms.nearby(“str”, size = 10)

可以自动返回与该词语相近的词以及相关的程度(取值在0到1之间),size为相近词的个数,默认为10个。

print("快乐: ", synonyms.nearby("快乐"))

print("平凡: ", synonyms.nearby("平凡"))

快乐:  (['快乐', '欢乐', '幸福', '欢笑', '青春', '喜悦', '无忧无虑', '喜乐', '纯真', '圣洁'], [1.0, 0.7718689, 0.7449047, 0.67883134, 0.67068595, 0.6529962, 0.6448968, 0.6370579, 0.6242799, 0.6103234])
平凡:  (['平凡', '理想', '孤独', '默默无闻', '朴素', '纯洁', '平庸', '无私', '平凡人', '张扬'], [1.0, 0.6413613, 0.60000455, 0.5960809, 0.59234023, 0.57126236, 0.5700199, 0.5690233, 0.56774443, 0.54518956])

synonyms.display("财富",size=12)#打印12个相近词

'财富'近义词:

  1. 财富:1.0

  2. 储蓄:0.631402

  3. 社会财富:0.6189183

  4. 私人银行:0.56370497

  5. 投资理财:0.5611471

  6. 金融资产:0.55666083

  7. 银行存款:0.52110213

  8. 资产投资:0.5142404

  9. 增值:0.5110868

  10. 中产阶层:0.50663656

  11. 金融投资:0.50064766

  12. 创造财富:0.49771798

从结果中可以看到与“财富”相近的词语以及各词的分数。

3.计算两个句子的相关度

synonyms.compare()函数用于计算两个句子的相似度,越接近1表示相似度越高,seg选择是否对句子进行分词,默认true。

sen1 = "明月几时有?把酒问青天。"

sen2 = "举杯邀明月,对影成三人。"

r = synonyms.compare(sen1, sen2, seg=True)

print("sentence1:",sen1)

print("sentence2:",sen2)

print("相似度",r)

图片

图片

图片

4.获取词向量

synonyms.v(word)中输入具体的词语,可以查看该词语的数值向量形式。

print("蓝天",synonyms.v("蓝天"))

synonyms.sv(sentence , ignore=False)查看句子的向量,当句子为词表外的句子时,ignore=False会随机生成一个向量。

sentence1= "蓝天白云,青山绿水,还有清风吹斜阳。"

print(sentence1,synonyms.sv(sentence1,ignore=False))图片

5.中文分词

sentence2="我家院子里有两棵树,一棵是枣树,另一棵也是枣树。"

print(sentence2,synonyms.seg(sentence2))

分词后将得到词语以及其对应的词性。

(['我家', '院子', '里', '有', '两棵树', ',', '一棵', '是', '枣树', ',', '另', '一棵', '也', '是', '枣树', '。'], ['r', 'n', 'f', 'v', 'ns', 'x', 'm', 'v', 'n', 'x', 'r', 'm', 'd', 'v', 'n', 'x'])

6.提取关键词

synonyms.keywords(sentence [, topK=5, withWeight=False])

默认提取前5个重要的关键词。可以通过withWeight手动设置权重。比如提取某篇新闻的关键词。

sentence3 ="9月15日以来,台积电、高通、三星等华为的重要合作伙伴,只要没有美国的相关许可证,都无法供应芯片给华为,而中芯国际等国产芯片企业,也因采用美国技术,而无法供货给华为。目前华为部分型号的手机产品出现货少的现象,若该形势持续下去,华为手机业务将遭受重创。"

keywords = synonyms.keywords(sentence3)

print("sentence:",sentence3)

print("keywords",keywords)

keywords ['华为', '芯片', '手机', '15', '台积电']

设置参数topK=10,提取10个关键词。图片

THE END