繁体   English   中英

使用正则表达式从PDF原始文本中提取子字符串

[英]Extracting substring from PDF raw text using regex

我试图从pdf文档中提取具有罗马索引的小节。

例如,这是文档的一部分,

\\ n1.1 \\ n \\ nSCOPE \\ n \\ n此PTS指定\\ n \\ n要求\\ n分类,验证的建议\\ n \\ nFunct \\ nions。\\ n \\ n范围包括以下内容:\\ n \\ ni。\\ n \\ nSemi \\ n- \\ n定量SIL分类\\ n \\ nii。\\ n \\ n虚假行程分析\\ n \\ niii。\\ n \\ n概率和体系结构SIL验证\\ n \\ niv。\\ n \\ n推荐\\ n \\ n用于SIL间隙封闭'

我想要的只是以下内容:

该PTS指定\\ n \\ n要求\\ n分类,验证的建议\\ n \\ nFunct \\ nions。\\ n \\ n范围包括以下内容:\\ n \\ ni。\\ n \\ n半\\ n- \\ n定量SIL分类\\ n \\ nii。\\ n \\ n杂散行程分析\\ n \\ niii。\\ n \\ n概率和体系结构SIL验证\\ n \\ niv。\\ n \\ n建议\\ n \\ n用于SIL间隙封闭

我需要罗马索引之前的句子以及罗马索引中的内容。

但是,也有如下情况

3.1.3 \\ n \\ nDo \\ nc \\ numentation \\ n \\ n必需\\ n \\ nT \\ nh \\ ne \\ n \\ nl \\ nat \\ ne \\ ns \\ nt \\ n \\ nissue \\ n \\ nof \\ n \\ nt \\ nh \\ ne \\ n \\ nf \\ no \\ nllo \\ nw \\ ni \\ nng \\ n \\ ndocume \\ nn \\ nts \\ n \\ nshall \\ n \\ nbe \\ n \\ nav \\ na \\ nilab \\ nl \\ ne \\ n \\ nto \\ n \\ nthe \\ n \\ nte \\ na \\ nm \\ n \\ np \\ ne \\ nrf \\ no \\ nrm \\ ni \\ nng \\ n \\ nt \\ nh \\ ne \\ nc \\ nl \\ nass \\ ni \\ nf \\ ni \\ ncati \\ no \\ nn:\\ n \\ ni。\\ n \\ n必填参考文件\\ n \\ na)\\ n \\ n原因和影响矩阵(CEM)\\ n \\ nb)\\ n \\ n管道和仪表图(P&ID)或过程与公用工程\\ nflow方案(PEFS)\\ n \\ nc)\\ n \\ nHAZOP报告\\ n \\ nd)\\ n \\ nIPF可靠性数据\\ n \\ nii。\\ n \\ n其他参考文件\\ n \\ na)\\ n \\ n过程流程图(PFD)或Process Fl \\ now方案(PFS)\\ n \\ nb)\\ n \\ n植物布局图\\ n \\ nc)\\ n \\ n过程保障流程方案(PSFS)\\ n \\ nd)\\ n \\ n控制叙述\\ n \\ ne) \\ n \\ n互锁/ ESD逻辑图\\ n \\ nf)\\ n \\ n设备布局图\\ n \\ ng)\\ n \\ n维护和检查数据\\ n \\ nh)\\ n \\ n工厂历史数据\\ n \\ n \\ nT \\ nh \\ ne \\ n \\ nl \\ ni \\ ns \\ nt \\ n \\ na \\ nb \\ no \\ nve \\ n \\ nis \\ n \\ nn \\ no \\ nt \\ n \\ ne \\ nx \\ nh \\ na \\ nu \\ nsti \\ nv \\东北。 任何\\ n \\ not \\ nh \\ ne \\ nr \\ n \\ ndo \\ nc \\ nu \\ nm \\ ne \\ nn \\ nt \\ ns \\ n / \\ nd \\ nr \\ na \\ nw \\ nin \\ ng \\ ns \\ n \\ nreq \\ nu \\ nir \\ ne \\ nd \\ n \\ nf \\ no \\ nr \\ n \\ nt \\ nhe \\ nc \\ nom \\ np \\ nletion \\ n \\ no \\ nf \\ n \\ nIPF \\ n \\ ns \\ nt \\ nu \\ nd \\ ny \\ n \\ ns \\ nh \\ na \\ nll \\ n \\ nbe \\ n \\ nf \\ nu \\ nr \\ nn \\ nished \\ n \\ nas \\ n \\ na \\ nn \\ nd \\ n \\ nw \\ nhen \\ n \\ nre \\ nq \\ nui \\ nr \\ ne \\ nd \\ n。\\ n \\ n

我已经将pdf转换为原始文本,并且设法提取了文档的一部分。

