Ich habe Wordcloud mit Python gemacht.

Einführung

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

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.

Was ist Word Cloud?

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:

wc_image_ja.png

Erstellen Sie WordCloud

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?

Über den Quellcode

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.

Eine grobe Erklärung des Codes für die morphologische Analyse

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.

Abbildung vor Änderung der Quelle

Eigentlich wurde das erste Bild, das ich gezeichnet habe, aus der gesamten Nomenklatur ausgegeben, ohne versteckte Zeichen zu setzen. Dann sieht es so aus ...

image.png

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.

Schließlich

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.

Referenzierte Artikel / verwandte Artikel

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

Ich habe Wordcloud mit Python gemacht.
Ich habe einen Blackjack mit Python gemacht!
Ich habe mit Python einen Blackjack gemacht.
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Wordcloud gespielt!
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe mit Python eine Hex-Map erstellt
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe einen Python-Text gemacht
Ich habe gRPC mit Python ausprobiert
Ich habe COVID19_simulator mit JupyterLab erstellt
Ich habe Word2Vec mit Pytorch gemacht
Othello gemacht mit Python (wie GUI)
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Mit Flask erstellte SNS Python-Grundlagen
Ich habe einen Line-Bot mit Python gemacht!
pyenv-vertualenv installiert die Python3-Serie nicht gut
Ich habe versucht, WebScraping mit Python.
Ich habe meine eigene Python-Bibliothek erstellt
Numer0n mit Elementen, die mit Python erstellt wurden
Ich habe eine SMS mit Python gesendet
Othello-Spieleentwicklung mit Python
Ich mochte den Tweet mit Python. ..
Ich habe mit PyQt5 und Python3 gespielt
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die SMTP-Kommunikation mit Python versucht
Als ich CaboCha in Python3 verfügbar machte, blieb ich stecken (Windows 10)
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe versucht, LINE-Bot mit Python + Flask + ngrok + LINE Messaging API zu erstellen
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
[Ich habe es mit Python gemacht] Tool für die Stapelausgabe von XML-Daten
Lebensspiel mit Python [ich habe es geschafft] (auf Terminal & Tkinter)
FizzBuzz in Python3
Scraping mit Python
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
Statistik mit Python
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (4)
Ich habe ein Pay-Management-Programm in Python erstellt!
Einfacher Slack API-Client mit Python
Scraping mit Python
Python mit Go
Ich habe eine Heatmap mit Seaborn [Python] gezeichnet.
Twilio mit Python