仅从Python中的TXT文件中提取文章标题
我将感谢您对以下问题的指导。我只需要从一系列出版物中批量提取文章标题。我的想法是,我接收PDF格式的文件,我只提取第一页(完成),批量转换为TXT(完成),我被困在最后阶段 TXTs的结构如下所示: ---医学与生命杂志 JML审查 新型聚(ADP核糖)抑制剂在治疗遗传性生殖系BRCA1/2突变的局部晚期和转移性Her-2/neu阴性乳腺癌中的作用。 文献综述 作者名单等--- 只需要每个文件的标题(粗体)。我可以进行迭代,这不是问题 使用下面的代码,我试图识别第1段:仅从Python中的TXT文件中提取文章标题,python,text,extract,Python,Text,Extract,我将感谢您对以下问题的指导。我只需要从一系列出版物中批量提取文章标题。我的想法是,我接收PDF格式的文件,我只提取第一页(完成),批量转换为TXT(完成),我被困在最后阶段 TXTs的结构如下所示: ---医学与生命杂志 JML审查 新型聚(ADP核糖)抑制剂在治疗遗传性生殖系BRCA1/2突变的局部晚期和转移性Her-2/neu阴性乳腺癌中的作用。 文献综述 作者名单等--- 只需要每个文件的标题(粗体)。我可以进行迭代,这不是问题 使用下面的代码,我试图识别第1段: data = f
data = file.read()
array1 = []
sp = data.split("\n\n")
for number, paragraph in enumerate(sp, 1):
if number == 1:
array1 += [paragraph]
print (array1)
没有任何结果
我的想法是,我只需要将标题保存在一个文件中(可以是TXT),因为我需要这个列表用于其他目的
非常感谢 您可以使用
.read()
读取整个文件,并使用带有捕获组的模式从JML匹配到作者
^JML\s*\|.*\s*\r?\n((?:.*\r?\n)*?)Authors\b
模式匹配:
字符串的开头^
匹配JML、可选空格字符和JML\s*\\\\\\\\\\\
\\\\\\\\\
匹配行的其余部分、可选空白字符和换行符*\s*\r?\n
捕获组1(
尽可能匹配所有行(?:.*\r?\n)*?
关闭第1组)
作者作者\b
import os
import re
pattern = r"^JML\s*\|.*\s*\r?\n((?:.*\r?\n)*?)Authors\b"
array1 = []
for file in os.listdir():
with open(file, "r") as data:
array1 = array1 + re.findall(pattern, data.read(), re.MULTILINE)
print(array1)
sp
中的实际内容是什么?我试着分成几行…不确定是否可以,如果标题总是第三行,那么就使用sp[2]
@Ashish-我做到了。没有错误,但也没有返回。一片空白。代码现在是:对于os.listdir()中的文件:data=file.read()array1=[]sp=data.split(\n\n”)表示枚举(sp,2)中段落的数字:如果数字==1:array1+=[段落]打印(array1)
您可以读取该文件,在2行换行符上拆分,然后从os.listdir()中的文件列表中取出第3项:data=open(file,“r”)sp=data.read().split(“\n\n”)print(sp[2])
,或者是否有更具体的逻辑,比如获取此字符串格式JML | REVIEW
和此字符串格式作者列表之间的所有文本,等等,等等--
?非常感谢您的精彩和详细的解释。我已经尝试了代码,没有任何错误,但是输出是一个空白数组“[]”,如@OviSele所示,您可以使用open(file)在本部分中的文件
之前预先设置文件路径,因为当您执行打印(file)时
在循环中,您只能看到文件名。谢谢!就像我在下面所做的那样?对于os.listdir()中的文件,我得到了相同的结果[]:使用open('C:\\Users\\OviSele\\Downloads\\Test\\testpy.txt',“r”)作为数据:array1=array1+re.findall(pattern,data.read(),re.MULTILINE)print(array1)
@OviSele您使用它将返回一个列表,其中包含路径给定目录中条目的名称
然后,对于您获得的每个名称,您必须以正确的路径打开该文件:-),因此我认为在您的情况下,import-os-import-re-pattern=r“^JML\s*.\r*\n((?:..\r?\n)*?)Authors\b”array1=[]path=“C:\\Users\\OviSele\\Downloads\\Test\\”for os.listdir(path)中的文件:打开(path+file,“r”)作为数据:array1=array1+re.findall(pattern,data.read(),re.MULTILINE)打印(array1)
!非常非常感谢!万分感谢!