Python实现文章自动生成


  下面的Python程序实现了通过从网页抓取一篇文章,然后根据这篇文章来生成新的文章,这其中的原理就是基于概率统计的文本分析。
  过程大概就是网页抓取数据->统计分析->生成新文章。网页抓取数据是通过BeautifulSoup库来抓取网页上的文本内容。统计分析这个首先需要使用ngram模型来把文章进行分词并统计频率。因为文章生成主要依据马尔可夫模型,所以使用了2-gram,这样可以统计出一个单词出现在另一个单词后的概率。生成新文章是基于分析大量随机事件的马尔可夫模型。随机事件的特点是在一个离散事件发生之后,另一个离散事件将在前一个事件的条件下以一定的概率发生。

from urllib.request import urlopen
from random import randint
from bs4 import BeautifulSoup
import redef wordListSum(wordList):sum = 0for word, value in wordList.items():sum = sum + valuereturn sumdef retrieveRandomWord(wordList):randomIndex = randint(1, wordListSum(wordList))for word, value in wordList.items():randomIndex -= valueif randomIndex <= 0:return worddef buildWordDict(text):text = re.sub('(\n|\r|\t)+', " ", text)text = re.sub('\"', "", text)punctuation = [',', '.', ';', ':']for symbol in punctuation:text = text.replace(symbol, " " + symbol + " ")words = text.split(' ')words = [word for word in words if word != ""]wordDict = {}for i in range(1, len(words)):if words[i-1] not in wordDict:wordDict[words[i-1]] = {}if words[i] not in wordDict[words[i-1]]:wordDict[words[i-1]][words[i]] = 0wordDict[words[i-1]][words[i]] = wordDict[words[i-1]][words[i]] + 1return wordDictdef randomFirstWord(wordDict):randomIndex = randint(0, len(wordDict))return list(wordDict.keys())[randomIndex]html = urlopen("http://www.guancha.cn/america/2017_01_21_390488_s.shtml")
bsObj = BeautifulSoup(html, "lxml")
ps = bsObj.find("div", {"id": "cmtdiv3523349"}).find_next_siblings("p");
content = ""
for p in ps:content = content + p.get_text()
text = bytes(content, "UTF-8")
text = text.decode("ascii", "ignore")
wordDict = buildWordDict(text)length = 100
chain = ""
currentWord = randomFirstWord(wordDict)
for i in range(0, length):chain += currentWord + " "currentWord = retrieveRandomWord(wordDict[currentWord])print(chain)

buildWordDict(text)函数接收文本内容,生成的内容如下