regx = re.compile( '\.\n \n.+?:\n \n',re.DOTALL)
find = str(txt)
indexhead.append((regx.findall(find)))

上面的代码只能提取标题,而不能提取罗马索引

。\\ n \\ n范围包括以下内容:\\ n \\ n

我正在尝试根据模式进行提取,但我认为也许某些条件规则可能会有所帮助。

如果我理解正确的问题,我们只想取出罗马索引并获取整个段落,就可以从一个简单的表达式开始,例如:

.+[0-9]\.?.+?([A-Z][a-z].*)

然后,随着新案例的出现,我们将只使用逻辑OR并添加其他规则。

演示

测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r".+[0-9]\.?.+?([A-Z][a-z].*)"

test_str = ("\\n1.1\\n \\nSCOPE\\n \\nThis PTS specifies the\\n \\nrequirements \\nand recommendations for Classification, Verification \\n\\nFunct\\nions.\\n \\nThe scope includes the following:\\n \\ni.\\n \\nSemi\\n-\\nquantitative SIL classification\\n \\nii.\\n \\nSpurious trip analysis\\n \\niii.\\n \\nProbabilistic and architectural SIL verification\\n \\niv.\\n \\nRecommendations\\n \\nfor SIL gap closure'\n\n"
    "3.1.3\\n \\nDo\\nc\\numentation\\n \\nrequired\\n \\nT\\nh\\ne\\n \\nl\\nat\\ne\\ns\\nt\\n \\nissue\\n \\nof\\n \\nt\\nh\\ne\\n \\nf\\no\\nllo\\nw\\ni\\nng\\n \\ndocume\\nn\\nts\\n \\nshall\\n \\nbe\\n \\nav\\na\\nilab\\nl\\ne\\n \\nto\\n \\nthe\\n \\nte\\na\\nm\\n \\np\\ne\\nrf\\no\\nrm\\ni\\nng\\n \\nt\\nh\\ne \\nc\\nl\\nass\\ni\\nf\\ni\\ncati\\no\\nn:\\n \\ni.\\n \\nMandatory reference document\\n \\na)\\n \\nCause and effect matrices (CEM)\\n \\nb)\\n \\nPiping and Instrument Diagram (P&ID) or Process and utility engineering \\nflow schemes (PEFS)\\n \\nc)\\n \\nHAZOP report\\n \\nd)\\n \\nIPF reliability data\\n \\nii.\\n \\nOther reference document\\n \\na)\\n \\nProcess Flow Diagram (PFD) or Process Fl\\now Scheme (PFS)\\n \\nb)\\n \\nPlant layout drawing\\n \\nc)\\n \\nProcess safeguarding flow schemes (PSFS)\\n \\nd)\\n \\nControl narratives\\n \\ne)\\n \\nInterlocks/ ESD logic diagram\\n \\nf)\\n \\nEquipment layout diagram\\n \\ng)\\n \\nMaintenance and Inspection Data\\n \\nh)\\n \\nPlant historian data\\n \\n \\nT\\nh\\ne\\n \\nl\\ni\\ns\\nt\\n \\na\\nb\\no\\nve\\n \\nis\\n \\nn\\no\\nt\\n \\ne\\nx\\nh\\na\\nu\\nsti\\nv\\ne. Any\\n \\not\\nh\\ne\\nr\\n \\ndo\\nc\\nu\\nm\\ne\\nn\\nt\\ns\\n/ \\nd\\nr\\na\\nw\\nin\\ng\\ns\\n \\nreq\\nu\\nir\\ne\\nd\\n \\nf\\no\\nr\\n \\nt\\nhe \\nc\\nom\\np\\nletion\\n \\no\\nf the\\n \\nIPF\\n \\ns\\nt\\nu\\nd\\ny\\n \\ns\\nh\\na\\nll\\n \\nbe\\n \\nf\\nu\\nr\\nn\\nished\\n \\nas\\n \\na\\nn\\nd\\n \\nw\\nhen\\n \\nre\\nq\\nui\\nr\\ne\\nd\\n.\\n \\n")

subst = "\\1"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

正则表达式

如果不需要此表达式,则可以在regex101.com中对其进行修改/更改。

RegEx电路

jex.im可视化正则表达式:

在此处输入图片说明

经过一番探索,以下是产生与我想要达到的最接近的解决方案:

regx = re.compile( ': \ni(?:(?!\n[A-Z]).).*?\.\n\d\.|:\ni(?:(?!\n[A-Z]).).*?\.\n\d\.',re.DOTALL)
find = str(cleanSectionContent2[req])

它检测以':i'开头的情况。 并以节标题“ \\ n \\ d。”结尾,但是它无法检测到所有情况,因此在此我将更新更多解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM