【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 隐马尔科夫模型 ...
随机推荐
- 迟到的 WPF 学习 —— 路由事件
1. 理解路由事件:WPF 通过事件路由(event routing)概念增强了传统的事件执行的能力和范围,允许源自某个元素的事件由另一个元素引发,例如,事件路由允许工具栏上的一个按钮点击的事件在被代 ...
- 随便讲讲XSS攻击
作为一个前端工程师,XSS漏洞不应该只是安全部门的工作.在项目上马的时候就应该对可能涉及的安全问题有所预防才是有一个好前端.- - 什么是XSS •跨站脚本攻击(Cross-site script ...
- YARN之上的大数据框架REEF:微软出品,是否值得期待?
YARN之上的大数据框架REEF:微软出品,是否值得期待? 摘要:微软即将开源大数据框架REEF,REEF运行于Hadoop新一代资源管理器YARN的上层.对于机器学习等在数据传输.任务监控和结果 ...
- C#线程同步(转)
线程同步 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行.对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应.对于服务器应用程序,多线程处理提供了用不 ...
- Android应用中使用AsyncHttpClient来异步网络数据
首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载 http://download.csdn.net/detail/xujinyang1234/5767419 测试的Ac ...
- AS代码优化和Flex应用程序的性能
1.在局部变量够用时,不要使用全局变量.类静态变量也要少用.全局变量是开发者的恶梦.实在需要全局变量的话,我建议使用singleton设 计模式来进行管理. 2.读取数组中的数据,尽量使用for in ...
- 第三届蓝桥杯Java高职组决赛第一题
题目描述: 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字. 这个算式有多少种可能的正确填写方法? 173 + 286 = 459 295 + 173 = ...
- 横瓜先生关于如何利用MYSQL数据库设计CMS系统处理100亿级TB规模的数据量
遥执乾坤(44758121) 18:21:23 mysql据说只能使用一个索引,我这里几乎所有字段都有索引. 但每个字段就算用索引,也需要扫描至少100w以上记录. 横瓜(601069289) 1 ...
- phper談談最近重構代碼的感受(2)
重构代码更多的是对程序的可读性和可扩展性上做一些优化. 首先我对可读性进行细化.借鉴大神川山甲的重构系列文http://www.cnblogs.com/baochuan/archive/2012/03 ...
- web打印小结
项目中有个需求是将winform客户端的打印,移到网页上由客户自行打印,打印要求是根据一定的格式实现套打. 当时的解决方案是使用PDF打印: 1. 准备好套打格式的底图: 2.打开底图,将动态内容画到 ...