当前位置: 首页 > wzjs >正文

网站建设开发收费网站可以做多少个网页

网站建设开发收费,网站可以做多少个网页,松原做网站的公司,织梦网站后台如何做百度优化目录 Python实例题 题目 代码实现 实现原理 马尔可夫链模型: 文本处理: 模型特性: 关键代码解析 模型训练 文本生成 分词与重组 使用说明 从文本文件训练并生成: 使用自定义起始词: 调整马尔可夫链阶数…

目录

Python实例题

题目

代码实现

实现原理

马尔可夫链模型:

文本处理:

模型特性:

关键代码解析

模型训练

文本生成

分词与重组

使用说明

从文本文件训练并生成:

使用自定义起始词:

调整马尔可夫链阶数:

保存和加载模型:

扩展建议

增强功能:

性能优化:

应用扩展:

质量改进:

Python实例题

题目

Python应用马尔可夫链算法实现随机文本生成

代码实现

import re
import random
import argparse
from collections import defaultdictclass MarkovTextGenerator:def __init__(self, order=2):"""初始化马尔可夫链生成器Args:order: 马尔可夫链的阶数,即使用多少个词作为前缀"""self.order = orderself.model = defaultdict(list)  # 马尔可夫模型:前缀 -> 可能的后续词列表self.start_words = []  # 可能的句子起始词def train(self, text):"""训练马尔可夫链模型Args:text: 用于训练的文本"""# 清理文本并分割成词words = self._tokenize(text)# 构建模型for i in range(len(words) - self.order):# 获取当前前缀(长度为order的词序列)prefix = tuple(words[i:i+self.order])# 获取后续词next_word = words[i + self.order]# 将后续词添加到前缀对应的列表中self.model[prefix].append(next_word)# 记录可能的句子起始词(如果前缀中的第一个词是句首词)if i == 0 or words[i-1] in ['.', '!', '?']:self.start_words.append(prefix)def _tokenize(self, text):"""将文本分割成词,并保留标点符号Args:text: 输入文本Returns:词列表"""# 使用正则表达式分割文本,保留标点符号words = re.findall(r'\w+|[^\w\s]', text)return wordsdef generate(self, length=20, seed=None):"""生成随机文本Args:length: 生成的词数seed: 用于生成的起始词,如果为None则随机选择Returns:生成的文本"""if not self.model:raise ValueError("模型尚未训练,请先调用train方法")# 如果没有提供种子,随机选择一个起始前缀if seed is None:if not self.start_words:prefix = random.choice(list(self.model.keys()))else:prefix = random.choice(self.start_words)else:# 尝试使用用户提供的种子seed_words = self._tokenize(seed)if len(seed_words) < self.order:raise ValueError(f"种子词数量必须至少为{self.order}")prefix = tuple(seed_words[-self.order:])if prefix not in self.model:raise ValueError(f"提供的种子 '{seed}' 不在训练数据中")# 生成文本result = list(prefix)for _ in range(length - self.order):# 如果当前前缀没有可能的后续词,随机选择一个新前缀if not self.model[prefix]:prefix = random.choice(list(self.model.keys()))result.extend(prefix[1:])  # 添加新前缀中除第一个词外的其他词else:# 随机选择一个可能的后续词next_word = random.choice(self.model[prefix])result.append(next_word)# 更新前缀prefix = prefix[1:] + (next_word,)# 将词列表组合成文本return self._detokenize(result)def _detokenize(self, words):"""将词列表重新组合成文本Args:words: 词列表Returns:组合后的文本"""text = ""for i, word in enumerate(words):# 如果是标点符号,直接添加if word in ['.', '!', '?', ',', ';', ':', '"', "'", ')', ']', '}']:text += word# 如果前一个字符是标点符号,在词前添加空格elif i > 0 and words[i-1] in ['(', '[', '{', '"', "'"]:text += wordelse:# 否则在词前添加空格text += " " + word# 去除开头的空格return text.strip()def save_model(self, filename):"""保存训练好的模型到文件Args:filename: 保存的文件名"""import picklewith open(filename, 'wb') as f:pickle.dump({'order': self.order,'model': self.model,'start_words': self.start_words}, f)@classmethoddef load_model(cls, filename):"""从文件加载训练好的模型Args:filename: 模型文件Returns:加载好的MarkovTextGenerator实例"""import picklewith open(filename, 'rb') as f:data = pickle.load(f)generator = cls(order=data['order'])generator.model = data['model']generator.start_words = data['start_words']return generatordef main():parser = argparse.ArgumentParser(description='马尔可夫链文本生成器')parser.add_argument('--input', help='输入文本文件')parser.add_argument('--model', help='模型文件(用于加载或保存)')parser.add_argument('--order', type=int, default=2, help='马尔可夫链阶数(默认2)')parser.add_argument('--length', type=int, default=50, help='生成文本长度(词数)')parser.add_argument('--seed', help='生成文本的起始词')parser.add_argument('--save', action='store_true', help='保存训练好的模型')args = parser.parse_args()if args.input:# 从文件读取文本try:with open(args.input, 'r', encoding='utf-8') as f:text = f.read()except Exception as e:print(f"无法读取文件: {e}")return# 创建并训练生成器generator = MarkovTextGenerator(order=args.order)generator.train(text)# 如果指定了保存选项,保存模型if args.save and args.model:generator.save_model(args.model)print(f"模型已保存到 {args.model}")elif args.model:# 从模型文件加载try:generator = MarkovTextGenerator.load_model(args.model)print(f"已从 {args.model} 加载模型")except Exception as e:print(f"无法加载模型: {e}")returnelse:print("请指定输入文本文件或模型文件")return# 生成并打印文本try:generated_text = generator.generate(length=args.length, seed=args.seed)print("\n生成的文本:")print(generated_text)except Exception as e:print(f"生成文本时出错: {e}")if __name__ == "__main__":main()    

