从文本中提取特定段落

0 投票
3 回答
5303 浏览
提问于 2025-04-17 23:01

我刚开始学Python,有个问题想请教。我有几个文本文件,想从每个文件中提取出“结论”部分。
这些文本文件的内容大概是这样的:


结果:在调整后的分析中,每小时PAC的数量翻倍与心房颤动(AF)风险显著增加有关(风险比,1.17 [95% 置信区间,1.13到1.22])
限制:这项研究并没有建立PAC和AF之间的因果关系。
结论:将PAC数量加入到一个经过验证的AF风险算法中,可以更好地区分AF风险,并显著改善风险重新分类。还需要进一步研究来确定PAC的调整是否能前瞻性地降低AF风险。
主要资助来源:美国心脏协会、约瑟夫·德朗基金会和国家卫生研究院。


而且我在同一个文件夹里有多个这样的文件,怎么才能对这个文件夹里的所有文件都做同样的操作呢?
谢谢大家的帮助!

3 个回答

0

这个链接可以帮助你列出一个文件夹里的所有文件。

接下来,对于每个文件,

  1. 逐行读取文件中的内容
  2. 检查当前行是否以“CONCLUSION:”开头:
  3. 在这一行中提取出“CONCLUSION:”后面的所有内容:
1

你应该使用正则表达式来提取你需要的数据:

import re
import os, os.path

PATH = 'path/to/your/files/'

conclusions = []
for file in os.listdir(path):
    with open(os.path.join(PATH, file)) as f:
        data = f.read()

    conclusion = re.search('CONCLUSION: (.*?)([A-Z]{2,})', data).group(1)
    conclusions.append(conclusion)

这个代码会查找 'CONCLUSION: ' 这个标题,然后接着扫描它后面的数据,直到遇到下一个标题为止。这个下一个标题总是一个大写字母开头的单词,就像你指定的那样。

2

我对正则表达式不太在行,也不太确定这是否是最好的方法,但它确实有效 :)

import os
import re
path = 'path/to/your/files/'
for i in os.listdir(path):
    with open(path+i) as f:
        content = f.read()
        pattern = re.compile('CONCLUSION:\s*([\s\w.]*)\n[A-Z\s]*:')
        print pattern.findall(content)[0]

撰写回答