在文本块末尾添加缺失的句号
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)的最后一个字符和
- 如果缺少句号,请添加句号
- 用句号替换逗号或分号
- 如果句号已经存在,就保留它
非常感谢您!
Edit1:它不一定是正则表达式解决方案。由于我处理了数千个这样的字符串,因此性能仍然很重要。
Edit2:指定了问题。
你确实可以使用正则表达式:
import re
s = re.sub(r"([;,.])?(\s*</SPEAKER>)", r".", s)
当 ;
、,
或 .
是标签中的最后一个非白色 space 字符时,或者 -- 如果不可能-- 在点应该出现的地方捕获空字符串。在任何一种情况下,它都会用一个点替换该捕获。
然后应用您的解决方案来删除标签。
目前,我正在尝试为 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)的最后一个字符和
- 如果缺少句号,请添加句号
- 用句号替换逗号或分号
- 如果句号已经存在,就保留它
非常感谢您!
Edit1:它不一定是正则表达式解决方案。由于我处理了数千个这样的字符串,因此性能仍然很重要。
Edit2:指定了问题。
你确实可以使用正则表达式:
import re
s = re.sub(r"([;,.])?(\s*</SPEAKER>)", r".", s)
当 ;
、,
或 .
是标签中的最后一个非白色 space 字符时,或者 -- 如果不可能-- 在点应该出现的地方捕获空字符串。在任何一种情况下,它都会用一个点替换该捕获。
然后应用您的解决方案来删除标签。