如何从句子生成符合连续词长度规则的指定键值对字典
嘿,我来一步步教你怎么生成符合要求的字典,完全贴合你描述的规则:
第一步:先处理文本,只保留终止标点前的有效内容
首先得把句子里终止标点(句号、问号、冒号、感叹号)后面的内容全部砍掉,只留前面的有效部分。比如如果原句是"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
相关产品推荐
相关产品推荐

