【Python】Markov text generator马尔科夫文字生成器
遍历一段文字,统计每个字后面出现的字和其次数,当前一个字确定的时候,计算后一个字出现的百分比,用这个百分比作为文字生成器中后一个字出现的概率进行文字生成
from random import randint def makeDict(text):
#替换换行符和引号
text = text.replace('\n', ' ')
text = text.replace('\“', '')
text = text.replace('\”', '') punc = [',', '。', '?', ';', ':', '!']
for symbol in punc:
text = text.replace(symbol, ' '+symbol+' ') words = [word for word in text if word != ''] wordict = {}
for i in range(1, len(text)):
if words[i-1] not in wordict:
wordict[words[i-1]] = {}
if words[i] not in wordict[words[i-1]]:
wordict[words[i-1]][words[i]] = 0
wordict[words[i-1]][words[i]] += 1 return wordict def wordLen(wordict):
sum = 0
for key, value in wordict.items():
sum += value
return sum def retriveRandomWord(wordict):
"""
感觉这个函数计算每个单词的机率的思路太帅了
:param wordict:
:return:
"""
randindex = randint(1, wordLen(wordict))
for key, value in wordict.items():
randindex -= value
if randindex <= 0:
return key with open('test.txt','r') as f:
t = f.read()
text = str(t)
wordict = makeDict(text) length = 200
chain = ''
currentword = '想'
for i in range(0, length):
chain += currentword
currentword = retriveRandomWord(wordict[currentword]) with open("res.txt",'w') as file:
file.write(chain)
print(chain)
这是利用《百年孤独》第一章的文字作为来源,生成的结果
——————————————————————————————————————————————————————————————————————
想发明把记得连同意地 自训练他完全村子 ,
来 乌苏娜和茄子和魔 衣衫褴楼的事长月里的大镜 来了 , ,
他完全 三枚殖民宜今还了恼人烟的概念头的诚实际上校站在梅尔加德斯教他另做了耐心得意地向他大葫 , ,
这些男人以后 但实际上校站在雨季的一个小时刻使送给政府 , 想证实了暑 , 霍·阿·布恩蒂亚还了 , , 。 。
帐篷门口 , , “科学家都盖在宅子和各部把这种理论 他告诫说:他的回来
————————————————————————————————————————————————————————————————————————
想发出的时候起 他带者两块磁铁 他所谓 。 , ,
在街道的最新开辟的想起父亲手里忙得喘不走到吃午饭的唯一的仪器 涉过山岭 。 。
说:他知道中间里的反 “只大镜 乌苏娜失败之后等待在村边搭起来踱去了一个月份
《指指瘦得厌烦了耐心 , “科学家的仪 , 沿着遍布恩蒂亚紧张的居民地努力 ,
霍·布恩蒂亚都有力 的马上 人的唯一座农舍走出来将会有力 向观众出的吉卜赛人 苍的回了自言自然停辍 今后 “
参考资料:《Python网络数据采集》P106
【Python】Markov text generator马尔科夫文字生成器的更多相关文章
- 隐马尔科夫模型(Hidden Markov Models)
链接汇总 http://www.csie.ntnu.edu.tw/~u91029/HiddenMarkovModel.html 演算法笔记 http://read.pudn.com/downloads ...
- Chapter 4 马尔科夫链
4.1 引言 现在要研究的是这样一种过程: 表示在时刻的值(或者状态),想对一串连续时刻的值,比如:,, ... 建立一个概率模型. 最简单的模型就是:假设都是独立的随机变量,但是通常这种假设都是没什 ...
- 马尔可夫随机场(Markov random fields) 概率无向图模型 马尔科夫网(Markov network)
上面两篇博客,解释了概率有向图(贝叶斯网),和用其解释条件独立.本篇将研究马尔可夫随机场(Markov random fields),也叫无向图模型,或称为马尔科夫网(Markov network) ...
- 隐马尔科夫模型python实现简单拼音输入法
在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...
- Atitit 马尔可夫过程(Markov process) hmm隐马尔科夫。 马尔可夫链,的原理attilax总结
Atitit 马尔可夫过程(Markov process) hmm隐马尔科夫. 马尔可夫链,的原理attilax总结 1. 马尔可夫过程1 1.1. 马尔科夫的应用 生成一篇"看起来像文章的 ...
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
上篇介绍了隐马尔科夫模型 本文给出关于问题3解决方法,并给出一个例子的python代码 回顾上文,问题3是什么, 下面给出,维比特算法(biterbi) algorithm 下面通过一个具体例子,来说 ...
- HMM隐马尔科夫算法(Hidden Markov Algorithm)初探
1. HMM背景 0x1:概率模型 - 用概率分布的方式抽象事物的规律 机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测. 概率模型(p ...
- 马尔科夫链蒙特卡洛(Markov chain Monte Carlo)
(学习这部分内容大约需要1.3小时) 摘要 马尔科夫链蒙特卡洛(Markov chain Monte Carlo, MCMC) 是一类近似采样算法. 它通过一条拥有稳态分布 \(p\) 的马尔科夫链对 ...
- 隐马尔科夫模型(hidden Markov Model)
万事开头难啊,刚开头确实不知道该怎么写才能比较有水平,这篇博客可能会比较长,隐马尔科夫模型将会从以下几个方面进行叙述:1 隐马尔科夫模型的概率计算法 2 隐马尔科夫模型的学习算法 3 隐马尔科夫模型 ...
随机推荐
- jquery实现城市选择器效果(二级联动)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Leapin' Lizards
Leapin' Lizards 题目大意: 在一个网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴 ...
- Weka开发[2]-分类器类
这次介绍如何利用weka里的类对数据集进行分类,要对数据集进行分类,第一步要指定数据集中哪一列做为类别,如果这一步忘记了(事实上经常会忘记)会出现“Class index is negative (n ...
- window.parent与window.opener的区别
有这样一个需求,弹出一个新窗口 并从该新页面的select选择框中选择需要的类别,再返回到之前的父窗口页面的某个文本框中.这里就要用到window.parent和window.opener 如题两种方 ...
- Direct2D
Direct2D Direct2D教程III——几何(Geometry)对象 摘要: 目前博客园中成系列的Direct2D的教程有1.万一的 Direct2D 系列,用的是Delphi 20092.z ...
- 传统的MVC模式
对于MVC模式,我们可以将可视化UI呈现,UI处理逻辑和业务逻辑分别定义在View,Controller,和Model中. 可视化UI呈现->View UI处理逻辑->Controller ...
- shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)
shell脚本兼容linux/unix与windows/cygwin的基础 :统一文本格式为:unix文本格式,即于LF为换行符(推荐方案) 在notepad上设置:编辑->档案格式转换-> ...
- ios-王云鹤 把UIdatePicker 嵌入到 UIActionSheet中
这里简单的解释一下: -(void) setUpDatePicker方法用于调用UIDatePicker -(void) DatePickerDoneClick:(id) sender方法用于实现隐藏 ...
- 怎么在Windows下安装Linux虚拟机
前提:①电脑有安装好VMware Workstation Pro虚拟机,没有的话点此下载并安装.②下载好CentOS-7-x86_64-DVD-1503-01镜像文件,没有点此下载密码:lomg. 1 ...
- SAP CRM 为用户创建业务合作伙伴并分配到组织单位
想要在SAP CRM的前台完成一些操作,需要登录的用户在系统中存在对应的业务合作伙伴才可以,某些情况下,还需要被分配到正确的公司.部门.职位.下面是相关的操作步骤. 本文假定读者已经拥有一个开发帐号. ...