我想从论文中提取 ABSTRACT,因为论文的格式一般为 PDF,因此我先用了 pdfminer 包来对 pdf 进行 parser (这里先假设 parser 的结果是对的)。
之后我想从论文中提取 ABSTRACT 的内容,ABSTRACT 的一般格式为ABSTRACT\ncontent\n
,也就是说我想提取 content 的内容(可以认为 content 内容由文本内容和换行符\n 组成)。于是我用了
ABSTRACT\n([^\n]+\n)+\n'
对内容进行提取,但这种方法不 work。
之后我注意到在 re 中需要对\
转义,因此我把正则表达式修改为:
ABSTRACT\\n([^\\n]+\\n)+\\n'
修改之后,虽然可以在这里测试成功,但在代码里还是不 work。
PS:由于论文的结构性比较好,因此在抽取时完全可以不用 re 来完成任务,但由于我正则表达式知识不太够,因此想借着这个机会学习以下。
1
676529483 2019-10-13 12:00:25 +08:00
show me your code。
一般正则主要坑有几点 1、你用的是 re.match 还是 re.search 2、你用的 Py2 还是 3,主要区别是 unicode 和 str |
2
MOONLIGHTT OP 感谢回复,我的 pattern 好像没有问题,问题在于我好像误用了 re.findall()和 re.search(),把 re.findall()换成 re.search()问题就解决了。我的问题似乎和[这个]( https://stackoverflow.com/questions/9000960/python-regular-expressions-re-search-vs-re-findall)哥们的问题是一样的。
|
3
bumz 2019-10-13 12:35:51 +08:00 via iPhone
[]里面只能放单字符,你这已经是匹配连续两个字符了
r'ABSTRACT\\n((?:(?!\\n).)+\\n)+\\n' |
4
Procumbens 2019-10-13 13:22:28 +08:00
@bumz []中^开头表示取非 不表示字符
|
5
okface 2019-12-12 16:40:57 +08:00
请问大佬说的完全不用 re 来完成指的是什么方法完成,我也在做类似的事情。
|
6
MOONLIGHTT OP @okface
手写字符串匹配,因为我抽取出的 abstract 后面有两个\n\n,所以这个也不难写。 不过貌似现在流行用 NLP 的技术来 pdf 中的数据,给老哥指条路: https://github.com/allenai/science-parse |