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

马尔可夫链随机句子生成:如何设置for循环使含标点的单词作为字典键且值为空列表

问题:马尔可夫链生成中,含标点的单词无法设置为空列表值

我正在尝试编写代码开发一个马尔可夫链,用于从字符串生成随机句子。我已完成字符串拆分并正在进行逻辑验证,当前代码如下:

string = '''how much wood could a woodchuck chuck if a woodchuck could chuck wood? as much wood as a woodchuck could chuck if a woodchuck could chuck wood.'''
st_dict={}
# 我漏写了words的定义,实际应该是words = string.split()
for i in range(0, len(words)-1):
    #print(words)
    word=words[i]
    next_word=words[i+1]
    if word in ['.','?']:
        st_dict[word]=[]
    elif word in st_dict:
        st_dict[word].append(next_word)
    else:
        st_dict[word]=[next_word]
st_dict[words[-1]]=[]
print(st_dict)

我的需求是:任何包含标点的单词都应仅以空列表作为其对应的值,但目前无法实现该效果。我曾尝试在上述if语句外添加word not in ['.','?'... etc]的判断,但字符串中包含标点的单词仍会将下一个单词追加为其值。请问该如何解决这个问题?


解决方案

问题出在你的判断逻辑上:你当前检查的是word是否等于单独的标点符号(.或?),但实际字符串拆分后,标点是和单词绑定在一起的(比如wood?、wood.),所以这个条件永远不会触发,导致这些带标点的单词被当成普通单词处理,进而把下一个单词追加到它的列表里。

要解决这个问题,你需要修改判断逻辑,检测单词是否包含标点符号,而不是是否等于标点符号。同时记得补全words的定义(你当前代码里漏掉了words = string.split()这一步)。

修改后的代码如下:

string = '''how much wood could a woodchuck chuck if a woodchuck could chuck wood? as much wood as a woodchuck could chuck if a woodchuck could chuck wood.'''
words = string.split()  # 补全单词拆分步骤
st_dict = {}

punctuations = ['.', '?']  # 定义需要检测的标点集合

for i in range(len(words) - 1):
    word = words[i]
    next_word = words[i+1]
    
    # 判断当前单词是否包含任意标点
    if any(punct in word for punct in punctuations):
        st_dict[word] = []
    else:
        if word in st_dict:
            st_dict[word].append(next_word)
        else:
            st_dict[word] = [next_word]

# 统一处理最后一个单词:无论是否带标点,都设为空列表(无后续单词)
last_word = words[-1]
st_dict[last_word] = []

print(st_dict)

关键修改说明:

  • 标点检测逻辑:用any(punct in word for punct in punctuations)替代精确匹配,只要单词里包含指定标点,就将其对应值设为空列表。
  • 补全单词拆分:添加words = string.split()确保变量正确初始化。
  • 最后一个单词处理:不管最后一个单词是否带标点,都设为空列表,符合马尔可夫链的终止逻辑(没有后续单词可关联)。

这样修改后,所有包含.或?的单词(比如wood?、wood.)都会被正确映射到空列表,不会再追加下一个单词。

内容的提问来源于stack exchange,提问作者Veneratu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:02:42