zoukankan      html  css  js  c++  java
  • 【Python】Markov text generator马尔科夫文字生成器

      遍历一段文字,统计每个字后面出现的字和其次数,当前一个字确定的时候,计算后一个字出现的百分比,用这个百分比作为文字生成器中后一个字出现的概率进行文字生成

     1 from random import randint
     2 
     3 
     4 def makeDict(text):
     5     #替换换行符和引号
     6     text = text.replace('
    ', ' ')
     7     text = text.replace('', '')
     8     text = text.replace('', '')
     9 
    10     punc = ['', '', '', '', ':', '!']
    11     for symbol in punc:
    12         text = text.replace(symbol, ' '+symbol+' ')
    13 
    14     words = [word for word in text if word != '']
    15 
    16     wordict = {}
    17     for i in range(1, len(text)):
    18         if words[i-1] not in wordict:
    19             wordict[words[i-1]] = {}
    20         if words[i] not in wordict[words[i-1]]:
    21             wordict[words[i-1]][words[i]] = 0
    22         wordict[words[i-1]][words[i]] += 1
    23 
    24     return wordict
    25 
    26 
    27 def wordLen(wordict):
    28     sum = 0
    29     for key, value in wordict.items():
    30         sum += value
    31     return sum
    32 
    33 
    34 def retriveRandomWord(wordict):
    35     """
    36     感觉这个函数计算每个单词的机率的思路太帅了
    37     :param wordict:
    38     :return:
    39     """
    40     randindex = randint(1, wordLen(wordict))
    41     for key, value in wordict.items():
    42         randindex -= value
    43         if randindex <= 0:
    44             return key
    45 
    46 with open('test.txt','r') as f:
    47     t = f.read()
    48 text = str(t)
    49 wordict = makeDict(text)
    50 
    51 length = 200
    52 chain = ''
    53 currentword = ''
    54 for i in range(0, length):
    55     chain += currentword
    56     currentword = retriveRandomWord(wordict[currentword])
    57 
    58 with open("res.txt",'w') as file:
    59     file.write(chain)
    60 print(chain)

    这是利用《百年孤独》第一章的文字作为来源,生成的结果

    ——————————————————————————————————————————————————————————————————————

    想发明把记得连同意地 自训练他完全村子 ,
    来 乌苏娜和茄子和魔 衣衫褴楼的事长月里的大镜 来了 , ,
    他完全    三枚殖民宜今还了恼人烟的概念头的诚实际上校站在梅尔加德斯教他另做了耐心得意地向他大葫 , ,
    这些男人以后 但实际上校站在雨季的一个小时刻使送给政府 , 想证实了暑 , 霍·阿·布恩蒂亚还了 , , 。 。
    帐篷门口 , , “科学家都盖在宅子和各部把这种理论 他告诫说:他的回来

    ————————————————————————————————————————————————————————————————————————

    想发出的时候起 他带者两块磁铁 他所谓 。 , ,
    在街道的最新开辟的想起父亲手里忙得喘不走到吃午饭的唯一的仪器 涉过山岭 。 。
    说:他知道中间里的反 “只大镜  乌苏娜失败之后等待在村边搭起来踱去了一个月份
    《指指瘦得厌烦了耐心 , “科学家的仪 , 沿着遍布恩蒂亚紧张的居民地努力 ,
    霍·布恩蒂亚都有力 的马上 人的唯一座农舍走出来将会有力 向观众出的吉卜赛人 苍的回了自言自然停辍 今后 “

    参考资料:《Python网络数据采集》P106

  • 相关阅读:
    springboot2 + prometheus + grafana 监控整合
    vs code 快捷键总结
    java8 concurrecy
    java8 localdatetime timestamp 转换
    有意思的网站
    评价搜索引擎质量
    转载一篇文章
    csdn 站点使用
    百度站点平台
    好的文章聚合站点
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6280244.html
Copyright © 2011-2022 走看看