You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:30:01