python人工智能是什么意思_Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现...

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

自然语言处理(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) # 不懂生成器的话,就忽略这里

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 最好别分家之最简单的相似度实现 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器c的环境配置文件,配置linux服务器环境(jdk+tomcat+mysql+nginx+redis+svn+nexus的maven私服)...

一.安装jdk:1.远程连接工具我用的是xshell6;切换到root用户2.创建安装目录:创建安装目录3.将jdk上传到目录下,并解压:上传文件解压tar zxvf jdk-8u191-linux-x64.tar.gz文件解压后4.修改配置文件:vim /etc/…

Android studio如何写滚动视图

在布局文件里面的布局改为ScrollView(垂直滚动) 但是要注意,ScrollView只允许一个子元素,需要用一个LinearLayout嵌套作为它的子元素使用 加入后就有滚动效果了 还有一个是水平滚动 HorizontalScrollView

springboot启动_Spring boot启动原理解析

作者:平凡希链接:https://www.cnblogs.com/xiaoxi/p/7999885.html我们开发任何一个Spring Boot项目,都会用到如下的启动类SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringAppli…

PR高清60帧补帧教学附插件下载,目前最流畅的补帧教学

先说明一下,这个步骤是适合有点PR基础的人去观看的,小白的话可能看起来会有点懵逼 来了来了,直接输入干货 第一步:创建序列,不要直接拖入素材,序列要在设置-->编辑模式-->选为自定义-->时基--&g…

把一个dataset的表放在另一个dataset里面_现在开始:用你的Mac训练和部署一个图像分类模型...

可能有些同学学习机器学习的时候比较迷茫,不知道该怎么上手,看了很多经典书籍介绍的各种算法,但还是不知道怎么用它来解决问题,就算知道了,又发现需要准备环境、准备训练和部署的机器,啊,好麻烦…

Android studio的布局总结

首先我们的安卓的页面实际上的组件就是需要一些东西控制住他们 这些东西是什么呢,叫做布局管理器,一开始的开发中有常用的5款布局管理器 下面我来一一介绍其中的功能和一些关键字属性 1.relativelayout 相对布局管理器 属性:android:gra…

安装redis提示[test] error 2_安装PHP Redis扩展

安装PHP Redis扩展1、查看本机已经安装的Redis版本brew info redisredis: stable 5.0.7 (bottled), HEAD Persistent key-value database, with built-in net interface https://redis.io//usr/local/Cellar/redis/5.0.7 (13 files, 3.1MB) * Poured from bottle on 2020-02-19…

Android studio的监听器初学者要懂

首先,什么是监听器呢?监听器的作用是什么呢?我们如何去使用他? 1.什么是监听器:监听器的作用是什么呢? 监听器顾名思义,一旦你的按钮或者其他组件被你用例如鼠标点击,就会产生一个…

Android studio中获取按钮组的信息如何循环遍历

首先在XML文件中建立一个按钮 id 为bt3 在java文件中写入 RadioGroup rg2; 这是写在开头的全局变量 rg2 (RadioGroup) findViewById(R.id.rg_1);这里一定要进行初始化,否则会空指针异常Button bt (Button) findViewById(R.id.bt3);bt.setOnClickListener(new …

zincrby redis python_【Redis数据结构 序】使用redis-py操作Redis数据库

想要看更加舒服的排版、更加准时的推送关注公众号“不太灵光的程序员”每日八点有干货推送同时发布《【Redis数据结构 1序】1使用redis-py操作Redis数据库》本文依旧会对学习内容进行拆分,建议阅读时间基本保持10分钟内,想学习之前章节内容点击《你不了解…

python函数知识点总结_python函数map()和partial()的知识点总结

map()是python的一个内建函数, 他能够通过函数来处理序列,比如,我们相关一个数组[0,1,2,3,4,5]所有的数字都2 , 当然,我们可以这么做 old [0,1,2,3,4,5] new [] for it…

Android studio的UI组件

1.文本框组件 掌管文字大小&#xff0c;文字来源&#xff0c;文字是否以行的形式显示&#xff0c;对齐方式居中 9patch图片拉伸不变形&#xff0c;需要放在drawable中 <TextViewandroid:layout_width"wrap_content"android:layout_height"wrap_content"…

visual paradigm 表示选择关系_知识获取的新挑战—远程监督关系抽取

本文主要介绍远程监督关系抽取任务上两个最新的工作。远程监督&#xff08;Distantly Supervised&#xff09;是关系抽取&#xff08;Relation Extraction&#xff09;的一种主要实现方法。关系抽取是指获得文本中的三元组&#xff08;triple&#xff09;&#xff0c;包括实体对…

Android studio的Activity详解

Activity就相当于我们的手机界面&#xff0c;里面包含着各个组件 Activity 的4种状态 运行状态&#xff1a;屏幕可视&#xff0c;且可以进行操作 暂停状态&#xff1a;返回退出的时候&#xff0c;询问是否退出运行状态&#xff0c;此时属于暂停状态 ------------------------…

arraylist 的扩容机制_每天都用ArrayList,你读过它的源码么?

作者&#xff1a;陌北有棵树&#xff0c;玩Java&#xff0c;架构师社区合伙人&#xff01;【一】关于扩容如果没有指定初始容量&#xff0c;则设置为10/** * Default initial capacity. */private static final int DEFAULT_CAPACITY 10;ArrayList的扩容比较简单&#xff0c;容…

JAVA入门级教学之(IDEA工具的快捷键和简单设置)

1.字体font file-->settings-->输入font-->设置字体样式以及字号大小 2.快速生成main方法 psvm 3.快速输出Systm.out.println(); sout 4.删除一行 ctrly 5.怎么运行 代码删右键run 或者点击右上角箭头 shiftf10(不同电脑可能不一样) 6.左侧窗口中的列表怎么展开…

java selenium_selenium 常见面试题以及答案(Java版)

1.怎么 判断元素是否存在&#xff1f;判断元素是否存在和是否出现不同&#xff0c; 判断是否存在意味着如果这个元素压根就不存在&#xff0c; 就会抛出NoSuchElementException这样就可以使用try catch&#xff0c;如果catch到NoSuchElementException 就返回false2.如何判断元素…

关于HTML的盒子的一些小问题

最近在开发的时候发现一个小问题&#xff0c;<DIV>我们很熟悉的一个盒子元素 关于他的描述 1.按照我们正常人的思维逻辑 编写好一个DIV盒子&#xff0c;然后再在盒子里面添加边框border、内边距padding、内容&#xff0c;这是我们的思维逻辑 但是DIV的编写会随着你添加…

语义网络分析图怎么做_怎么去分辨化工壶,光说可能大家还是会有疑惑,所以做了几个图...

网友们经常会拿一些壶出来&#xff0c;拍图给我看&#xff0c;问我会不会是化工壶&#xff0c;说到底&#xff0c;还是不放心自己手头上的紫砂壶&#xff0c;怕对自身健康造成影响&#xff0c;在这里&#xff0c;小编特地编辑这一段&#xff0c;教大家怎么去分辨化工壶&#xf…

<input type=“text“ name=““ id=““/>中的name和id有什么区别?

name 是表单提交后&#xff0c;给后台处理程序区分不同的输入框。 例如 name 用户名 name ‘密码’&#xff0c;后台程序就会分别去处理用户名和密码。 而 id 通常给前台程序&#xff0c;例如 Javascript&#xff0c;CSS&#xff0c;让它去为不同 id 的输入框设置不同的响应动…