我正在努力寻找一种方法来按部分拆分我拥有的法律文件集。我一直在尝试使用正则表达式来做到这一点,虽然我已经相当接近了,但我正在寻找是否有一种方法可以进一步优化输出以合并正则表达式脚本产生的匹配数。
每个文档都由多个节标题组织,但都遵循相同的基本结构。首先,有一个“论据”标题,总结了每个小节中的观点。我想包含此论证部分,因为语料库中的少数文档没有后续小节;然而,绝大多数都有这些部分。每个小节都以罗马数字开头,每个文档中的小节数量可能有所不同。虽然我不知道每个文档中有多少个小节,但我假设不超过 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) 以及结论部分,添加新行符号以避免拆分在这些单词/符号的每个实例上,无论它们是否恰好出现在标题本身中:
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 相匹配?
预先感谢您提供的任何帮助!
该模式只是缺少一些关于在您提供的模式中分割的位置和内容的说明。我编写了这个模式,它提供了有关在何处分割字符串并删除罗马数字冗余的更多说明。
string = """ legal doc """
pattern = r'(?=\b(?:[IVXL]+\.)|CONCLUSION)'
answer = re.split(pattern, string)
answer = [line.replace('\n', ' ').strip() for line in answer]
print(answer)
假设法律文档遵循相同的结构,我们可以忽略 ARGUMENT 部分并从第一个点开始分割文本。
pattern = r'(?=\b(?:[IVXL]+\.)|CONCLUSION)'
因此,在
?=
,我们正在包含并展望所需的模式。
\b
是单词的边界,它将有助于防止较大的罗马数字分裂。
?:
是非捕获的,以防止最终答案中出现冗余元素。
在 [IVXL]+
中,我们要求找到这些可能重复的字符,然后使用 \.
我们要求罗马数字以句点结尾。
CONCLUSION
只是将最后一段及其内容分开。
answer = [line.replace('\n', ' ').strip() for line in answer]
此行的理解是删除那些换行符,并删除空格以帮助清理。希望这有帮助!