Stanza未按预期分句,能否用换行符作为启发式规则强制分句?
问题根因
- 你当前将整个文件内容作为连续字符串传入Stanza pipeline,Stanza默认分句逻辑仅基于语义、标点判定句子边界,不会将原始文件的换行符作为强制分句标记,因此会出现多行合并为一个句子的问题。
- 你提到的「按换行强制分割后再分词」是完全可行的方案,刚好匹配你输入文件每行对应一个独立句子的格式。
解决方案
你可以通过两个改动实现需求:
- 初始化Stanza Pipeline时添加
tokenize_no_ssplit=True参数,关闭自动分句功能,保证传入的每段文本都会被识别为单个句子 - 改为逐行读取文件内容,每行单独送入Pipeline处理
修改后的完整代码如下:
! pip install stanza import stanza stanza.download("en", model_dir="/content/drive/MyDrive/Internship/") # 添加tokenize_no_ssplit参数关闭自动分句 nlp_en = stanza.Pipeline( "en", dir= "/content/drive/MyDrive/Internship/", processors = "tokenize, pos, lemma, mwt", tokenize_no_ssplit=True ) en_token = [] with open("/content/drive/MyDrive/Internship/EN_sample.txt", "r", encoding='utf8') as f: for line in f: # 去除首尾空白符,跳过空行 line = line.strip() if not line: continue # 单行单独处理 doc = nlp_en(line) # 取唯一的句子对象提取分词 list_of_tokens = [token.text for token in doc.sentences[0].tokens] en_token.append(list_of_tokens)
运行上述代码后得到的en_token就会和你的预期输出完全一致。
内容的提问来源于stack exchange,提问作者c_metaphorique
相关产品推荐
相关产品推荐

