如何在Pandas DataFrame中提取唯一单词?生成词袋模型遇异常内容
解决词袋模型提取唯一单词时的异常内容问题
嘿,我懂你碰到的麻烦——用to_string()合并评论文本后,提取出的单词里混进了索引数字、换行符和省略号,对吧?这是因为Series.to_string()根本不是用来合并文本内容的工具,它的作用是把整个Series转换成带行索引、换行符,甚至长文本自动截断的格式化字符串,所以才会出现fel...\n1093这种奇怪的内容。
下面给你几个靠谱的解决步骤:
第一步:正确合并所有评论文本
要把review_body列的所有文本合并成一个干净的大字符串,应该用这两种方法之一,还能自动处理空值:
方法1:用str.cat()(Pandas原生方法)
# 先过滤空值,再用空格拼接所有文本 all_text = df['review_body'].dropna().str.cat(sep=' ')
方法2:用join()结合tolist()
# 同样先过滤空值,转成列表后拼接 all_text = ' '.join(df['review_body'].dropna().tolist())
这两种方法都不会混入索引或截断标记,得到的就是纯评论内容拼接的字符串。
第二步:提取干净的唯一单词
拿到干净的文本后,还需要做一些基础预处理(不然会把Hello和hello当成不同单词,或者把带标点的good!和good分开):
import string # 1. 转成小写,避免大小写差异 # 2. 去掉所有标点符号 clean_text = all_text.lower().translate(str.maketrans('', '', string.punctuation)) # 按空格分词 words_list = clean_text.split() # 转成集合去重,再转回列表 unique_words = list(set(words_list))
进阶优化(可选)
如果你的评论里有很多口语化表达(比如don't、can't),或者有连字符单词(比如state-of-the-art),可以用NLTK的专业分词工具来处理:
from nltk.tokenize import word_tokenize import string # 先预处理 clean_text = all_text.lower().translate(str.maketrans('', '', string.punctuation)) # 用word_tokenize分词,比split()更智能 words_list = word_tokenize(clean_text) unique_words = list(set(words_list))
这样处理出来的唯一单词就完全符合词袋模型的需求啦!
内容的提问来源于stack exchange,提问作者Luis Ramon Ramirez Rodriguez
相关产品推荐
相关产品推荐

