如何在Python词云生成中忽略指定词汇?
如何在Pandas生成词云时过滤指定词汇
嘿,我来帮你搞定这个词云过滤的问题!要忽略小词(比如"de"、"ao"这类常见停用词)和特定词汇(比如"Estado"),有两种实用的方法,我都给你整理好了:
方法1:直接使用WordCloud的stopwords参数
WordCloud库本身支持通过stopwords参数传入要排除的词汇集合。你可以把需要忽略的小词和特定词汇都放进这个集合里,生成词云时就会自动跳过它们。
修改后的代码示例
import pandas as pd import numpy as np from wordcloud import WordCloud import matplotlib.pyplot as plt # 读取数据(保留你原来的读取逻辑) autores_atuais = pd.read_csv( "deputados_autores_projetos.csv", sep=',', encoding='utf-8', converters={ 'IdAutor': lambda x: str(x), 'IdDocumento': lambda x: str(x), 'CodOriginalidade': lambda x: str(x), 'IdNatureza': lambda x: str(x), 'NroLegislativo': lambda x: str(x) } ) # 定义要忽略的词汇:包含常见葡语小词 + 你的特定词汇 stop_words = { 'de', 'ao', 'a', 'o', 'que', 'em', 'para', 'com', 'um', 'uma', 'os', 'as', 'no', 'na', 'se', 'por', 'Estado' # 你的特定词汇 } # 生成词云时传入stopwords参数 wordcloud = WordCloud(stopwords=stop_words).generate(' '.join(autores_atuais['Ementa'])) # 展示词云 plt.imshow(wordcloud) plt.axis("off") plt.show()
方法2:先预处理文本再生成词云
如果需要更灵活的过滤(比如忽略大小写差异,比如"Estado"和"estado"都要排除),可以先对Ementa列的文本进行预处理,把要过滤的词全部移除后,再生成词云。
修改后的代码示例
import pandas as pd import numpy as np from wordcloud import WordCloud import matplotlib.pyplot as plt # 读取数据(和之前一致) autores_atuais = pd.read_csv( "deputados_autores_projetos.csv", sep=',', encoding='utf-8', converters={ 'IdAutor': lambda x: str(x), 'IdDocumento': lambda x: str(x), 'CodOriginalidade': lambda x: str(x), 'IdNatureza': lambda x: str(x), 'NroLegislativo': lambda x: str(x) } ) # 定义要忽略的词汇集合(统一转小写,方便匹配所有大小写变体) stop_words = { 'de', 'ao', 'a', 'o', 'que', 'em', 'para', 'com', 'um', 'uma', 'os', 'as', 'no', 'na', 'se', 'por', 'estado' } # 定义文本预处理函数:拆分词汇、过滤停用词、重组文本 def filter_text(text): # 把文本转成小写,拆分词汇 words = text.lower().split() # 过滤掉在stop_words里的词汇 filtered_words = [word for word in words if word not in stop_words] # 重新组合成字符串 return ' '.join(filtered_words) # 对Ementa列应用预处理函数 filtered_ementas = autores_atuais['Ementa'].apply(filter_text) # 用处理后的文本生成词云 wordcloud = WordCloud().generate(' '.join(filtered_ementas)) # 展示词云 plt.imshow(wordcloud) plt.axis("off") plt.show()
额外提示
如果需要更全面的葡语停用词,不用手动输入所有小词,可以借助nltk库的现成集合:
import nltk nltk.download('stopwords') from nltk.corpus import stopwords # 获取葡语停用词并转成集合 pt_stopwords = set(stopwords.words('portuguese')) # 再添加你的特定词汇 pt_stopwords.add('Estado')
之后直接把pt_stopwords传给WordCloud的stopwords参数就行啦!
内容的提问来源于stack exchange,提问作者Reinaldo Chaves
相关产品推荐
相关产品推荐

