
在进行自然语言处理(nlp)时,文本预处理是至关重要的第一步。然而,当我们在pandas dataframe中处理文本数据时,经常会遇到一个棘手的问题:attributeerror: 'list' object has no attribute 'split' 或 attributeerror: 'str' object has no attribute 'str' 等类型错误。这些错误通常发生在预处理流程中,因为不同的文本操作函数对输入数据的类型有严格要求,而我们的数据类型在处理过程中会从原始字符串变为词语列表,或反之。
核心问题在于:
解决这一问题的关键在于,在处理列表时,我们需要对列表中的每个元素(即每个词语)进行迭代处理,而不是将整个列表作为一个整体字符串来处理。这通常通过列表推导式(list comprehension)在 apply 函数内部实现。
下面我们将详细介绍一个在Pandas DataFrame中实现文本预处理的完整流程,并着重说明如何管理数据类型以避免常见错误。
首先,我们需要导入所有必要的库,并初始化一些全局变量,如词形还原器、停用词列表和POS标签映射。
import pandas as pd
import nltk
import re
import string
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
from unidecode import unidecode
import contractions
# from textblob import TextBlob # 示例代码中已注释,此处作为可选引入
# 下载NLTK必要资源
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('wordnet')
nltk.download('averaged_perceptron_tagger')
# 初始化词形还原器和POS标签映射
lemmatizer = WordNetLemmatizer()
# WordNetLemmatizer 需要词性标签来更准确地还原词形
pos_tag_dict = {"J": wordnet.ADJ, "N": wordnet.NOUN, "V": wordnet.VERB, "R": wordnet.ADV}
# 定义停用词
local_stopwords = set(stopwords.words('english'))
additional_stopwords = ["http", "u", "get", "like", "let", "nan"]
local_stopwords.update(additional_stopwords)
# 排除不想移除的词(如果它们在停用词列表中)
words_to_keep = ["i'", " i ", "me", "my", "we", "our", "us"]
for word in words_to_keep以上就是Pandas DataFrame中NLP文本预处理的正确流程与数据类型管理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号