[PYTHON] Verschrotten Sie Ihren Qiita-Artikel, um eine Wortwolke zu erstellen

Einführung

Es ist ein halbes Jahr her, seit ich Ingenieur geworden bin. Um zurückzublicken, habe ich versucht, eine Wortwolke zu erstellen, indem ich die Textdaten der Artikel, die ich bisher gepostet habe, abgekratzt habe. Ich möchte das Verfahren zu diesem Zeitpunkt verlassen.

Vollständiges Formular

Ich konnte so etwas machen. スクリーンショット 2020-05-08 10.43.08.png Das große Wort "Komponente" ist wahrscheinlich, weil Vue.js "Einführung in" Komponente " über Komponentenkomponenten spricht. Danach gab es viele Dinge wie Heroku, Docker, Flask und so weiter, und ich schrieb Artikel, die mich nostalgisch machten. Es gibt viele universelle Wörter wie "Ändern" und "Hinzufügen". Sie können also ein Stoppwort festlegen, wenn Sie möchten. Übrigens hat My Hatena Blog auf die gleiche Weise auch eine Wortwolke erstellt. Dies ist das Header-Bild von Twitter. Schauen Sie also bitte vorbei. (Es ist interessant, weil es etwas völlig anderes sagt.)

Umgebung

Ich werde es mit erstellen.

Grobe Prozedur

  1. Scraping, um Textdaten zu erhalten
  2. Teilen Sie durch einen morphologischen Analysator (MeCab) in Wörter.
  3. Erstellen Sie eine Wortwolke

Ich werde mit dem Verfahren fortfahren.

Schaben

Verwenden Sie Elemente abrufen in Qiita API. Die Syntax von RequestURL lautet wie folgt.

https://qiita.com/api/v2/items?page={{Seitennummer}}&per_page={{Anzahl der Artikel pro Seite}}&query=user%3A{{Benutzeridentifikation}}

Wenn Sie beispielsweise 100 Artikel von mir erhalten möchten (kiyokiyo_kzsby), können Sie die folgende Anfrage senden.

https://qiita.com/api/v2/items?page=1&per_page=100&query=user%3Akiyokiyo_kzsby

Die Antwort wird im JSON-Format zurückgegeben.

[
  {
    "rendered_body": "<h1>Example1</h1>",
    (Abkürzung)
    "title": "Example title 1",
    (Abkürzung)
  },
  {
    "rendered_body": "<h1>Example2</h1>",
    (Abkürzung)
    "title": "Example title 2",
    (Abkürzung)
  },
・ ・ ・
]

Extrahieren Sie "rendered_body" und "title" daraus und verwenden Sie sie für die Wortwolke.

Wenn Sie den obigen Code in Python-Code einfügen, sieht es so aus.

qiita_scraper.py


import requests
import json
from bs4 import BeautifulSoup

def scrape_all(user_id):
    text = ""
    r = requests.get("https://qiita.com/api/v2/items?page=1&per_page=100&query=user%3A" + user_id)
    json_list = json.loads(r.text)
    for article in json_list:
        print("scrape " + article["title"])
        text += article["title"]
        content = article["rendered_body"]
        soup = BeautifulSoup(content, "html.parser")
        for valid_tag in soup.find_all(["p","li","h1","h2","h3","h4","table"]):
            text += valid_tag.text
    return text

request ist eine Bibliothek, die HTTP-Anfragen ausführt, json ist eine Bibliothek, die JSON verarbeitet, und BeautifulSoup ist eine Bibliothek, die HTML verarbeitet. Lassen Sie uns jedes in pip install setzen. (Für schöne Suppe ist dieser Artikel gut.)

$ pip install requests
$ pip install json
$ pip install beautifulsoup4

Geben Sie das HTML-Tag an, das mit "oup.find_all "([" p "," li "," h1 "," h2 "," h3 "," h4 "," table "]) in der dritten Zeile von unten gelesen werden soll. Ich bin. Zuerst habe ich versucht, den gesamten Text zu lesen, aber der eingebettete Code war auch enthalten, und die resultierende Wortwolke wurde nur zu Wörtern, die häufig im Code vorkommen, z. B. für und wenn, also nur der Textteil Dies wird zum Extrahieren angegeben. Bitte passen Sie diesen Bereich nach Ihren Wünschen an.

Morphologische Analyse

Im Gegensatz zu Englisch ist der abgekratzte japanische Text nicht in Wörter unterteilt. Wenn Sie also nur in die Bibliothek zur Erzeugung von Wortwolken eintauchen, funktioniert dies nicht. Daher wird eine morphologische Analyse durchgeführt, um sie in Wörter zu unterteilen (zu trennen). Dieses Mal werden wir einen morphologischen Analysator namens Mecab verwenden. Ich habe ziemlich viel auf diesen Artikel verwiesen.

