我正在阅读数百个pdf文件以提取摘要。我的策略是:
(1)在定界符abstract
之后分割
(2)阅读摘要
(3)空行时停止。
这是可以执行此操作的代码:
import re
raw = ' Some text\n\nABSTRACT\nExtract \nthis text\n\nOther text'
pattern = 'abstract'
abstract = re.split(pattern ,raw, flags=re.IGNORECASE)[1].split("\n\n")[0]
print(abstract)
问题在于,不同的pdf文件将为我的分隔符(例如abstract:
,abstract:\n
和abstract\n
)包含不同的形式,它们都是嵌套的。因此,我尝试了这样的事情:
import re
raw = ' Some text\n\nAbstract:\n\nExtract \nthis text\n and include
abstraction and Abstraction \n\nOther text'
pattern = 'abstract|abstract:|abstract:\n'
abstract = re.split(pattern, raw, flags=re.IGNORECASE)[1].split("\n\n")[0]
print(abstract)
但是对于上面的示例,它不起作用。同样,此代码也无法完全匹配。例如,它不会忽略abstraction
和Abstraction
答案 0 :(得分:1)
在要拆分的模式中,对它们进行排序,例如,如果一个是另一个的子集,则将其列在列表中
pattern = 'abstract:|abstract'
不要担心分割中的尾随空格(\n
,\n\n
,\n\t
),之后请使用.strip()
来解决,因为这会删除所有字符串末尾的空白。
text_after_abstract_header = re.split(pattern, raw, flags=re.IGNORECASE)[1]
abstract = text_after_abstract_header.strip().split('\n\n')
答案 1 :(得分:1)
您可以在正则表达式中添加尽可能多的细节,在这种情况下,我们可以在abstract
之前和之后添加字符
>>> raw=' Some text\n\nABSTRACT:\t\nExtract this text\n adasdd\n\nSome other text'
>>> arr = re.split('(?i)\n{1,2}abstract[:\n\t]+',raw)[1].split('\n\n')
>>> arr
['Extract this text\n adasdd', 'Some other text']
>>> arr[0]
'Extract this text\n adasdd'
(?i)
与flags=re.IGNORECASE
\n{1,2}
1或2个换行符
[:\n\t]+
包含1次或多次字符列表。