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

Mac端Python3.8.8 PDF文本提取普遍出现单词末尾字符缺失问题

问题核心定位

你遇到的“PDF提取文本缺失单词末尾字符”的问题,并非PDF文本提取环节导致,所有异常输出全部来自你代码里调用的词干提取(Stemming)逻辑。
你列出的所有“缺末尾字母的单词”,完全匹配NLTK波特词干器的标准输出规则:

  • currenc 是currency经过波特词干提取的固定输出结果
  • innov 是innovation经过波特词干提取的固定输出结果
  • sourc 是source经过波特词干提取的固定输出结果
  • 你错误样例里的whitepap(对应whitepaper)、tabl(对应table)、histori(对应history)、consensu(对应consensus)、safeti(对应safety),全都是词干提取环节截断生成的结果,和你换过的pdftotext、pdfminer、tesseract-OCR等提取工具的精度没有关系。

你先后测试多款提取工具都无法解决问题,本质是没有定位到真正的故障环节:PDF提取流程输出的原始文本是完整的,后续预处理步骤里的词干处理逻辑直接砍掉了大量单词的末尾字符。

可直接落地的解决方案
  • 如果业务需要保留完整的原始单词形式,直接在mypreprocess函数中移除词干提取分支即可,不再调用porter.stem()或者lancaster.stem()。
    调整后的核心代码片段:
    def mypreprocess(text, n, opt=1):
        text = text.lower()
        # 过滤非字母字符
        text = re.sub(r'[^a-z]+',' ', text)
        # 分词
        token = word_tokenize(text)
        # 去停用词
        token = [t for t in token if t not in stop]
        # 过滤短长度单词
        token = [x for x in token if len(x) > n]
        return token
    
  • 如果做文本分析需要做词形归一化,不要使用截断式的词干提取,换用词形还原(Lemmatization)逻辑。这类方法基于词典规则还原单词规范形式,不会无理由截断词尾:
    替换原有词干逻辑的示例代码:
    from nltk.stem import WordNetLemmatizer
    lemmatizer = WordNetLemmatizer()
    # 替换原有的stem处理逻辑
    token = [lemmatizer.lemmatize(t) for t in token]
    
  • 你可以在预处理流程的最前端,把PDF提取出来的原始文本直接打印核对,会发现原始提取结果中的所有单词都是完整的,不存在缺末尾字符的问题。
代码冗余提示

你原代码中导入了大量pdfminer3的布局解析、页面交互类模块,但实际pdf_to_text函数是直接调用系统命令行的pdf2txt.py完成提取的,两类代码无逻辑关联,这些冗余导入可以删除,能减少不必要的依赖加载耗时。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 19:36:04