实现原理

这个马尔可夫链文本生成器基于以下核心技术实现:

  • 马尔可夫链模型

    • 使用 n-gram 方法,通过前 n 个词预测下一个词
    • 模型使用字典存储,键为前缀词元组,值为可能的后续词列表
  • 文本处理

    • 保留标点符号的分词和重组
    • 支持自定义文本作为生成起点
  • 模型特性

    • 可配置的马尔可夫链阶数
    • 智能识别句子起始词
    • 支持模型保存和加载

关键代码解析

模型训练

def train(self, text):words = self._tokenize(text)for i in range(len(words) - self.order):prefix = tuple(words[i:i+self.order])next_word = words[i + self.order]self.model[prefix].append(next_word)# 记录可能的句子起始词if i == 0 or words[i-1] in ['.', '!', '?']:self.start_words.append(prefix)

文本生成

def generate(self, length=20, seed=None):if not self.model:raise ValueError("模型尚未训练")# 选择起始前缀if seed is None:if self.start_words:prefix = random.choice(self.start_words)else:prefix = random.choice(list(self.model.keys()))else:seed_words = self._tokenize(seed)if len(seed_words) < self.order:raise ValueError(f"种子词数量必须至少为{self.order}")prefix = tuple(seed_words[-self.order:])if prefix not in self.model:raise ValueError(f"提供的种子不在训练数据中")# 生成文本result = list(prefix)for _ in range(length - self.order):if not self.model[prefix]:prefix = random.choice(list(self.model.keys()))result.extend(prefix[1:])else:next_word = random.choice(self.model[prefix])result.append(next_word)prefix = prefix[1:] + (next_word,)return self._detokenize(result)

分词与重组

def _tokenize(self, text):words = re.findall(r'\w+|[^\w\s]', text)return wordsdef _detokenize(self, words):text = ""for i, word in enumerate(words):if word in ['.', '!', '?', ',', ';', ':', '"', "'", ')', ']', '}']:text += wordelif i > 0 and words[i-1] in ['(', '[', '{', '"', "'"]:text += wordelse:text += " " + wordreturn text.strip()

使用说明

从文本文件训练并生成

python markov_text_generator.py --input sample.txt --length 100

使用自定义起始词

python markov_text_generator.py --input sample.txt --seed "Once upon a time"

调整马尔可夫链阶数

python markov_text_generator.py --input sample.txt --order 3 --length 50

保存和加载模型

