如何让Python马尔可夫生成器执行400次并将结果逐行输出到文本文件
代码修改方案
核心修改点
- 补全缺失的
random、sys模块导入 - 修复
readFile函数无返回值的问题,确保词库能正确加载 - 调整马尔可夫链实例构建逻辑,仅初始化1次提升运行效率
- 新增去重逻辑,用集合存储生成结果,确保没有重复单词
- 新增文件写入逻辑,生成的单词逐行写入输出文件
- 支持自定义生成数量、输入输出文件路径
完整可运行代码
import random import sys # 可配置参数,根据需求修改即可 GENERATE_COUNT = 400 # 需要生成的不重复单词数量 INPUT_SEED_FILE = "input.txt" # 种子词库路径 OUTPUT_FILE = "generated_words.txt" # 输出文件路径 # 读取输入种子词库 def readFile(input_path): fileObj = open(input_path, "r", encoding="utf-8") words = fileObj.read().splitlines() fileObj.close() return [w.strip() for w in words if w.strip()] # 过滤空行 class Mdict: def __init__(self): self.d = {} def __getitem__(self, key): if key in self.d: return self.d[key] else: raise KeyError(key) def add_key(self, prefix, suffix): if prefix in self.d: self.d[prefix].append(suffix) else: self.d[prefix] = [suffix] def get_suffix(self,prefix): l = self[prefix] return random.choice(l) class MName: def __init__(self, words, chainlen = 2): """ 传入读取到的词库构建字典 """ if chainlen > 10 or chainlen < 1: print ("Chain length must be between 1 and 10, inclusive") sys.exit(0) self.mcd = Mdict() self.chainlen = chainlen for l in words: s = " " * chainlen + l for n in range(0,len(l)): self.mcd.add_key(s[n:n+chainlen], s[n+chainlen]) self.mcd.add_key(s[len(l):len(l)+chainlen], "\n") def New(self): """ 生成新单词 """ prefix = " " * self.chainlen name = "" suffix = "" while True: suffix = self.mcd.get_suffix(prefix) if suffix == "\n" or len(name) > 9: break else: name = name + suffix prefix = prefix[1:] + suffix return name.capitalize() if __name__ == "__main__": # 加载词库,仅初始化一次马尔可夫链 seed_words = readFile(INPUT_SEED_FILE) generator = MName(seed_words) generated = set() # 生成指定数量的不重复单词 while len(generated) < GENERATE_COUNT: new_word = generator.New() # 额外过滤过短的无效单词,可根据需求调整 if len(new_word) >= 2: generated.add(new_word) # 逐行写入输出文件 with open(OUTPUT_FILE, "w", encoding="utf-8") as f: for word in generated: f.write(f"{word}\n") print(f"已成功生成{GENERATE_COUNT}个不重复单词,保存至{OUTPUT_FILE}")
使用说明
直接修改代码开头的三个可配置参数即可:
- 调整
GENERATE_COUNT的值即可修改生成单词的总数量 - 修改
INPUT_SEED_FILE指定你的种子词库路径 - 修改
OUTPUT_FILE指定输出文件的保存路径
运行脚本后,生成的所有不重复单词会逐行写入输出文件,你可以直接在主程序中读取该文件加载结果。
内容的提问来源于stack exchange,提问作者Meep the Changeling
相关产品推荐
相关产品推荐

