Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将pdf转换为文本,编码错误_Python_Pdf_Text_Encoding_Error Handling - Fatal编程技术网

Python-将pdf转换为文本,编码错误

Python-将pdf转换为文本,编码错误,python,pdf,text,encoding,error-handling,Python,Pdf,Text,Encoding,Error Handling,我试图将pdf文档转换为txt文件。 (pdf文件示例) 所以我试着如下。 但是提取的文本很奇怪,就像??챘#?遏?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/pro

我试图将pdf文档转换为txt文件。 (pdf文件示例)

所以我试着如下。 但是提取的文本很奇怪,就像
??챘#?遏?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-64位韩语版本

我尝试了另一种方法,使用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”编解码器无法对602位置的字符u'\u0152'进行编码:序号不在范围(128)”错误

前一个代码根本无法工作,PDF不一定包含直接可读的文本。但后一种使用pyPdf的代码看起来更有希望

之所以引发,是因为(
页面
)不是字符串,而是
f.write
希望看到字符串

因此,您可以尝试使用文档中的
extractText
方法:

for page in input.pages:
    f.write(page.extractText().encode('UTF-8'))

以前的代码根本无法工作,PDF根本不一定包含直接可读的文本。但后一种使用pyPdf的代码看起来更有希望

之所以引发,是因为(
页面
)不是字符串,而是
f.write
希望看到字符串

因此,您可以尝试使用文档中的
extractText
方法:

for page in input.pages:
    f.write(page.extractText().encode('UTF-8'))

以前的代码根本无法工作,PDF根本不一定包含直接可读的文本。但后一种使用pyPdf的代码看起来更有希望

之所以引发,是因为(
页面
)不是字符串,而是
f.write
希望看到字符串

因此,您可以尝试使用文档中的
extractText
方法:

for page in input.pages:
    f.write(page.extractText().encode('UTF-8'))

以前的代码根本无法工作,PDF根本不一定包含直接可读的文本。但后一种使用pyPdf的代码看起来更有希望

之所以引发,是因为(
页面
)不是字符串,而是
f.write
希望看到字符串

因此,您可以尝试使用文档中的
extractText
方法:

for page in input.pages:
    f.write(page.extractText().encode('UTF-8'))
  • pdf命令流使用类似于拉丁语-1的编码进行编码
  • 命令流包括在页面上显示内容的说明
  • 如果这些东西是“文本”,那么它实际上是显示字符形状的指令,即取自字体(或字体子集或多个字体位的组合)的字形
  • 大多数情况下,翻译这些文件中的字节所需的信息 (比如)unicode文本的说明存储在PDF中,但有时不存储,有时根本不可能进行翻译(例如字体打印徽标)
  • PyPDF2(和许多其他开源PDF软件包)不包含处理此问题的全部复杂性的功能,但幸运的是,许多文档创建者依赖于一小部分“标准编码”,其中包括许多拉丁语-1变体,“提取文本”功能在这些情况下提供了可用的结果。我还发现PDF中的字体定义具有替换映射,可以为使用的每个字节提供glyph的名称,并且发现修改PyPDF2以处理此问题很容易。其他情况就不那么简单了

  • 最后,在尝试从PDF中提取可读文本时,还需要考虑另外两个因素。首先,一些PDF流可以被压缩,而一些是加密的。PyPDF2可以处理这两种情况。第二个问题是,PDF指令只是将字符放在页面上的特定点上。在大多数情况下,PDF编写者可能会按照阅读顺序编写数据,但可能会在单词内以及在分词时更改位置

  • pdf命令流使用类似于拉丁语-1的编码进行编码
  • 命令流包括在页面上显示内容的说明
  • 如果这些东西是“文本”,那么它实际上是显示字符形状的指令,即取自字体(或字体子集或多个字体位的组合)的字形
  • 大多数情况下,翻译这些文件中的字节所需的信息 (比如)unicode文本的说明存储在PDF中,但有时不存储,有时根本不可能进行翻译(例如字体打印徽标)
  • PyPDF2(和许多其他开源PDF软件包)不包含处理此问题的全部复杂性的功能,但幸运的是,许多文档创建者依赖于一小部分“标准编码”,其中包括许多拉丁语-1变体,“提取文本”功能在这些情况下提供了可用的结果。我还发现PDF中的字体定义具有替换映射,可以为使用的每个字节提供glyph的名称,并且发现修改PyPDF2以处理此问题很容易。其他情况就不那么简单了

  • 最后,在尝试从PDF中提取可读文本时,还需要考虑另外两个因素。首先,一些PDF流可以被压缩,而一些是加密的。PyPDF2可以处理这两种情况。第二个问题是,PDF指令只是将字符放在页面上的特定点上。在大多数情况下,PDF编写者可能会按照阅读顺序编写数据,但可能会在单词内以及在分词时更改位置

  • pdf命令流使用类似于拉丁语-1的编码进行编码
  • 命令流包括在页面上显示内容的说明
  • 如果这些东西是“文本”,那么它实际上是显示字符形状的指令,即取自字体(或字体子集或多个字体位的组合)的字形
  • 大多数情况下,翻译这些文件中的字节所需的信息 (比如)unicode文本的说明存储在PDF中,但有时不存储,有时根本不可能进行翻译(例如,字体打印lo)