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

Python使用Regex对PDF提取文本分词时避免单词拆分的方法咨询

解决PDF文本分词单词拆分问题的方案

导致分词时单词被拆分的问题通常来源于三个环节,对应解决方案如下:

1. 修复PDF文本提取逻辑

问题根源:你当前使用的PyPDF2的extractText()方法对排版复杂的PDF(多栏、带断词连字符、特殊字体)提取效果很差,经常会在单词中间插入空格、或者把跨行的带连字符单词拆成两段,你拿到的字符串s本身就已经存在单词拆分问题,后续分词自然不对。
解决方法:替换为更稳定的文本提取工具,同时处理跨行断词:

# 用pypdf(PyPDF2官方维护的新版)替代原有PyPDF2
from pypdf import PdfReader

reader = PdfReader(file)
s = ""
# 保持跳过前2页的逻辑不变
for page in reader.pages[2:]:
    s += page.extract_text()
# 处理跨行的连字符断词,比如把"exam-\nple"合并为"example"
s = s.replace("-\n", "")

如果提取效果还是不理想,可以换用pdfplumber库,对复杂排版的适配性更好。

2. 替换手写分句逻辑

问题根源:你手写的按.切分句子的逻辑会误切Mr.、U.S.A.这类带点的缩写,把完整的内容拆到两个句子中,间接导致单词被拆分。
解决方法:直接使用nltk内置的分句工具,已经内置了常见缩写的切分例外规则:

import nltk
# 首次运行需要下载punkt数据包,后续运行可注释掉该行
nltk.download('punkt')
sentences = nltk.sent_tokenize(s)

3. 调整分词匹配规则

问题根源:你当前使用的RegexpTokenizer(r'\w+')仅匹配字母、数字、下划线,遇到带撇号的don't、带连字符的COVID-19这类词时会直接拆成多个片段。
解决方法:调整正则规则适配英文单词的常见格式,或者直接用nltk官方分词器:

# 方案A:调整正则规则,支持带撇号、连字符的完整单词匹配
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r"[a-zA-Z0-9]+(?:[-'][a-zA-Z0-9]+)*")
corpus = [tokenizer.tokenize(sentence) for sentence in sentences]

# 方案B:直接用nltk官方word_tokenize,适配场景更全面
from nltk.tokenize import word_tokenize
corpus = [word_tokenize(sentence) for sentence in sentences]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:42:00