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



目前,我正在尝试为我在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> ...

它由多个";文本块";,以标签开始CCD_ 1并以标签结束CCD_。正如您所看到的,有时块中的最后一个句子(sentence_n(缺少句号.,或者句子以逗号,或分号;结尾。

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

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

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

非常感谢您!

第1版:它不一定是正则表达式解决方案。由于我处理了成千上万个这样的字符串,所以性能仍然很重要。

第2版:指定问题。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新