我正在努力寻找一种方法来按章节拆分我拥有的法律文件集。我一直在尝试使用正则表达式来做到这一点,虽然我已经相当接近了,但我正在寻找是否有办法进一步优化输出以合并正则表达式脚本产生的匹配数量。
每篇文档都由多个部分标题组成,但都遵循相同的基本结构。首先,有一个“论据”标题,总结了每个小节中提出的观点。我想包含这个论据部分,因为语料库中的少数文档没有后续的小节;然而,绝大多数文档都有这些部分。每个小节都以罗马数字开头,每个文档中的小节数量可能有所不同。虽然我不知道每个文档中到底有多少个小节,但我假设不超过 10 个。
对于模态文档,其结构如下所示:
string = """ARGUMENT
Summary of argument
I. TITLE OF SUBSECTION 1
Text of subsection 1
II. TITLE OF SUBSECTION 2
Text of subsection 2
CONCLUSION
Text of conclusion
"""
我创建了一个正则表达式脚本,尝试使用按标题拆分每个部分re.split
,指定 ARGUMENT 标题、罗马数字小节 1(I)到 10(X)以及 CONCLUSION 部分,添加新行符号以避免在这些单词/符号的每个实例上进行拆分,无论它们是否恰好出现在标题本身中:
r'(\nARGUMENT|\nI\.|\nII\.|\nIII\.|\nIV\.|\nV\.|\nVI\.|\nVII\.|\nVIII\.|\nIX\.|\nX\.|\nCONCLUSION.*)'
我想要的输出是一个列表,其中每个标题和下面的结果文本组合成一个元素,如下所示:
['ARGUMENT Summary of argument', 'I. TITLE OF SUBSECTION 1 Text of subsection 1', 'II. TITLE OF SUBSECTION 2 Text of subsection 2', 'CONCLUSION Text of conclusion']
但是,当re.split
在上述字符串上使用时,我的实际输出将罗马数字与该部分的其余文本分开(请注意下面列表的第二个和第四个元素:
['ARGUMENT\nSummary of argument\n', '\nI.', ' TITLE OF SUBSECTION 1\nText of subsection 1\n', '\nII.', ' TITLE OF SUBSECTION 2\nText of subsection 2\n', '\nCONCLUSION', '\nText of conclusion\n']
输出中的换行符对我来说不是特别重要。相反,标题和其下方文本的整合对我来说才是最重要的。
我可以对我的正则表达式脚本进行一些编辑以获得第一个输出而不是第二个输出吗?或者如果不行,是否有其他正则表达式命令可用于获得该特定输出?而且,不那么关键的是,是否有更有效或更简化的方法来将节标题与脚本中的罗马数字 I 到 X 进行匹配?
您提供的模式缺少一些关于在哪里拆分和拆分什么的说明。我编写了这个模式,它提供了更多关于在哪里拆分字符串的说明,并删除了罗马数字冗余。
假设法律文件将遵循相同的结构,我们可以忽略 ARGUMENT 部分并从第一点开始拆分文本。
pattern = r'(?=\b(?:[IVXL]+\.)|CONCLUSION)'
因此,在 中,
?=
我们包括并展望所需的模式。\b
是单词的边界,它将有助于防止较大的罗马数字分裂。?:
是非捕获的,以防止最终答案中出现冗余元素。 在[IVXL]+
我们要求找到这些可能重复的字符时,使用\.
我们要求罗马数字以句点结尾。CONCLUSION
只是分割最后一段及其内容。answer = [line.replace('\n', ' ').strip() for line in answer]
此行用于删除换行符,并去除空格以帮助清理。希望这对您有所帮助!