Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现


Posted in Python onAugust 13, 2019

简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能中的另一项技术:

自然语言处理(NLP) : 大概意思就是 让计算机明白一句话要表达的意思,NLP就相当于计算机在思考你说的话,让计算机知道"你是谁","你叫啥","你叫什么名字"是一个意思

这就要做 : 语义相似度

接下来我们用Python大法来实现一个简单的自然语言处理

现在又要用到Python强大的三方库了

第一个是将中文字符串进行分词的库叫 jieba

pip install jieba

我们通常把这个库叫做 结巴分词 确实是结巴分词,而且这个词库是 made in china , 基本用一下这个结巴分词:

import jieba
key_word = "你叫什么名字" # 定义一句话,基于这句话进行分词
cut_word = jieba.cut(key_word) # 使用结巴分词中的cut方法对"你叫什么名字" 进行分词
print(cut_word) # <generator object Tokenizer.cut at 0x03676390> 不懂生成器的话,就忽略这里
cut_word_list = list(cut_word) # 如果不明白生成器的话,这里要记得把生成器对象做成列表
print(cut_word_list) # ['你', '叫', '什么', '名字']

测试代码就很明显了,它很清晰的把咱们的中文字符串转为列表存储起来了

第二个是一个语言训练库叫 gensim

pip install gensim

这个训练库很厉害, 里面封装很多机器学习的算法, 是目前人工智能的主流应用库,这个不是很好理解, 需要一定的Python数据处理的功底

import jieba
import gensim
from gensim import corpora
from gensim import models
from gensim import similarities
l1 = ["你的名字是什么", "你今年几岁了", "你有多高你胸多大", "你胸多大"]
a = "你今年多大了"
all_doc_list = []
for doc in l1:
 doc_list = [word for word in jieba.cut(doc)]
 all_doc_list.append(doc_list)
print(all_doc_list)
doc_test_list = [word for word in jieba.cut(a)]
# 制作语料库
dictionary = corpora.Dictionary(all_doc_list) # 制作词袋
# 词袋的理解
# 词袋就是将很多很多的词,进行排列形成一个 词(key) 与一个 标志位(value) 的字典
# 例如: {'什么': 0, '你': 1, '名字': 2, '是': 3, '的': 4, '了': 5, '今年': 6, '几岁': 7, '多': 8, '有': 9, '胸多大': 10, '高': 11}
# 至于它是做什么用的,带着问题往下看
print("token2id", dictionary.token2id)
print("dictionary", dictionary, type(dictionary))
corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]
# 语料库:
# 这里是将all_doc_list 中的每一个列表中的词语 与 dictionary 中的Key进行匹配
# 得到一个匹配后的结果,例如['你', '今年', '几岁', '了']
# 就可以得到 [(1, 1), (5, 1), (6, 1), (7, 1)]
# 1代表的的是 你 1代表出现一次, 5代表的是 了 1代表出现了一次, 以此类推 6 = 今年 , 7 = 几岁
print("corpus", corpus, type(corpus))
# 将需要寻找相似度的分词列表 做成 语料库 doc_test_vec
doc_test_vec = dictionary.doc2bow(doc_test_list)
print("doc_test_vec", doc_test_vec, type(doc_test_vec))
# 将corpus语料库(初识语料库) 使用Lsi模型进行训练
lsi = models.LsiModel(corpus)
# 这里的只是需要学习Lsi模型来了解的,这里不做阐述
print("lsi", lsi, type(lsi))
# 语料库corpus的训练结果
print("lsi[corpus]", lsi[corpus])
# 获得语料库doc_test_vec 在 语料库corpus的训练结果 中的 向量表示
print("lsi[doc_test_vec]", lsi[doc_test_vec])
# 文本相似度
# 稀疏矩阵相似度 将 主 语料库corpus的训练结果 作为初始值
index = similarities.SparseMatrixSimilarity(lsi[corpus], num_features=len(dictionary.keys()))
print("index", index, type(index))
# 将 语料库doc_test_vec 在 语料库corpus的训练结果 中的 向量表示 与 语料库corpus的 向量表示 做矩阵相似度计算
sim = index[lsi[doc_test_vec]]
print("sim", sim, type(sim))
# 对下标和相似度结果进行一个排序,拿出相似度最高的结果
# cc = sorted(enumerate(sim), key=lambda item: item[1],reverse=True)
cc = sorted(enumerate(sim), key=lambda item: -item[1])
print(cc)
text = l1[cc[0][0]]
print(a,text)

总结

以上所述是小编给大家介绍的Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现巡检系统(solaris)示例
Apr 02 Python
基于Python实现一个简单的银行转账操作
Mar 06 Python
Python数据结构之翻转链表
Feb 25 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
Python对切片命名的实现方法
Oct 16 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 #Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 #Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 #Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 #Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 #Python
Python字符串处理的8招秘籍(小结)
Aug 13 #Python
python实现批量修改服务器密码的方法
Aug 13 #Python
You might like
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
Python利用IPython提高开发效率
2016/08/10 Python
TensorFlow如何实现反向传播
2018/02/06 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
一道写SQL的面试题和答案
2013/11/19 面试题
学生实习自我鉴定
2013/10/11 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
委托证明范本
2014/11/25 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python
Vue的过滤器你真了解吗
2022/02/24 Vue.js