gpt4 book ai didi

python - pyPdf 忽略 PDF 文件中的换行符

转载 作者:太空狗 更新时间:2023-10-30 00:46:11 62 4
gpt4 key购买 nike

我正在尝试将 PDF 的每一页提取为字符串:

import pyPdf

pages = []
pdf = pyPdf.PdfFileReader(file('g-reg-101.pdf', 'rb'))
for i in range(0, pdf.getNumPages()):
this_page = pdf.getPage(i).extractText() + "\n"
this_page = " ".join(this_page.replace(u"\xa0", " ").strip().split())
pages.append(this_page.encode("ascii", "xmlcharrefreplace"))
for page in pages:
print '*' * 80
print page

但是这个脚本忽略了换行符,给我留下了一些乱七八糟的字符串,比如 information contained an individual which, because of name, identifyingnumber, mark or description (即,这应该读作 identifying number,而不是 identifyingumber)。

Here's an example我尝试解析的 PDF 类型。

最佳答案

我不太了解 PDF 编码,但我认为您可以通过修改 pdf.py 来解决您的特定问题。在 PageObject.extractText 方法中,您会看到发生了什么:

def extractText(self):
[...]
for operands,operator in content.operations:
if operator == "Tj":
_text = operands[0]
if isinstance(_text, TextStringObject):
text += _text
elif operator == "T*":
text += "\n"
elif operator == "'":
text += "\n"
_text = operands[0]
if isinstance(_text, TextStringObject):
text += operands[0]
elif operator == '"':
_text = operands[2]
if isinstance(_text, TextStringObject):
text += "\n"
text += _text
elif operator == "TJ":
for i in operands[0]:
if isinstance(i, TextStringObject):
text += i

如果运算符是 TjTJ(在您的示例 PDF 中是 Tj),则仅附加文本,不添加换行符。现在您不一定想要添加换行符,至少如果我正在正确阅读 PDF 引用:Tj/TJ 只是单个和多个显示字符串运算符,并且某种分隔符的存在不是强制性的。

无论如何,如果您将此代码修改为类似

def extractText(self, Tj_sep="", TJ_sep=""):

[...]

        if operator == "Tj":
_text = operands[0]
if isinstance(_text, TextStringObject):
text += Tj_sep
text += _text

[...]

        elif operator == "TJ":
for i in operands[0]:
if isinstance(i, TextStringObject):
text += TJ_sep
text += i

那么默认行为应该是相同的:

In [1]: pdf.getPage(1).extractText()[1120:1250]
Out[1]: u'ing an individual which, because of name, identifyingnumber, mark or description can be readily associated with a particular indiv'

但您可以在需要时更改它:

In [2]: pdf.getPage(1).extractText(Tj_sep=" ")[1120:1250]
Out[2]: u'ta" means any information concerning an individual which, because of name, identifying number, mark or description can be readily '

In [3]: pdf.getPage(1).extractText(Tj_sep="\n")[1120:1250]
Out[3]: u'ta" means any information concerning an individual which, because of name, identifying\nnumber, mark or description can be readily '

或者,您可以通过就地修改操作数本身来简单地自己添加分隔符,但这可能会破坏其他东西(像 get_original_bytes 这样的方法让我很紧张)。

最后,如果您不想编辑 pdf.py 本身:您可以简单地将此方法提取到一个函数中。

关于python - pyPdf 忽略 PDF 文件中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11017379/

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