{‘itself’: {‘,’: 1}, ‘night’: {‘sky’: 1}, ‘You’: {‘came’: 1, ‘will’: 1}, ‘railways’: {‘all’: 1}, ‘government’: {‘while’: 1, ‘,’: 1, ‘is’: 1}, ‘you’: {‘now’: 1, ‘open’: 1, ‘down’: 1, ‘with’: 1, ‘.’: 6, ‘,’: 1, ‘that’: 1},

主要就是生成一个字典,键是文章中所有出现的词语,值其实也是一个字典,这个字典是所有直接出现在键后边的词语及其出现的频率。这个函数就是ngram模型思想的运用。
retrieveRandomWord(wordList)函数的wordList代表的是出现在上一个词语后的词语列表及其频率组成的字典,然后根据统计的概率随机生成一个词。这个函数是马尔可夫模型的思想运用。

然后运行这个程序会生成一个长度为100的文章,如下面所示

fail . We will stir ourselves , but we will never before . Do not share one heart and pleasant it back our jobs . We are infused with the orderly and railways all of the gangs and robbed our jobs for their success will determine the civilized world . We will their success will be a great men and highways and millions to all bleed the world . It belongs to great national effort to defend our products , constantly complaining , D . We will be ignored again . It belongs to harness the expense of America .

生成的文章看起来语法混乱,这也难怪,因为只是抓取分析统计了一篇的文章。我想如果可以抓取足够多的英文文章,数据集足够大那么语法准确度会大大提高。

Python实现文章自动生成相关推荐

  1. HelloDjango 第 10 篇:小细节 Markdown 文章自动生成目录,提升阅读体验

    目录 在文中插入目录 在页面的任何地方插入目录 处理空目录 美化标题的锚点 URL 作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 上 ...

  2. Python PaddleNLP实现自动生成虎年藏头诗

    这篇文章主要介绍了利用Python PaddleNLP实现自动生成虎年藏头诗功能,文中的示例代码讲解详细,感兴趣的同学可以跟随小编一起试一试.Python编程学习资料点击免费领取 目录 1.paddl ...

  3. python数据字典ppt_Python3自动生成MySQL数据字典的markdown文本的实现

    为啥要写这个脚本 五一前的准备下班的时候,看到同事为了做数据库的某个表的数据字典,在做一个复杂的人工操作,就是一个字段一个字段的纯手撸,那速度可想而知是多么的折磨和锻炼人的意志和耐心,反正就是很耗时又 ...

  4. Python: Git Log自动生成Release Notes,并调用Outlook发送至邮件

    Python: Git Log自动生成Release Notes,并调用Outlook发送至邮件 主要功能 先上图 生成ReleaseNotes 邮件: 生成ReleaseNotes Text: 关键 ...

  5. 关键词文章自动生成的四大要点

    关键词文章自动生成是我们很多网站和自媒体使用的文章素材获取方式,是我们获取素材进行二次创作的不错途径.怎样让我们的网站的文章更受搜索引擎和用户的欢迎,并获得不错的排名是我们SEOER需要考虑的. 文章 ...

  6. 2022-11-28关键词扩充,文章自动生成,采集php源码,自动配图源码,SEO提高收录权重无限长尾词

    2022-11-28关键词扩充,文章自动生成,采集php源码,自动配图源码,SEO提高收录权重无限长尾词 本次 主要讲解 文章采集 SEO 关键词 扩充 自动生成文章等 提高 收录 提高 权重 视频 ...

  7. 用python写一个自动生成春联的软件,打包exe

    文章目录 唠叨一下 效果展示 代码 打包exe可执行文件 唠叨一下 最近不是快过年了,Python写对联挺火的,但是代码又不是人人都用,那就直接写个界面打包一下呗~ 主要实现只要运行后输入上联下联.横 ...

  8. 怎么自学python自动化测试-python自动化测试如何自动生成测试用例?

    传统的用例需要测试或者开发人员将用户的操作用代码表示出来,通过断言判断是否和预期一致,写测试用例也占用了部分时间,加上版本迭代测试用例的维护成本也较高,于是基于无埋点的需求相结合来检测埋点,及时告警, ...

  9. 如何用python自动改试卷_利用Python和Jinja2自动生成试卷

    一.概述 Jinja2是Python 3下一个被广泛应用的模版引擎,它的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能 ...

最新文章

  1. Logstash在Linux上安装部署
  2. poj3581Sequence(后缀数组)
  3. 【自动驾驶】19.自动驾驶各个坐标系
  4. MIUI 10 Android 原生字体,[教程] MIUI10全局字体替换教程,了解一下?
  5. 编写你的第一个 Django 应用,第 7 部分
  6. 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)
  7. php获取手机目录,php如何获取手机型号
  8. php 编译原理,php编译原理 - Robin3D的个人页面 - OSCHINA - 中文开源技术交流社区
  9. pyautogui获取鼠标位置及循环点击指定位置按钮
  10. Oracle 18c十大新特性
  11. openwrt 抓取流量包
  12. win10 C盘满 清理终极大法
  13. sqar+matlab,基于MATLAB的数字图像预测压缩编码
  14. 2021 计算机 保研经历 保研经验贴 保研知识扫盲 保研时间线(合肥工业大学 软件工程 rk4/165,211 3%)
  15. mac_命令行删除Git本地库
  16. linux(centos)内核升级
  17. 接口 索引签名 接口与类型别名的异同 接口的继承 函数接口
  18. SQL Server 重新组织生成索引
  19. 计算机专业 排名 国际,计算机专业世界大学排名ARWU
  20. 破解大数据孤岛化 SaaS主流厂商共建开放标准

热门文章

  1. Using the five elements of fashion colors to create the best feng shui in auspicious Home
  2. 【docker-jenkins搭建】docker的jenkins容器java版本(四)
  3. 【ICNP2020】6Fit-A-Part: A Protocol for Physical Distancing on a Custom Wearable Device论文解读
  4. Path Planning for UAV Ground Target Tracking via Deep Reinforcement Learning(IEEE Access-2020)
  5. 康佳电视显示服务器连接异常,康佳电视五大常见故障及解决方法
  6. IBM笔记本故障经历分享 - 都是散热惹的祸
  7. Ruby和其它类似语言的比较
  8. 考研英语近义词与反义词·十二
  9. 数据表(一) - 数据表的种类
  10. mysql 重复航_mysql