Installieren Sie zunächst die für die Installation von Mecab erforderlichen Bibliotheken.

brew install mecab mecab-ipadic git curl xz

Als nächstes werden wir den Hauptteil von Mecab installieren.

brew install mecab mecab-ipadic

Geben Sie "mecab" in das Terminal ein und geben Sie einen Satz ein, um eine morphologische Analyse durchzuführen. (Ende ist Strg + C)

$ mecab
Von den Oberschenkeln und Oberschenkeln
Sumomo Substantiv,Allgemeines,*,*,*,*,Sumomo,Sumomo,Sumomo
Auch Assistent,Hilfe,*,*,*,*,Ebenfalls,Mo.,Mo.
Oberschenkel Nomen,Allgemeines,*,*,*,*,Pfirsiche,Pfirsich,Pfirsich
Auch Assistent,Hilfe,*,*,*,*,Ebenfalls,Mo.,Mo.
Oberschenkel Nomen,Allgemeines,*,*,*,*,Pfirsiche,Pfirsich,Pfirsich
Hilfswörter,Union,*,*,*,*,von,Nein,Nein
Davon Nomenklatur,Nicht unabhängig,Anwalt möglich,*,*,*,Zuhause,Uchi,Uchi
EOS

Jetzt können Sie loslegen. Schreiben wir nun den Code, um eine morphologische Analyse in Python durchzuführen. Für den Python-Code habe ich auf [diesen Artikel] verwiesen (https://qiita.com/kenmatsu4/items/02034e5688cc186f224b).

mecab.py


import MeCab as mc

def mecab_analysis(text):
    print("start mecab analysis")
    t = mc.Tagger('-Ochasen')
    node = t.parseToNode(text)
    output = []
    while(node):
        if node.surface != "":
            word_type = node.feature.split(",")[0]
            if word_type in ["Adjektiv","Substantiv"]:
                output.append(node.surface)
        node = node.next
    print("end mecab analysis")
    return output

Wir werden die MeCab-Bibliothek verwenden, also lasst uns "pip install" machen.

$ pip install mecab-python3

Die fünfte Zeile von unten, "wenn Worttyp in [" Anwalt "," Substantiv "]:", beschränkt die Wörter, die in die Ausgabe aufgenommen werden sollen, auf "Adjektiv" und "Substantiv". Wenn Sie Zusätze und Verben einfügen möchten, können Sie sie diesem Array hinzufügen.

Eine Wortwolke erstellen

Nachdem wir den abgekratzten Text bis zum vorherigen Schritt in Wörter aufgeteilt haben, tauchen wir endlich in die Wortwolkenbibliothek ein, um ihn zu vervollständigen. Folgen Sie zunächst der Word Cloud Library README, um "pip install" zu installieren. Installieren Sie auch die Bildschirmzeichnungsbibliothek matplotlib.

$ pip install wordcloud
$ pip install matplotlib

Schreiben Sie als Nächstes den Python-Code wie folgt. Für den Python-Code habe ich auf [diesen Artikel] verwiesen (https://qiita.com/kenmatsu4/items/9b6ac74f831443d29074).

word_cloud.py


import matplotlib.pyplot as plt
from wordcloud import WordCloud

def create_wordcloud(text):
    print("start create wordcloud")

    #Geben Sie den Schriftpfad entsprechend der Umgebung an.
    fpath = "/System/Library/Fonts/Hiragino Mincho ProN.ttc"

    #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'', u'Ebenfallsの', u'diese Woche', u'Zusammenfassung',u'Zum', \
             u'Bezeichnung', u'Wenn', u'Weniger als', u'Erstellen', u'Yo', u'Teil', u'Datei', u'Verwenden', u'verwenden']

    wordcloud = WordCloud(background_color="white",font_path=fpath, width=800, height=500, \
                          stopwords=set(stop_words)).generate(text)
    print("end create wordcloud")

    print("now showing")
    plt.figure(figsize=(15,12))
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

Der Schriftpfad wird im Teil von fpath =" / System / Library / Fonts / Hiragino Mincho ProN.ttc " in der 6. Zeile von oben angegeben. Der Pfad und der Schriftname können je nach verwendetem PC unterschiedlich sein. Passen Sie ihn daher entsprechend an. Die Stoppwörter werden nach "stop_words =" in der 8. Zeile von oben angegeben. Die hier aufgeführten Wörter werden nicht mehr in der Wortwolke angezeigt. Geben wir Wörter wie "Dinge" und "Dinge" an, die keine Bedeutung haben, aber häufig als großes Deka angezeigt werden.

Lassen Sie uns abschließend eine Datei erstellen, die diese gemeinsam vom Scraping bis zur Generierung der Wortwolke verarbeitet.

main.py


from qiita_scraper import scrape_all
from mecab import mecab_analysis
from word_cloud import create_wordcloud

text = scrape_all("kiyokiyo_kzsby")
wordlist = mecab_analysis(text)
create_wordcloud(" ".join(wordlist))

Qiitas Benutzer-ID wird in der 4. Zeile an das Argument "scrape_all" übergeben. Sie können auch eine Wortwolke für einen anderen Benutzer erstellen, indem Sie diese ändern.

Wenn Sie main.py ausführen, wird der Wortwolkenbildschirm geöffnet, nachdem eine solche Nachricht im Protokoll ausgegeben wurde.

Studieren Sie kratzende GoF-Designmuster
Verstehe irgendwie die häufig verwendeten Begriffe von Scrape DDD
(Unterlassung)
Zusammenfassung des AtCoder 400-Punkte-Algorithmus(Java Edition)
AWS Solution Architect abkratzen-Ich möchte einen Mitarbeiter bekommen
start mecab analysis
end mecab analysis
start create wordcloud
end create wordcloud
now showing

Ja! !! スクリーンショット 2020-05-08 10.43.08.png

Eigentlich denke ich, dass es durch Anpassen der Teiltexte und Stoppen der Wörter von hier vervollständigt wird. Es macht Spaß, also spielen Sie bitte damit herum.

abschließend

Es ist gut, weil Sie visuell verstehen können, welche Art von Ausgabe Sie gemacht haben, wenn Sie versuchen, eine Wortwolke zu erstellen. Selbst wenn Sie das Scraping-Ziel in Hatena Blog oder Twitter ändern, erhalten Sie unterschiedliche Ergebnisse und es wird interessant.

Recommended Posts

Verschrotten Sie Ihren Qiita-Artikel, um eine Wortwolke zu erstellen
Wenn Sie Word Cloud erstellen möchten.
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Erstellen Sie Word Cloud aus akademischen Programmen
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Migrieren Sie Qiita-Artikel zu GitHub
Migrieren Sie Qiita-Artikel zu WordPress
Erstellen Sie die Word Cloud von Qiita aus Ihrem Browserverlauf
Schritte zum Erstellen eines Django-Projekts
So erstellen Sie ein Conda-Paket
Erstellen Sie eine Wortwolke mit nur positiven / negativen Wörtern auf Twitter
So erstellen Sie eine virtuelle Brücke
Ich habe versucht zusammenzufassen, was mit Qiita mit Word Cloud ausgegeben wurde
Wie erstelle ich eine Docker-Datei?
5 Möglichkeiten zum Erstellen eines Python-Chatbots
So erstellen Sie eine Konfigurationsdatei
Versuchen Sie, einen Artikel von Qiita mit der REST-API [Umweltvorbereitung] zu erstellen.
Erstellen Sie Verknüpfungen, um Python-Dateien auf dem Terminal mit VScode auszuführen
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Fügen Sie Ihrem Computer eine GPIO-Karte hinzu. (1)
So erstellen Sie einen Klon aus Github
Erstellen Sie einen Bot, um Corona-Virus-Informationen zu retweeten
So erstellen Sie einen Git-Klonordner
Qiita (1) Wie schreibe ich einen Codenamen?
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Migrieren Sie Qiita-Artikel zu GitHub Pages + VuePress
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Verschiedene Möglichkeiten, ein Wörterbuch zu erstellen (Erinnerungen)
So erstellen Sie ein Repository aus Medien
Skript zum Erstellen einer Mac-Wörterbuchdatei
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Ich möchte einfach ein Rauschmodell erstellen
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Ich möchte mit Python ein Fenster erstellen
Erstellen Sie einen Datensatz, indem Sie zufällig MNIST-Daten auswählen
So erstellen Sie eine JSON-Datei in Python
Erstellen Sie einen Sub-Sub-Befehl mit dem Klick --netsted-Sub-Sub-Befehl -
Schritte zum Erstellen eines Twitter-Bots mit Python
Wie man sich erinnert, wenn man ein Wort vergisst
Versuchen Sie, einen neuen Befehl unter Linux zu erstellen
Holen Sie sich Qiitas "Gefällt mir" -Liste durch Schaben
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
[Hinweis] So erstellen Sie eine Ruby-Entwicklungsumgebung
So erstellen Sie ein 1-zeiliges Kivy-Eingabefeld
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
So erstellen Sie eine Rest-API in Django
Erstellen Sie ein Rad Ihres eigenen OpenCV-Moduls
Erstellen Sie einen Befehl, um das Arbeitsprotokoll abzurufen
[Hinweis] So erstellen Sie eine Mac-Entwicklungsumgebung
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe