我用了100行Python代码,实现了与女神尬聊微信(附代码)

作者&投稿:邱翟 (若有异议请与网页底部的电邮联系)
~

朋友圈很多人都想学python,有一个很重要的原因是它非常适合入门。对于 人工智能算法 的开发,python有其他编程语言所没有的独特优势, 代码量少 ,开发者只需把精力集中在算法研究上面。

本文介绍一个用python开发的,自动与美女尬聊的小软件。以下都是满满的干货,是我工作之余时写的,经过不断优化,现在分享给大家。那现在就让我们抓紧时间开始吧!


准备:

编程工具IDE:pycharm

python版本: 3.6.0

首先新建一个py文件,命名为:ai_chat.py

PS: 以下五步的代码直接复制到单个py文件里面就可以直接运行。为了让读者方便写代码,我把代码都贴出来了,但是排版存在问题,我又把在pycharm的代码排版给截图出来。


第一步: 引入关键包

简单介绍一下上面几个包的作用: pickle 包 是用来对数据序列化存文件、反序列化读取文件,是人类不可读的,但是计算机去读取时速度超快。(就是用记事本打开是乱码)。 而 json包 是一种文本序列化,是人类可读的,方便你对其进行修改(记事本打开,可以看到里面所有内容,而且都认识。) gensim 包 是自然语言处理的其中一个python包,简单容易使用,是入门NLP算法必用的一个python包。 jieba包 是用来分词,对于算法大咖来说效果一般般,但是它的速度非常快,适合入门使用。


以上这些包,不是关键,学习的时候,可以先跳过。等理解整个程序流程后,可以一个一个包有针对性地去看文档。


第二步:静态配置

这里path指的是对话语料(训练数据)存放的位置,model_path是模型存储的路径。

这里是个人编程的习惯,我习惯把一些配置,例如:文件路径、模型存放路径、模型参数统一放在一个类中。当然,实际项目开发的时候,是用config 文件存放,不会直接写在代码里,这里为了演示方便,就写在一起,也方便运行。

第三步: 编写一个类,实现导数据、模型训练、对话预测一体化

首次运行的时候,会从静态配置中读取训练数据的路径,读取数据,进行训练,并把训练好的模型存储到指定的模型路径。后续运行,是直接导入模型,就不用再次训练了。

对于model类,我们一个一个来介绍。

initialize() 函数和 __init__() 函数 是对象初始化和实例化,其中包括基本参数的赋值、模型的导入、模型的训练、模型的保存、最后返回用户一个对象。


__train_model() 函数,对问题进行分词,使用 gesim 实现词袋模型,统计每个特征的 tf-idf , 建立稀疏矩阵,进而建立索引。

__save_model() 函数 和 __load_model() 函数 是成对出现的,很多项目都会有这两个函数,用于保存模型和导入模型。不同的是,本项目用的是文件存储的方式,实际上线用的是数据库

get_answer() 函数使用训练好的模型,对问题进行分析,最终把预测的回答内容反馈给用户。


第四步:写三个工具类型的函数,作为读写文件。

其中,获取对话材料,可以自主修改对话内容,作为机器的训练的数据。我这里只是给了几个简单的对话语料,实际上线的项目,需要大量的语料来训练,这样对话内容才饱满。


这三个工具函数,相对比较简单一些。其中 get_data() 函数,里面的数据是我自己编的,大家可以根据自己的习惯,添加自己的对话数据,这样最终训练的模型,对话方式会更贴近自己的说话方式。


第五步: 调用模型,进行对话预测

主函数main(), 就是你整个程序运行的起点,它控制着所有步骤。


运行结果:


程序后台运行结果:


如果有疑问想获取源码( 其实代码都在上面 ),可以后台私信我,回复:python智能对话。 我把源码发你。最后,感谢大家的阅读,祝大家工作生活愉快!



如何有效的学习Python呢?
答:比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。三、所以Python是一种相当高级的语言。1、你也许会问,代码少还不好?代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。2、那是不是越低级的程序越难学,越高级...

Python为什么叫爬虫?
答:Python为什么叫爬虫?Python作为一门编程语言而言纯粹的自由软件,以简洁清晰的语法和强制使用空白符进行语句缩进的特点从而深受程序员的喜爱。用不同编程语言完成一个任务:c语言一共要写1000行代码;java要写100行;Python则只需要写20行的代码。若使用Python来完成编程任务编写代码量更少,代码简洁简短且...

python新手代码是什么?
答:面向对象、解释型、弱类型的脚本语言,它也是一种功能强大而完善的通用型语言。相比其他编程语言(比如 Java),Python 代码非常简单,上手非常容易。比如我们要完成某个功能,如果用 Java 需要 100 行代码,但用 Python 可能只需要 20 行代码,这是 Python 具有巨大吸引力的一大特点。Python 的语法非常...

如何用Python做爬虫
答:爬取豆瓣的时候,我总共用了100多台机器昼夜不停地运行了一个月。想象如果只用一台机子你就得运行100个月了...那么,假设你现在有100台机器可以用,怎么用python实现一个分布式的爬取算法呢?我们把这100台中的99台运算能力较小的机器叫作slave,另外一台较大的机器叫作master,那么回顾上面代码中的...

Python有什么优势?
答:2. 功能强大:Python拥有丰富的标准库,可以实现各种复杂的任务;3. 高效:Python可以实现高效的程序,可以节省开发时间;4. 可移植性:Python代码可以在多个平台上运行,可以轻松移植到其他系统;5. 开源免费:Python是开源免费的,可以免费使用;6. 可扩展性:Python可以使用C/C++语言扩展,可以提高程序...

...需要用到python中的那些内容,具体是怎么操作的?
答:但是我更喜欢用ix,因为它更稳定一些。假设我们需数据第一列的前5行,我们有: print df.ix[:, 0].head() # OUTPUT 0 1243 1 4158 2 1787 3 17152 4 1266 Name: Abra, dtype: int64 5 顺便提一下,Python的索引是从0开始而非1。为了取出从11到20行的前3列数据,我们有 print df.ix[10:20, 0:...

python能做什么
答:python的用途:Python的优势有必要作为第一步去了解,Python作为面向对象的脚本语言,优势就是数据处理和挖掘,这也注定了它和AI、互联网技术的紧密联系。网络爬虫。顾名思义,从互联网上爬取信息的脚本,主要由urllib、requests等库编写,实用性很强,小编就曾写过爬取5w数据量的爬虫。在大数据风靡的时代...

知道一个文本中某些行的行号,怎样用python直接读出来呢?如只想读出第1...
答:1.python中只有seek能跳跃的读,但是是按照字节来的,如果你的文本每一行都是一样的长度的话倒是可以。f.seek(99*n)之后再f.readline()2.如果不知道每行长度的话,那么就循环100次readline()吧,这个总比直接readlines()好,如果全部长1万行,这样也只读了100行,readlines()却要读10000行。3....

写一个20行以上的python简单代码
答:class Price: ticket_d = 100 ticket_w = ticket_d*1.2 def rq(self): self.a = int(input('请输入是平日还是周末(平日:1/周末:0):')) if self.a == 0: self.p = self.ticket_w if self.a == 1: self.p = self.ticket_d def pj(self): ...

如何理解 Python
答:比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。所以Python是一种相当高级的语言。你也许会问,代码少还不好?代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。那是不是越低级的程序越难学,越高级的程序越简单...