我尝试将pdf文档转换为txt文件。 (pdf文件的示例link)
所以我在下面尝试过。
但提取的文字很奇怪??챘#?遏?h첨챦_철?‾n?~w??¬?k
我该如何解决?
#!/usr/bin/python
# -*- coding: cp949 -*-
# -*- coding: utf-8 -*-
# -*- coding: latin-1 -*-
# -*- coding: euc-kr -*-
import codecs
import pyPdf
filename = "d:/data/processed_data/paper/iscram/2006/iscram1.pdf"
#pdf = codecs.open(filename, "rb", encoding = 'utf-8')
pdf = codecs.open(filename, "rb", encoding = 'latin1')
for page in pdf:
print page.encode('utf-8')
我使用win7-64bit韩文版。
我通过使用pyPdf(如下面的
)尝试了另一种方式import os
import glob
from pyPdf import PdfFileReader
import pdfminer
f=open("d:/data/processed_data/paper/iscram/2006/iscram1.txt",'w')
parent = "d:/data/processed_data/paper/iscram/2006"
os.chdir(parent)
filename = os.path.abspath('iscram1.pdf')
input = PdfFileReader(file(filename, "rb"))
for page in input.pages:
f.write(page.extractText())
但它不起作用而且它发生了' ascii'编解码器不能对字符u' \ u0152'进行编码。在位置602:顺序不在范围(128)'错误
答案 0 :(得分:1)
以前的代码根本不起作用,PDF根本不一定包含直接可读的文本。使用pyPdf的后一个代码看起来更有希望。
引发TypeError
是因为pages in PDF(page
)不是字符串,但f.write
期望看到字符串。
因此,您可以尝试使用文档中的extractText
方法:
for page in input.pages:
f.write(page.extractText().encode('UTF-8'))
答案 1 :(得分:0)
PyPDF2(以及许多其他开源PDF软件包)不包含处理此问题的全部功能,但幸运的是,许多文档创建者都依赖一小套“标准编码”,其中包括许多拉丁语-1变体和“提取文本”功能在这些情况下确实提供了可用的结果。我还发现了PDF,其中的字体定义具有替换映射,这些替换映射为您使用的每个字节提供了字形的名称,并且发现修改PyPDF2来解决这一问题很容易。其他情况并非如此简单。
最后,在尝试从PDF提取可读文本时,还需要考虑其他两个因素。首先是一些PDF流可以被压缩,而某些则可以被加密。 PyPDF2可以处理这两种情况。第二个问题是PDF指令仅将字符放在页面上的特定位置。在大多数情况下,PDF编写者可以按阅读顺序写数据,但可以在单词内以及分词处进行位置更改。