Ich möchte die Häufigkeit des Auftretens von Wörtern mithilfe der von amueller erstellten Word Cloud-Python-Bibliothek visualisieren.
Es ist so ein Typ.
Eine Beschreibung dieser Bibliothek finden Sie hier. http://amueller.github.io/word_cloud/index.html
Sie können es einfach installieren, indem Sie den Quellcode von git abrufen.
git clone https://github.com/amueller/word_cloud
cd word_cloud
python setup.py install
Im Gegensatz zu Englisch hat Japanisch keine klaren Wortumbrüche. Um Wörter zu trennen, verwenden wir eine Software namens MeCab, um sie in Wörter auszuschneiden. [Mecab installieren] (Http://qiita.com/kenmatsu4/items/02034e5688cc186f224b#1-1mecab Installation) wurde in diesem Link erläutert, sodass Sie es installieren können, indem Sie auf diesen Link verweisen.
Darüber hinaus sind die folgenden Bibliotheken erforderlich. Bereiten Sie sie daher vor.
pip install beautifulsoup4
pip install requests
Jetzt, wo ich fertig bin, schreibe ich den Code sofort. Der erste ist das Importieren der erforderlichen Bibliotheken.
#Bibliothek importieren
%matplotlib inline
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from bs4 import BeautifulSoup
import requests
import MeCab as mc
Eine Funktion, die MeCab verwendet, um Wörter auszuschneiden und in eine Liste aufzunehmen. Die Teile beschränken sich auf Nomenklaturen, Verben, Adjektive und Zusätze, um Wörter zu visualisieren und zu extrahieren, die wahrscheinlich bedeutungsvoll sind.
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 != "": #Kopf- und Fußzeilen ausschließen
word_type = node.feature.split(",")[0]
if word_type in ["Adjektiv", "Verb","Substantiv", "Adverb"]:
output.append(node.surface)
node = node.next
if node is None:
break
return output
Verwenden Sie Beutiful Soup, um den in der URL angegebenen Text zu erfassen. Nur der Text kann gemäß der HTML-Struktur von Qiita extrahiert werden.
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)
Ab hier ist die Produktion, Word Cloud Generation. Sie können Wörter ausschließen, die nicht viel Sinn machen, indem Sie sie als Stoppwörter angeben. Verwenden Sie diese Option. Bei der Implementierung auf einem Mac muss außerdem die Schriftart angegeben werden. Geben Sie daher font_path an.
def create_wordcloud(text):
#Geben Sie den Schriftpfad entsprechend der Umgebung an.
#fpath = "/System/Library/Fonts/HelveticaNeue-UltraLight.otf"
fpath = "/Library/Fonts/Hiragino Kakugo Pro W3.otf"
#Stoppen Sie die Worteinstellung
stop_words = [ u'Teru', u'Ist', u'Werden', u'Sein', u'Machen', u'Gibt es', u'Ding', u'Dies', u'Herr.', u'Tu es', \
u'Gib mir', u'machen', u'Gib mir', u'damit', u'Lassen', u'tat', u'Überlegen', \
u'Es', u'Hier', u'Chan', u'Kun', u'', u'Hand',u'Zu',u'Zu',u'Ist',u'von', u'Aber', u'Wann', u'Ta', u'Shi', u'damit', \
u'Abwesend', u'Ebenfalls', u'Nana', u'ich', u'Oder', u'Damit', 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()
Da dies die Funktionsdefinition der erforderlichen Verarbeitung ist, erstellen wir mit diesen Word Cloud. Trennen Sie jedes Wort in eine einzelne Zeichenfolge und übergeben Sie es an die Word Cloud-Erstellungsfunktion.
Ich möchte @ t_saekos Artikel "Was ich getan habe, als ich plötzlich als Regisseur in ein brennendes Projekt verwickelt wurde" verwenden. (Weil es interessant war, kürzlich zu lesen)
url = "http://qiita.com/t_saeko/items/2b475b8657c826abc114"
wordlist = get_wordlist_from_QiitaURL(url)
create_wordcloud(" ".join(wordlist).decode('utf-8'))
Es fühlt sich ziemlich gut an!
Der vollständige Code wurde auf gist hochgeladen.
Recommended Posts