You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Colab中utf-8解码错误求助:基于PyPDF4构建Word2Vec数据集的问题排查与解决

解决TensorFlow vectorize_layer.get_vocabulary()的UTF-8解码错误及PDF文本处理优化方案

嘿,这个问题我太熟了——你踩了一个很典型的坑:用TensorFlow的纯文本数据集API去直接读PDF文件!让我给你拆解清楚问题,再给你一套可行的修复方案。

为什么会出现UTF-8解码错误?

你前面已经用PyPDF4把PDF里的文本提取成字符串了,但后面又错误地用tf.data.TextLineDataset('ITC-1.pdf')直接读取原始PDF文件。TextLineDataset是专门用来读取纯文本文件的,它会把文件内容当成UTF-8编码的文本解析,但PDF本质是二进制格式,里面包含大量非UTF-8的控制字节(比如你看到的0xb0),自然会触发解码失败。

而且你前面提取文本的步骤完全被浪费了,相当于做了无用功后又绕回错误的路径。

修复后的完整代码

下面是修正后的代码,核心思路是:用PyPDF4提取纯文本后,直接把文本转换成TensorFlow数据集,而不是去读原始PDF文件:

import PyPDF4
import tensorflow as tf
from google.colab import files

# 上传PDF文件
files.upload()

# 用PyPDF4提取PDF中的纯文本
fileReader = PyPDF4.PdfFileReader('ITC-1.pdf')
full_text = ""
# 从第2页开始提取(保持你原来的页码逻辑)
for i in range(2, fileReader.numPages):
    page_text = fileReader.getPage(i).extractText()
    full_text += page_text

# 分割成句子(优化了空格处理,避免空句子)
sentences = []
temp_text = full_text.strip()
while '.' in temp_text:
    index = temp_text.find('.')
    # 提取句子并去掉前后空格
    sentence = temp_text[:index].strip()
    if sentence:
        sentences.append(sentence)
    temp_text = temp_text[index+1:].strip()
# 处理最后一段没有句号的文本
if temp_text:
    sentences.append(temp_text)

# 用提取后的纯文本创建TensorFlow数据集
text_ds = tf.data.Dataset.from_tensor_slices(sentences)
# 过滤空句子
text_ds = text_ds.filter(lambda x: tf.cast(tf.strings.length(x), bool))

# 初始化并适配文本向量化层
vectorize_layer = tf.keras.layers.TextVectorization()
vectorize_layer.adapt(text_ds.batch(1024))

# 现在获取词汇表不会报错了!
inverse_vocab = vectorize_layer.get_vocabulary()
# 打印前10个词汇验证
print("前10个词汇:", inverse_vocab[:10])

更优的文本处理方案

你原来的按句号分割句子的逻辑比较简陋,遇到缩写(比如Mr.)、小数点(比如3.14)会错误分割句子。推荐用NLTK的专业句子分词器,在Colab里可以这样用:

# 安装并导入NLTK
!pip install nltk
import nltk
nltk.download('punkt')
from nltk.tokenize import sent_tokenize

# 替换原来的句子分割部分
sentences = sent_tokenize(full_text)
# 过滤空句子
sentences = [s.strip() for s in sentences if s.strip()]

这个分词器会智能识别句子边界,比手动按句号分割靠谱得多。

关键总结

  • 永远不要用TextLineDataset直接读取PDF、Word这类二进制格式的文件,必须先转换成纯文本
  • 利用你已经提取好的文本创建数据集,不要做重复且错误的操作
  • 复杂文本的分词尽量用专业工具,避免手动分割的缺陷

内容的提问来源于stack exchange,提问作者huy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:29:05