Je voudrais visualiser la fréquence d'apparition des mots à l'aide de la bibliothèque Word Cloud de python créée par amueller.
C'est ce genre de gars.
Une description de cette bibliothèque peut être trouvée ici. http://amueller.github.io/word_cloud/index.html
Vous pouvez facilement l'installer en récupérant simplement le code source de git.
git clone https://github.com/amueller/word_cloud
cd word_cloud
python setup.py install
Contrairement à l'anglais, le japonais n'a pas de sauts de mots clairs, donc pour séparer les mots, nous utilisons un logiciel appelé MeCab pour les découper en mots. [Installer Mecab] (Http://qiita.com/kenmatsu4/items/02034e5688cc186f224b#1-1mecab installation) a été expliqué dans ce lien, vous pouvez donc l'installer en vous référant à ceci.
De plus, les bibliothèques suivantes sont également requises, alors préparez-les.
pip install beautifulsoup4
pip install requests
Maintenant que je suis prêt, j'écrirai le code tout de suite. La première consiste à importer les bibliothèques requises.
#Importer la bibliothèque
%matplotlib inline
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from bs4 import BeautifulSoup
import requests
import MeCab as mc
Une fonction qui utilise MeCab pour découper des mots et les mettre dans une liste. Les parties se limitent à la nomenclature, aux verbes, aux adjectifs et aux adjoints afin de visualiser et d'extraire des mots susceptibles d'avoir un sens.
def mecab_analysis(text):
t = mc.Tagger('-Ochasen -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/')
enc_text = text.encode('utf-8')
node = t.parseToNode(enc_text)
output = []
while(node):
if node.surface != "": #Exclure les en-têtes et les pieds de page
word_type = node.feature.split(",")[0]
if word_type in ["adjectif", "verbe","nom", "adverbe"]:
output.append(node.surface)
node = node.next
if node is None:
break
return output
Utilisez Beutiful Soup pour capturer le texte spécifié dans l'URL. Seul le texte peut être extrait selon la structure HTML de Qiita.
def get_wordlist_from_QiitaURL(url):
res = requests.get(url)
soup = BeautifulSoup(res.text)
text = soup.body.section.get_text().replace('\n','').replace('\t','')
return mecab_analysis(text)
De là, c'est la production, la génération Word Cloud. Vous pouvez exclure des mots qui n'ont pas beaucoup de sens en les spécifiant comme mots vides, alors utilisez ceci. De plus, lors de l'implémentation sur Mac, il est nécessaire de spécifier la police, donc spécifiez font_path.
def create_wordcloud(text):
#Spécifiez le chemin de police en fonction de l'environnement.
#fpath = "/System/Library/Fonts/HelveticaNeue-UltraLight.otf"
fpath = "/Library/Fonts/Hiragino Kakugo Pro W3.otf"
#Arrêter le réglage du mot
stop_words = [ u'Teru', u'Est', u'Devenir', u'Être', u'Faire', u'y a-t-il', u'chose', u'cette', u'M.', u'fais le', \
u'Donnez-moi', u'faire', u'Donnez-moi', u'alors', u'Laisser', u'fait', u'pense', \
u'Il', u'ici', u'Chan', u'Kun', u'', u'main',u'À',u'À',u'Est',u'de', u'Mais', u'Quand', u'Ta', u'Shi', u'alors', \
u'Absent', u'Aussi', u'Nana', u'je', u'Ou', u'Alors', u'Yo', u'']
wordcloud = WordCloud(background_color="white",font_path=fpath, width=900, height=500, \
stopwords=set(stop_words)).generate(text)
plt.figure(figsize=(15,12))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
Étant donné que ce qui précède est la définition de la fonction du traitement nécessaire, nous allons créer Word Cloud en utilisant ces derniers. Séparez chaque mot en une seule chaîne et transmettez-la à la fonction de création de Word Cloud.
J'aimerais utiliser l'article de @ t_saeko "Ce que j'ai fait quand j'ai été soudainement mis dans un projet de gravure en tant que réalisateur". (Parce que c'était intéressant à lire récemment)
url = "http://qiita.com/t_saeko/items/2b475b8657c826abc114"
wordlist = get_wordlist_from_QiitaURL(url)
create_wordcloud(" ".join(wordlist).decode('utf-8'))
Ça fait du bien!
Le code complet a été téléchargé sur gist.
Recommended Posts