Nlp Python PYPDF2:“utf-8”编解码器无法解码位置395中的字节0x80:无效的开始字节
我正在使用教程创建pdf文件的语料库。我有以下代码: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
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。