如何忽略Python中词云中的某些词?
How to ignore some words in a word cloud in Python?
在Python3和Pandas中,我有这个程序可以从列中制作词云:
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)})
autores_atuais.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6632 entries, 74057 to 84859
Data columns (total 10 columns):
IdAutor 6632 non-null object
IdDocumento 6632 non-null object
NomeAutor 6632 non-null object
AnoLegislativo 6632 non-null object
CodOriginalidade 5295 non-null object
DtEntradaSistema 6632 non-null object
DtPublicacao 6632 non-null object
Ementa 6632 non-null object
IdNatureza 6632 non-null object
NroLegislativo 6632 non-null object
dtypes: object(10)
memory usage: 569.9+ KB
wordcloud = WordCloud().generate(' '.join(autores_atuais['Ementa']))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
请问,云里有些话怎么能忽略呢?比如小字("de","ao")和某些字("Estado")
我认为需要 boolean indexing
with ~
for inverse condition with isin
for filter list of words with str.len
按单词长度进行过滤,必要时按 |
:
进行链条件过滤
autores_atuais = pd.DataFrame({'Ementa':['Estado','another','be','de','def','bax']})
print (autores_atuais)
Ementa
0 Estado
1 another
2 be
3 de
4 def
5 bax
m1 = autores_atuais['Ementa'].isin(['Estado','another','next'])
m2 = autores_atuais['Ementa'].str.len() < 3
s = autores_atuais.loc[~(m1 | m2), 'Ementa']
print (s)
4 def
5 bax
Name: Ementa, dtype: object
&
与 AND
的类似替代方案,并通过 ~
反转第一个条件,然后通过 >=
反转第一个条件:
m1 = ~autores_atuais['Ementa'].isin(['Estado','another','next'])
m2 = autores_atuais['Ementa'].str.len() >= 3
s = autores_atuais.loc[m1 & m2, 'Ementa']
print (s)
4 def
5 bax
Name: Ementa, dtype: object
wordcloud = WordCloud().generate(' '.join(s))
要删除短词(例如,2 个或更少),您可以使用
autores_atuais = autores_atuais[autores_atuais.Ementa.str.len() <= 2]
要在列表中删除单词(例如 restricted = ['Estado']
),您可以使用
autores_atuais = autores_atuais[~autores_atuais.Ementa.isin(restricted)]
我认为您正在使用 amueller 的 wordcloud
模块?如果是这样,则有一个 stopwords
参数允许您指定包含要排除的单词的文件。
例如,如果您创建一个名为 stopwords.txt
的文本文件并将其保存在与 csv 文件相同的文件夹中,其中包含:
de
ao
Estado
然后改为:
wordcloud = WordCloud(stopwords='stopwords.txt').generate(' '.join(autores_atuais['Ementa']))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
应该正确地排除这些词。要排除的默认单词集包含在模块文件夹中,应称为 stopwords
。如果您经常 运行 遇到相同的问题,那么在此处修改此默认文件可能会有所帮助。
在Python3和Pandas中,我有这个程序可以从列中制作词云:
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)})
autores_atuais.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6632 entries, 74057 to 84859
Data columns (total 10 columns):
IdAutor 6632 non-null object
IdDocumento 6632 non-null object
NomeAutor 6632 non-null object
AnoLegislativo 6632 non-null object
CodOriginalidade 5295 non-null object
DtEntradaSistema 6632 non-null object
DtPublicacao 6632 non-null object
Ementa 6632 non-null object
IdNatureza 6632 non-null object
NroLegislativo 6632 non-null object
dtypes: object(10)
memory usage: 569.9+ KB
wordcloud = WordCloud().generate(' '.join(autores_atuais['Ementa']))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
请问,云里有些话怎么能忽略呢?比如小字("de","ao")和某些字("Estado")
我认为需要 boolean indexing
with ~
for inverse condition with isin
for filter list of words with str.len
按单词长度进行过滤,必要时按 |
:
autores_atuais = pd.DataFrame({'Ementa':['Estado','another','be','de','def','bax']})
print (autores_atuais)
Ementa
0 Estado
1 another
2 be
3 de
4 def
5 bax
m1 = autores_atuais['Ementa'].isin(['Estado','another','next'])
m2 = autores_atuais['Ementa'].str.len() < 3
s = autores_atuais.loc[~(m1 | m2), 'Ementa']
print (s)
4 def
5 bax
Name: Ementa, dtype: object
&
与 AND
的类似替代方案,并通过 ~
反转第一个条件,然后通过 >=
反转第一个条件:
m1 = ~autores_atuais['Ementa'].isin(['Estado','another','next'])
m2 = autores_atuais['Ementa'].str.len() >= 3
s = autores_atuais.loc[m1 & m2, 'Ementa']
print (s)
4 def
5 bax
Name: Ementa, dtype: object
wordcloud = WordCloud().generate(' '.join(s))
要删除短词(例如,2 个或更少),您可以使用
autores_atuais = autores_atuais[autores_atuais.Ementa.str.len() <= 2]
要在列表中删除单词(例如 restricted = ['Estado']
),您可以使用
autores_atuais = autores_atuais[~autores_atuais.Ementa.isin(restricted)]
我认为您正在使用 amueller 的 wordcloud
模块?如果是这样,则有一个 stopwords
参数允许您指定包含要排除的单词的文件。
例如,如果您创建一个名为 stopwords.txt
的文本文件并将其保存在与 csv 文件相同的文件夹中,其中包含:
de
ao
Estado
然后改为:
wordcloud = WordCloud(stopwords='stopwords.txt').generate(' '.join(autores_atuais['Ementa']))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
应该正确地排除这些词。要排除的默认单词集包含在模块文件夹中,应称为 stopwords
。如果您经常 运行 遇到相同的问题,那么在此处修改此默认文件可能会有所帮助。