在文本块末尾添加缺失的句号

Add missing full-stops at the end of a text block

目前,我正在尝试为 python3 中的机器学习任务准备一些文本。

输入数据是一个长字符串,格式如下:

<SPEAKER gender="female" id="1" name="unknown"> sentence_1. sentence_2? ... sentence_n, </SPEAKER><SPEAKER gender="male" id="2" name="unknown"> sentence_1. sentence_2? ... sentence_n </SPEAKER><SPEAKER gender="female" id="1" name="unknown"> sentence_1. sentence_2? ... sentence_n; </SPEAKER> ...

它由多个“文本块”组成,以标签开始 <SPEAKER ...> 并结束 </SPEAKER>。 如您所见,有时块 (sentence_n) 中的最后一个句子缺少句号 . 或句子以逗号 , 或分号 ; 结尾。

目前的问题是,当我清理提供的字符串并删除标签时,一个块的最后一句(sentence_n)和下一个块的第一句(sentence_1)合并.我只是想避免这种情况。我希望句子以标点符号结尾,以便能够在我后面的文本预处理步骤中按句子拆分整个字符串。

因此,我想检查每个块的最后一句话(sentence_n)的最后一个字符和

  1. 如果缺少句号,请添加句号
  2. 用句号替换逗号或分号
  3. 如果句号已经存在,就保留它

非常感谢您!

Edit1:它不一定是正则表达式解决方案。由于我处理了数千个这样的字符串,因此性能仍然很重要。

Edit2:指定了问题。

你确实可以使用正则表达式:

import re 

s = re.sub(r"([;,.])?(\s*</SPEAKER>)", r".", s)

;,. 是标签中的最后一个非白色 space 字符时,或者 -- 如果不可能-- 在点应该出现的地方捕获空字符串。在任何一种情况下,它都会用一个点替换该捕获。

然后应用您的解决方案来删除标签。