Как игнорировать некоторые слова в облаке слов в Python? - PullRequest
0 голосов
/ 11 мая 2018

В 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()

enter image description here

Пожалуйста, как я могу игнорировать некоторые слова из облака? Например, маленькие слова («де», «ао») и некоторые слова («эстадо»)

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Чтобы отбросить короткие слова (скажем, 2 или меньше), вы можете использовать

autores_atuais = autores_atuais[autores_atuais.Ementa.str.len() <= 2]

Чтобы добавить слова в список (скажем, restricted = ['Estado']), вы можете использовать

autores_atuais = autores_atuais[~autores_atuais.Ementa.isin(restricted)]
0 голосов
/ 11 мая 2018

Я думаю, что вы используете модуль wordcloud от amueller? Если это так, существует параметр 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. Если вы часто сталкиваетесь с одними и теми же проблемами, может быть полезно изменить этот файл по умолчанию здесь.

0 голосов
/ 11 мая 2018

Я думаю, нужно boolean indexing с ~ для обратного условия с isin для фильтрации списка слов с 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))
...