gpt4 book ai didi

Python:特殊字符给我带来问题(来自 PDFminer)

转载 作者:太空狗 更新时间:2023-10-29 18:05:33 25 4
gpt4 key购买 nike

我使用 PDFminer 的 pdf2text 将 PDF 缩减为文本。不幸的是它包含特殊字符。让我显示控制台的输出

>>>a=pdf_to_text("ap.pdf")

这里是它的一个样本,有点截断

>>>a[5000:5500]
'f one architect. Decades ...... but to re\xef\xac\x82ect\none set of design ideas, than to have one that contains many\ngood but independent and uncoordinated ideas.\n1 Joshua Bloch, \xe2\x80\x9cHow to Design a Good API and Why It Matters\xe2\x80\x9d, G......=-3733'

我知道我必须对其进行编码

>>>a[5000:5500].encode('utf-8')
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 237: ordinal not in range(128)

我四处搜索了一下并尝试了它们,特别是 Replace special characters in python .输入来自 PDFminer,因此很难(AFAIK)控制它。从该输出中生成正确的纯文本的方法是什么?

我做错了什么?

--快速修复:将 PDFminer 的编解码器更改为 ascii- 但这不是持久的解决方案--

--放弃了答案的快速修复 - 更改编解码器会删除信息--

--Maxim提到的相关话题http://en.wikipedia.org/wiki/Windows-1251 --

最佳答案

当非 ASCII 文本存储在 str 对象中时,通常会出现此问题。你要做的是在 utf-8 中编码一个已经用某种编码编码的字符串(因为它包含代码高于 0x7f 的字符)。

要在 utf-8 中编码这样的字符串,必须先对其进行解码。假设原始文本编码是 cp1251(将其替换为您的实际编码),类似以下的内容可以解决问题:

u = s.decode('cp1251')  # decode from cp1251 byte (str) string to unicode string
s = u.encode('utf-8') # re-encode unicode string to utf-8 byte (str) string

基本上,上面的代码片段执行 iconv --from-code=CP1251 --to-code=UTF-8 命令执行的操作,即将字符串从一种编码转换为另一种编码。

一些有用的链接:

关于Python:特殊字符给我带来问题(来自 PDFminer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com