Nlp Python PYPDF2:“utf-8”编解码器无法解码位置395中的字节0x80:无效的开始字节

Nlp Python PYPDF2:“utf-8”编解码器无法解码位置395中的字节0x80:无效的开始字节,nlp,nltk,pypdf2,Nlp,Nltk,Pypdf2,我正在使用教程创建pdf文件的语料库。我有以下代码: import nltk import PyPDF2 from nltk.corpus.reader.plaintext import PlaintextCorpusReader from PyPDF2 import PdfFileReader def getTextPDF(pdfFileName): pdf_file = open(pdfFileName, 'rb') readpdf = PdfFileReader(pdf_file) te

我正在使用教程创建pdf文件的语料库。我有以下代码:

import nltk
import PyPDF2
from nltk.corpus.reader.plaintext import PlaintextCorpusReader
from PyPDF2 import PdfFileReader

def getTextPDF(pdfFileName):
pdf_file = open(pdfFileName, 'rb')
readpdf = PdfFileReader(pdf_file)
text = []
for i in range(0,readpdf.getNumPages()):
    text.append(readpdf.getPage(i).extractText())
return '\n'.join(text)

corpusDir = 'reports/'

jun15 = getTextPDF('reports/June2015.pdf')
dec15 = getTextPDF('reports/December2015.pdf')
jun16 = getTextPDF('reports/June2016.pdf')
dec16 = getTextPDF('reports/December2016.pdf')
jun17 = getTextPDF('reports/June2017.pdf')
dec17 = getTextPDF('reports/December2017.pdf')

files = [jun15,dec15,jun16,dec16,jun17,dec17]
for idx, f in enumerate(files):
    with open (corpusDir+str(idx)+'.txt','w') as output:
        output.write(f)

corpus = PlaintextCorpusReader(corpusDir, '.*')

print (corpus.words())
UnicodeCodeError回溯最近的呼叫 最后的 -->1.打印语料库

/中的anaconda3/lib/python3.6/site-packages/nltk/collections.py reprself 224件=[] 225长度=5 ->226对于自学英语: 227件 228长度+=透镜片[-1]+2

/anaconda3/lib/python3.6/site-packages/nltk/corpus/reader/util.py in 从self迭代,开始 400 401从这件作品中得到我们能得到的一切。 ->402对于工件中的tok。从MAX0迭代,开始tok偏移: 403屈服tok 404

/anaconda3/lib/python3.6/site-packages/nltk/corpus/reader/util.py in 从self迭代,开始 294自身。_电流_toknum=toknum 295 self.\u current\u blocknum=块索引 ->296令牌=self.read\u blockself.\u流 297断言isinstancetokens、元组、列表、AbstractLazySequence、, 298“块读取器%s应返回列表或元组”。%

/anaconda3/lib/python3.6/site-packages/nltk/corpus/reader/plaintext.py 在读字块中,流 120字=[] 121对于范围20中的i:一次读20行。 ->122个字。extendself.\u word\u tokenizer.tokenizestream.readline 123返回单词 124

/readlineself中的anaconda3/lib/python3.6/site-packages/nltk/data.py, 尺寸1166,为真:1167 startpos= self.stream.tell-lenself.bytebuffer ->1168 new_chars=self.\u readreadsize 1169 1170如果我们在一个'\r',那么多读一个字符,因为

/anaconda3/lib/python3.6/site-packages/nltk/data.py in_readself, 大小1398 1399将字节解码为unicode 人物 ->1400个字符,bytes_decoded=self.\u incr_decoded bytes 1401 1402如果我们得到了字节但无法解码任何字节,那么 进一步阅读

/中的anaconda3/lib/python3.6/site-packages/nltk/data.py _incr_decodeslf,字节1429,而True:1430尝试: ->1431如果 异常发生在字符串的末尾

/解码输入中的anaconda3/lib/python3.6/encodings/utf_8.py,错误 14 15 def decode输入,错误='strict': -->16返回codecs.utf_8_解码输入,错误,真 17 18类递增编码器代码。递增编码器:

UnicodeDecodeError:“utf-8”编解码器无法解码位置中的字节0x80 395:起始字节无效


我一直在看不同的帖子,但我仍然不知道问题是我使用了错误的方法,还是我必须对某些东西进行编码或解码。如果是后者,我不知道在哪里。任何想法都将不胜感激

最好查看整个错误消息,但我猜您正在使用python 2,并且您的报告中包含一些utf-8。首先,尝试在开始和打开文件时指定编码:

#!/usr/bin/python
#-*- coding:utf-8 -*- 
import nltk
import PyPDF2
from nltk.corpus.reader.plaintext import PlaintextCorpusReader
from PyPDF2 import PdfFileReader
import codecs
def getTextPDF(pdfFileName):
    pdf_file = codecs.open(pdfFileName, 'rb', encoding='utf8')
    readpdf = PdfFileReader(pdf_file)
    text = []
    for i in range(0,readpdf.getNumPages()):
        text.append(readpdf.getPage(i).extractText())
    return '\n'.join(text)

corpusDir = 'reports/'

jun15 = getTextPDF('reports/June2015.pdf')
dec15 = getTextPDF('reports/December2015.pdf')
jun16 = getTextPDF('reports/June2016.pdf')
dec16 = getTextPDF('reports/December2016.pdf')
jun17 = getTextPDF('reports/June2017.pdf')
dec17 = getTextPDF('reports/December2017.pdf')

files = [jun15,dec15,jun16,dec16,jun17,dec17]
for idx, f in enumerate(files):
    with codecs.open(corpusDir+str(idx)+'.txt','w', encoding='utf8') as output:
        output.write(f)

corpus = PlaintextCorpusReader(corpusDir, '.*')

print (corpus.words())
如果这不起作用,你可以试着用你的琴弦,但这并不理想:

def toUtf8(stringOrUnicode):
    '''
    Returns the argument in utf-8 encoding
    '''
    typeArg = type(stringOrUnicode)
    if typeArg is unicode:
        return stringOrUnicode.encode('utf8').decode('utf8')
    elif typeArg is str:
        return stringOrUnicode.decode('utf8')

否则,请向我们显示错误消息,以尝试准确检测问题所在。

谢谢。我尝试了你给我的第一个建议,但是现在我得到了TypeError:当我尝试使用getTextPDF方法时,必须是str,而不是bytes。