# 训练并保存模型
python markov_text_generator.py --input sample.txt --model model.pkl --save# 使用保存的模型生成文本
python markov_text_generator.py --model model.pkl --seed "The story"

扩展建议

  • 增强功能

    • 添加更多文本预处理选项(大小写处理、停用词过滤等)
    • 实现句子级生成,而非简单的词序列
    • 添加温度参数控制生成的随机性
  • 性能优化

    • 使用更高效的数据结构存储模型
    • 支持并行训练大规模文本
    • 添加生成缓存机制
  • 应用扩展

    • 实现特定领域的文本生成(诗歌、故事等)
    • 与深度学习模型结合提高生成质量
    • 开发交互式文本生成界面
  • 质量改进

    • 添加文本后处理,提高生成文本的连贯性
    • 实现更智能的句子结束判断
    • 支持多源文本混合训练

文章转载自:

http://nDcewxbx.tgwfn.cn
http://YZrd4Ei9.tgwfn.cn
http://nvi9I5yb.tgwfn.cn
http://m7T3O6ai.tgwfn.cn
http://tPi14vTc.tgwfn.cn
http://mm6oyFJr.tgwfn.cn
http://0wtozkg1.tgwfn.cn
http://X9GH6gyo.tgwfn.cn
http://jdC3VcOB.tgwfn.cn
http://GDR28iHT.tgwfn.cn
http://QwY6fAF5.tgwfn.cn
http://isyMXrhA.tgwfn.cn
http://dAq9wVSF.tgwfn.cn
http://OnZVxYmi.tgwfn.cn
http://HhYfJ2HN.tgwfn.cn
http://6xBQ1lqF.tgwfn.cn
http://Vmv81Q7W.tgwfn.cn
http://3ezRzvnf.tgwfn.cn
http://sFp82fOp.tgwfn.cn
http://JJgQqsTj.tgwfn.cn
http://tBWE69sX.tgwfn.cn
http://XU27LLNA.tgwfn.cn
http://a56oO10J.tgwfn.cn
http://b0KzDRmi.tgwfn.cn
http://ohuFBKBg.tgwfn.cn
http://g6Lhfq0I.tgwfn.cn
http://Ia2tYdAQ.tgwfn.cn
http://moTE5bE7.tgwfn.cn
http://kK4uy9OD.tgwfn.cn
http://AtQ5qDZq.tgwfn.cn
http://www.dtcms.com/wzjs/674804.html

相关文章:

  • 中国矿山建设网站做一个公众号多少钱
  • 做手机网站用什么程序好有没有女的做任务的网站
  • 网站制作软件是什么意思烟台网站建设给力臻动传媒
  • 网站建设 淄博网站建设开发流程
  • 谁有手机网站啊介绍一下网架网架厂家
  • 做淘宝优惠劵网站服务器配置网站建设与维护王欣
  • 微信 app 微网站 整合保险业网站建设
  • 网站设计分析报告建站赔补
  • 方案查一查网站app调用网站
  • 安徽池州做网站的公司999免费网站传奇
  • 网站开发搜索功能怎么实现淄博公司网站建设
  • 建设银行网站官网光谷网站建设公司
  • 自己做信息网站app推广接单
  • 网站建设与管理心得体会和总结设计拓者吧官网
  • 中型网站每天访问量吉安高端网站建设公司
  • 门户网站建设模板美橙互联网站备案
  • 怎么建立网站推广室内设计意向图网站
  • 网站建设得步骤做网站需要哪些程序员
  • 自己做网站需要主机吗新产品代理项目推荐
  • 自学做网站需要学会哪些有了域名 做网站
  • 科技vi设计电子商务seo是指什么意思
  • 快速seo整站优化排行数字媒体ui设计是做什么的
  • 网页设计与网站建设 作业北京电脑培训班零基础
  • 企业网站制作公司盈利郑州网站建设公司哪家专业好
  • 大型网站seo课程网站文件名优化
  • 高端酒店网站模板免费下载亚马逊seo是什么意思
  • 设计网站设计原则先进的网站建设
  • 公司网站建设基本流程wordpress视差插件
  • 免费的舆情网站不用下载直接打开常州外贸网站建设
  • 六站合一的应用场景好的提升设计师网站