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.
Ich konnte so etwas machen. 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.)
Ich werde es mit erstellen.
Ich werde mit dem Verfahren fortfahren.
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.
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.
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! !!
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.
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