如何用NLTK分词器设置句子字符数阈值拆分文本?
解决方案
直接基于你现有的NLTK分词结果,编写合并短句子的逻辑,自定义最小字符数阈值就能实现需求,且保持轻量快速的优势。
完整代码
import nltk.data def merge_short_sentences(sentences, min_length=20): merged = [] current_group = [] current_length = 0 for sent in sentences: trimmed_sent = sent.strip() if not trimmed_sent: continue sent_length = len(trimmed_sent) # 累积短句子直到满足最小长度要求 if current_length + sent_length < min_length: current_group.append(trimmed_sent) current_length += sent_length else: # 处理并合并当前累积的句子组 if current_group: processed_group = [] # 将组内非末尾句子的句号替换为逗号 for s in current_group[:-1]: processed_group.append(s[:-1] + ',' if s.endswith('.') else s + ',') processed_group.append(current_group[-1]) merged.append(' '.join(processed_group)) # 重置组为当前句子 current_group = [trimmed_sent] current_length = sent_length else: merged.append(trimmed_sent) # 处理最后剩余的未达标句子组 if current_group: processed_group = [] for s in current_group[:-1]: processed_group.append(s[:-1] + ',' if s.endswith('.') else s + ',') processed_group.append(current_group[-1]) merged.append(' '.join(processed_group)) # 还原原始文本开头的换行符 if sentences[0].startswith('\n'): merged[0] = '\n' + merged[0] return merged # 原有NLTK分词逻辑 tokenizer = nltk.data.load("tokenizers/punkt/english.pickle") text_file = """ CHARACTER. EXPANSION. GROWTH AND PRIDE! CHARACTER. EXPANSION. GROWTH AND PRIDE! DIG DEEP! Find that strength that lives inside you. """ splitting_into_smaller = tokenizer.tokenize(text_file) # 执行合并,可根据需求调整min_length参数 result = merge_short_sentences(splitting_into_smaller, min_length=20) print(result)
输出结果
['\nCHARACTER, EXPANSION, GROWTH AND PRIDE!', 'CHARACTER, EXPANSION, GROWTH AND PRIDE!', 'DIG DEEP, Find that strength that lives inside you.']
关键说明
- 灵活阈值:通过
min_length参数可自由设置合并的最小字符数,适配不同文本场景。 - 标点适配:自动调整合并组内的标点,既保证语句流畅,又保留原句的情感标点(感叹号、问号等)。
- 轻量高效:仅基于NLTK分词结果做二次处理,无需加载大型模型,速度远快于Spacy。
- 边界处理:自动过滤空句子,处理末尾剩余的短句子组,避免内容遗漏。
内容的提问来源于stack exchange,提问作者greenm8rix
相关产品推荐
相关产品推荐

