You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python的学术论文核心文本提取与过滤方法咨询

学术论文核心文本提取与过滤方案

针对你需要提取学术论文核心正文、生成干净TXT供语言模型使用的需求,以下是实用的过滤方法,以及优化后的代码实现:

一、核心过滤方法

1. 格式维度筛选(字号、位置、字体)

  • 字号过滤:学术论文正文字号通常稳定在10-12pt,标题、脚注、图表标注字号差异明显。可以用PyMuPDF提取文本时附带字体元数据,过滤掉不符合字号范围的内容。
  • 区域过滤:正文集中在页面中间区域,页眉、页脚、侧边栏内容可通过页面坐标范围排除(比如只保留页面垂直方向20%-80%的内容)。
  • 字体过滤:正文多采用标准衬线/无衬线字体(如Times New Roman、Arial),加粗、特殊字体的内容大概率是标题或标注,可针对性排除。

2. 文本规则过滤

  • 正则清除冗余:用正则表达式匹配并移除邮箱、网址、表格标记:
    • 邮箱:r'[\w\.-]+@[\w\.-]+'
    • 网址:r'https?://\S+'
    • 表格相关:r'(\|.*\|)+'(匹配带竖线的表格行)
  • 段落长度过滤:过滤掉长度小于15字符的零散文本(比如孤立的数字、图表编号)。
  • 结构关键词定位:利用学术论文固定结构(摘要、引言、方法、结果、讨论)的关键词,锁定核心段落,排除参考文献、致谢、附录等非正文部分。

3. NLP工具辅助过滤

  • Spacy实体识别:用Spacy识别“表X”“图X”等实体,删除其前后的说明文本;同时可通过分句功能,过滤掉不符合正文语义的短句子。
  • 语义分类:用预训练的文本分类模型(比如基于BERT的轻量模型)区分正文段落和非正文内容,适合批量处理大量论文。

4. 专业工具简化流程

  • Grobid:专门面向学术论文的解析工具,能自动识别并提取正文、标题、参考文献等结构,直接输出干净的正文文本,无需手动写过滤逻辑。
  • PyMuPDF:相比PyPDFLoader,能提取更精准的文本格式信息,是格式筛选的首选工具。

二、优化后的代码实现

以下代码集成了正则过滤、段落长度过滤,并用PyMuPDF替代原工具,提升提取精度:

import glob
import os
import re
import fitz  # PyMuPDF

# 配置路径
文件夹路径 = "C:/Users/faenkaya/Desktop/Language Models/documents/Scientific Data eng"
输出文件路径 = "C:/Users/faenkaya/Desktop/Language Models/documents/Scientific Data eng/纯净正文.txt"

# 正则匹配规则
正则规则 = [
    (r'https?://\S+', ''),  # 移除网址
    (r'[\w\.-]+@[\w\.-]+', ''),  # 移除邮箱
    (r'(\|.*\|)+', ''),  # 移除表格行
    (r'\s+', ' ')  # 替换多个空白为单个空格
]

def 过滤文本(原始文本):
    # 应用正则规则
    for 模式, 替换内容 in 正则规则:
        原始文本 = re.sub(模式, 替换内容, 原始文本)
    # 按段落分割,过滤短段落
    段落列表 = [段落.strip() for 段落 in 原始文本.split('\n') if len(段落.strip()) > 15]
    return '\n'.join(段落列表)

def 提取PDF正文(pdf路径):
    文档 = fitz.open(pdf路径)
    正文内容 = ""
    for 页码 in range(文档.page_count):
        页面 = 文档.load_page(页码)
        # 若要加字号过滤,可遍历页面的文本块:for block in page.get_text("dict")["blocks"]:
        页面文本 = 页面.get_text()
        正文内容 += 页面文本 + '\n'
    文档.close()
    return 过滤文本(正文内容)

# 批量处理并写入文件
with open(输出文件路径, "w", encoding="utf-8") as 输出文件:
    for pdf文件路径 in glob.glob(os.path.join(文件夹路径, "*.pdf")):
        print(f"处理文件: {pdf文件路径}")
        纯净正文 = 提取PDF正文(pdf文件路径)
        输出文件.write(纯净正文 + '\n\n')

三、进阶优化建议

  • 如果需要更精准的格式过滤,可以在提取PDF正文函数中遍历页面的文本块,通过block["fontsize"]判断是否为正文字号,只保留符合条件的文本块内容。
  • 对于结构化强的论文,可以用关键词匹配定位正文起始(比如“摘要”“Abstract”)和结束(比如“参考文献”“References”)的位置,截取中间内容。

内容的提问来源于stack exchange,提问作者Enes Kayacan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:25:40