一、我们可以利用马尔可夫的原理来生成文本:
即我们在日常说话的时候,每一个字总是与上下文存在关联性的,譬如在正常语法中,“我”字的后面可能是“们”也可能是“是”,绝对不可能是“我”“你”等等。因而我们可以根据提供的训练集语法文本数据来生成新的文本,根据前两个字来生成第三字,从而实现文本生成
二、在实现上,我们分两个部分:1.将训练集数据做处理,记录每两个字对应第三个字的概率;2.通过1部分进行语句的生成
class Markov(object):
def __init__(self , content, cache,secondword):
self.cache = cache
self.content = content
self.words = self.file_to_words()
self.word_size = len(self.words)
self.secondword = secondword
self.database()
cache = self.cache
secondword = self.secondworddef file_to_words(self):
words=[]
for z in self.content:
words.append(z)
return wordsdef database(self):
for w1,w2,w3 in self.triples():
key=(w1,w2)if self.i == 0:
self.cache['START'] = self.cache.get('START',[])+[w1]
self.secondword[w1] = self.secondword.get(w1,[])+[w2]
elif self.i == self.word_size-3:
self.cache['END'] = self.cache.get('END',[])+[w3]
elif self.i == 0:
self.cache['START'] = self.cache.get('START',[])+[w1]if key in self.cache:
self.cache[key].append(w3)
else:
self.cache[key] = [w3]def triples(self):
if len(self.words)<3:
return
for i in range(len(self.words)-2):
self.i=i
yield (self.words[i],self.words[i+1],self.words[i+2])
1.在这里我们实现的是第一步,在这里我们将传入的字句进行逐字的切分。使用特定的结构存储首两字与第三字的关系。
例:(我,们):是,要,会
其中值得留意的是,我们须对每句话的开头字和结束字进行特别的处理和记录,即:
START:我,你,他
END:。,!,啊
当此部完成后,我们的数据结构里则已把训练集的训练已经完成
def generate_danmu (cache,secondword):
generated = []
danmu=''
while True:
if not generated:
words = cache['START']
w1 = random.choice(words)
words = secondword[w1]
w2 = random.choice(words)
generated.append(w1)
elif generated[-1] in cache['END']:
break
####need to add simulated annealing mehtod to keep generateelse:
w1,w2 = w2,random.choice(cache[(w1, w2)])
generated.append(w2)
for s in generated:
danmu=danmu+s
return danmu
【pytho|Python 二阶马尔可夫实现简易文本内容生成】2.对于已经完成的存储部分,我们从START里选取开始字进行生成,并且在END字时停止,则可以完成文本生成了
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)