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日期操作学习笔记
Oct 07 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
Django 前后台的数据传递的方法
Aug 08 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
python tornado微信开发入门代码
Aug 24 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
使用python创建Excel工作簿及工作表过程图解
May 27 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
Python中requests库的用法详解
Jun 05 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php学习之 数组声明
2011/06/09 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
Python 和 JS 有哪些相同之处
2017/11/23 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python批量爬取下载抖音视频
2019/06/17 Python
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
护士检查书
2014/01/17 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB