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

如何从句子生成符合连续词长度规则的指定键值对字典

嘿,我来一步步教你怎么生成符合要求的字典,完全贴合你描述的规则:

第一步:先处理文本,只保留终止标点前的有效内容

首先得把句子里终止标点(句号、问号、冒号、感叹号)后面的内容全部砍掉,只留前面的有效部分。比如如果原句是"The best bballs team is the NYCC State Wa! Let's keep going.",我们就只保留到感叹号之前的部分:"The best bballs team is the NYCC State Wa"。

第二步:遍历连续单词对,筛选符合长度规则的键值

接下来要逐个检查句子里的每一对连续单词:如果后一个单词的长度刚好比前一个大1(也就是你说的键是长度x的单词,值是长度x+1的单词),就把前一个单词作为键,后一个单词加到对应的值里。要是同一个键后面跟着多个符合要求的单词,就把它们存成元组。

用Python实现的代码示例

def build_target_dict(input_sentence):
    # 定义所有需要识别的终止标点
    stop_puncts = {'.', '?', ':', '!'}
    # 截断文本到第一个终止标点的位置
    for pos, char in enumerate(input_sentence):
        if char in stop_puncts:
            input_sentence = input_sentence[:pos]
            break
    # 把文本拆成单词列表(这里用简单的空格分割,要是需要处理复杂分词可以用NLTK之类的工具)
    word_list = input_sentence.strip().split()
    # 初始化结果字典
    result = {}
    # 遍历每一对连续单词
    for i in range(len(word_list) - 1):
        current_word = word_list[i]
        next_word = word_list[i+1]
        # 检查长度是否符合:后一个单词长度 = 前一个 +1
        if len(next_word) == len(current_word) + 1:
            # 处理重复键的情况:如果键已存在,就追加到元组;不存在就新建元组
            if current_word in result:
                result[current_word] += (next_word,)
            else:
                result[current_word] = (next_word,)
    return result

# 测试一下
sample_text = "The best coach bballs team is the NYCC State Wa? Extra words here."
print(build_target_dict(sample_text))
# 假设"best"长度是4,"coach"长度是5(4+1),那输出里就会有{'best': ('coach',)}这样的键值对

几个需要注意的细节

  • 分词的灵活性:上面的代码用split()按空格分词,要是你需要处理带标点的单词(比如"don't"、"hello,"),可以用专业的分词库(比如Python的nltk.word_tokenize)来提取更准确的纯单词。
  • 重复键的处理:如果同一个键后面跟着多个符合长度要求的单词,我们用元组存储值(因为元组不可变,适合作为字典的value),比如句子是"a ab abc abcd",结果会是{'a': ('ab',), 'ab': ('abc',), 'abc': ('abcd',)}。
  • 终止标点的截断逻辑:代码会找到第一个出现的终止标点并截断,要是你需要保留到最后一个终止标点之前的内容,可以改成反向查找最后一个终止标点的位置,再截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:41:20