Ich bin ein Anfänger, aber nachdem ich Python geübt habe, möchte ich ein beeindruckendes Bild in Word Cloud schreiben! Ich habe es genossen. Schreiben Sie den Arbeitsinhalt als Memorandum auf.
Arbeitsumgebung ist Ubuntu18.04.4 LTS Python 3.6.9 mecab-python3 0.996.5
Bitte lesen Sie die Dateiargumente usw. im Quellcode dieses Artikels entsprechend Ihrer eigenen Umgebung.
WordCloud ist eine Methode zum Auswählen mehrerer Wörter, die häufig in einem Satz vorkommen, und zum Anzeigen dieser Wörter in einer Größe entsprechend der Häufigkeit. Es bezieht sich auf das automatische Anordnen von Wörtern, die häufig auf Webseiten und Blogs erscheinen. Indem Sie nicht nur die Größe der Zeichen, sondern auch Farbe, Schriftart und Ausrichtung ändern, können Sie den Inhalt des Textes auf einen Blick beeindrucken. (Aus dem Kommentar zu Digital Daijisen)
Dies ist die Figur der Wortwolke, die dieses Mal endlich fertiggestellt wurde. Der Text wurde getrennt von der Rede von Steve Jobs, dem Gründer von Apple, erstellt und als Eingabedatei übergeben.
Bei Verwendung eines Maskenbilds wird die Zeichenfolge auch im Umriss der Jobs- und Apple-Logos angezeigt.
Charaktere wie ich, das Leben, die Vorlieben und die Universität fallen auf. Ich bin glücklich, weil ich persönlich finde, dass es cool war: klatschen:
Hier ist der endgültige Quellcode zum Erstellen des obigen Bildes.
sample4wordcloud.py
#coding: utf-8
from PIL import Image
import numpy as np
from matplotlib import pyplot as plt
from wordcloud import WordCloud
import requests
import MeCab
#Word Cloud-Erstellungsfunktion(Englische Textversion)
def create_wordcloud_en(text, image):
fontpath = 'NotoSansCJK-Regular.ttc'
stop_words_en = [u'am', u'is', u'of', u'and', u'the', u'to', u'it', \
u'for', u'in', u'as', u'or', u'are', u'be', u'this', u'that', u'will', u'there', u'was']
wordcloud = WordCloud(background_color="white",
font_path=fontpath,
width=900,
height=500,
mask = msk,
contour_width=1,
contour_color="black",
stopwords=set(stop_words_en)).generate(text)
#Zeichnung
plt.figure(figsize=(15,20))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
#PNG-Ausgabe
wordcloud.to_file("wc_image_en.png ")
#Word Cloud-Erstellungsfunktion(Japanische Textversion)
def create_wordcloud_ja(text, image):
fontpath = 'NotoSansCJK-Regular.ttc'
stop_words_ja = ['Ding', 'Ding', 'Wann', 'damit', 'Etc.', 'Dies', 'Yo', 'Diesら', 'Es', 'alles']
#Morphologische Analyse
tagger = MeCab.Tagger()
tagger.parse('')
node = tagger.parseToNode(text)
word_list = []
while node:
word_type = node.feature.split(',')[0]
word_surf = node.surface.split(',')[0]
if word_type == 'Substantiv' and word_surf not in stop_words_ja:
word_list.append(node.surface)
node = node.next
word_chain = ' '.join(word_list)
wordcloud = WordCloud(background_color="white",
font_path=fontpath,
width=900,
height=500,
mask = msk,
contour_width=1,
contour_color="black",
stopwords=set(stop_words_ja)).generate(word_chain)
#Zeichnung
plt.figure(figsize=(15,20))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
wordcloud.to_file("wc_image_ja.png ")
#Erforderliche Dateien aufrufen
#Text lesen
with open('jobs.txt', 'r', encoding='utf-8') as fi:
text = fi.read()
#Laden des zu verwendenden Maskenbildes
msk = np.array(Image.open("apple.png "))
create_wordcloud_ja(text, msk)
Es sind zwei Funktionen zum Erstellen einer Wortwolke definiert, eine für japanischen Text und eine für englischen Text. Ich habe ähnlichen Code geschrieben, daher bin ich mir sicher, dass er hier schlauer ist ... Soll ich mit der Klasse schreiben?
Die Verarbeitungsmethode bis zum Zeichnen einer Wortwolke unterscheidet sich zwischen englischem und japanischem Text.
Auf Englisch, wie "Ich mag Apple", wird jedes Wort durch ein Leerzeichen getrennt. Wenn Sie es also in Teile teilen, verlieren Sie nicht den Überblick über die Unterteilung. Im Fall von Japanisch ist die Unterteilung jedoch nicht klar wie "Ich mag Apple".
Daher ist es im Fall von Japanisch erforderlich, eine morphologische Analyse durchzuführen, um die Zeichenketten zu trennen. Dieses Mal wurde eine morphologische Analyse unter Verwendung von MeCab durchgeführt.
sample.py
tagger = MeCab.Tagger()
tagger.parse('')
node = tagger.parseToNode(text)
word_list = []
while node:
word_type = node.feature.split(',')[0]
word_surf = node.surface.split(',')[0]
if word_type == 'Substantiv' and word_surf not in stop_words_ja:
word_list.append(node.surface)
node = node.next
Das Obige ist der Teil, in dem die morphologische Analyse durchgeführt wird.
tagger = MeCab.Tagger()
Einstellung des Ausgabemodus. Der Ausgabemodus ändert sich, wenn die Argumenteinstellung geändert wird.
Alle Argumente beginnen mit O und es ist süß (lacht)
tagger.parse('')
Ich verstehe diesen Teil nicht wirklich, Es scheint, dass Sie UnicodeDecodeError vermeiden können, indem Sie dies schreiben, bevor Sie die Daten an den Parser übergeben ...
node = tagger.parseToNode(text)
Ersetzen Sie das Analyseergebnis durch die Oberfläche (Wort) und das Merkmal (Teilteilinformationen) für den Knoten. Sie können auf jedes zugreifen, indem Sie node.surface oder node.feature schreiben.
word_list = []
while node:
word_type = node.feature.split(',')[0]
word_surf = node.surface.split(',')[0]
if word_type == 'Substantiv' and word_surf not in stop_words_ja:
word_list.append(node.surface)
node = node.next
word_chain = ' '.join(word_list)
Lesen Sie jeden Knoten der Reihe nach und fügen Sie die Teilwörter, die Nomenklatur sind und nicht in stop_words_ja enthalten sind, zu word_list hinzu.
Lassen Sie dann das Trennzeichen leer und konvertieren Sie die Liste in eine Zeichenfolge, um word_chain zu erhalten.
Eigentlich wurde das erste Bild, das ich gezeichnet habe, aus der gesamten Nomenklatur ausgegeben, ohne versteckte Zeichen zu setzen. Dann sieht es so aus ...
In dieser Abbildung fallen Zeichenketten wie "koto", "it" und "yo" auf, die nicht interessant sind, selbst wenn sie zu stark angezeigt werden.
Das ist etwas ...: Stirnrunzeln2:
Also habe ich eine Wortliste erstellt, die ich nicht anzeigen möchte, und ich habe versucht, die Zeichenfolgen nicht anzuzeigen, die nicht angezeigt werden sollen.
Ich habe nach langer Zeit versucht, Python zu berühren. Immerhin macht es Spaß ~: entspannt: Als nächstes denke ich daran, SNS zu kratzen und damit zu spielen. Wenn Sie Fehler oder Ratschläge im Inhalt dieses Artikels haben, teilen Sie uns dies bitte mit.
https://sleepless-se.net/2018/08/24/python-mecab-wakatigaki/
https://qiita.com/furipon308/items/be97abf25cf4caa0574e
https://qiita.com/yonedaco/items/27e1ad19132c9f1c9180
https://analysis-navi.com/?p=2295
Recommended Posts