[PYTHON] Ich habe versucht, den Ortsnamen zu wecken, der in den Texten von Masashi Sada auf der Heatmap erscheint

Einführung

Es gibt viele Lieder von Herrn Masashi Sada (Massan), die einen bestimmten Bereich oder Ort abdecken.

Alle sind wundervolle Lieder (^ o ^) Insbesondere ist Hiume ein Super-Meisterwerk, das jedes Mal, wenn Sie zum Taishofu Tenmangu-Schrein gehen, im Gehirn regeneriert wird.

Welche Region wird oft in Ma-sans Liedern erwähnt, die diese enthalten? Immerhin Nagasaki? Tokio? Oder ...? Um das Rätsel zu lösen, nahm ich die Tastatur und schrieb den Code.

Übrigens ist "From the North Country" ein sehr berühmter Ort, aber da er bisher schon oft im Adventskalender erwähnt wurde, gibt es keine Texte, so dass er diesmal nicht in den Rahmen der Umfrage fällt.

Was ich getan habe (grob)

Was ich getan habe (Details)

Teilweise Zerlegung von Masans Texten

Holen Sie sich Texte

Ich habe die Lyrics-Site abgekratzt. Aus urheberrechtlichen Gründen wird es hier nicht aufgeführt.

Teilwortzerlegung

Ich habe Pythons morphologische Analysebibliothek janome für die Teilwortzerlegung verwendet.

tokenize_sample.py


#!/usr/bin/env python
# -* encoding: utf-8 -*

from janome.tokenizer import Tokenizer


def main():
	for token in Tokenizer().tokenize('Drei rote Brücken über den Shinji-Teich'):
		print(token)


if __name__ == '__main__':
	main()

Wenn Sie Code wie oben schreiben und ausführen ...

Shinjiike Substantiv,Allgemeines,*,*,*,*,Shinji-Teich,Shinjiike,Shinjiike
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,D.,D.
Ein solches Verb,Unabhängigkeit,*,*,Fünf Schritte, La Linie,Grundform,Nehmen,Kakar,Kakar
Drei Nomenklatur,Allgemeines,*,*,*,*,drei,Mitz,Mitz
Hilfswörter,Fallassistent,Allgemeines,*,*,*,von,Nein,Nein
Rotes Adjektiv,Unabhängigkeit,*,*,Apokalypse,Grundform,rot,Akai,Akai
Brückennomen,Allgemeines,*,*,*,*,Brücke,Hashi,Hashi

Oh! Shinji Pond wird richtig erkannt! !! Und die Spannung steigt.

Den detaillierten Mechanismus und die Geschichte von Janome finden Sie auf der Folie "Pyconjp2015 - Morphologische Analyse, die mit Python erstellt wurde". Bitte gib mir. (Du wurdest 2015 geboren! Danke!)

Extrahieren Sie den Namen der Region und den Geocode

Bereich extrahieren

Janome analysiert die vorgekratzte Textgruppe und greift das Wort auf, das "Region" entspricht. Da ich die Anzahl der Erscheinungen von Wörtern in der Dichte der Wärmekarte widerspiegeln möchte, habe ich auch die Wörter gleichzeitig gezählt.

def count_place():
	place_count_dict = {}
	with open('sada_lyrics.csv','r') as lyrics:
		reader = csv.reader(lyrics)
		for row in reader:
			t = Tokenizer(udic='sada_dict.csv', udic_enc='utf8')
			for token in t.tokenize(row[1]):
				if 'Substantiv,固有Substantiv,Bereich' in token.part_of_speech:
					place_name = token.surface
					if place_name in place_count_dict:
						place_count_dict[place_name] = place_count_dict[place_name]+1
					else:
						place_count_dict[place_name] = 1
	return place_count_dict

Sie können auch benutzerdefinierte Wörterbücher lesen. Gemäß der Janome-Dokumentation entspricht das Wörterbuchformat dem von Mecab.

sada_dict.csv


Yushima Basilika,1288,1288,5000,Substantiv,固有Substantiv,Allgemeines,*,*,*,Yushima Basilika,Yushima Seidou,Yushima Seidou
Himmelsbaum,1288,1288,5001,Substantiv,固有Substantiv,Allgemeines,*,*,*,Himmelsbaum,Himmelsbaum,Himmelsbaum

Ein Beispiel für das Janome-Dokument ist "Tokyo Sky Tree". Es wird jedoch empfohlen, sich bei "Sky Tree" zu registrieren, da es in "Kasutira" als "Sky Tree" gesungen wird, was jeder kennt.

(Beachten)

Eigentlich wollte ich das Ergebnis der Identifizierung des Ortes der richtigen Nomenklatur in der Wärmekarte widerspiegeln, aber ich gab aus Zeitgründen auf. Ich benutze also nicht einmal ein Wörterbuch. Es tut mir leid, das zu erwähnen.

Geokodierung

Für die Geokodierung habe ich auch die Python-Bibliothek googlemaps verwendet.

Da Sie die Google Maps-API verwenden, müssen Sie den API-Schlüssel angeben. Die Erfassungsmethode ist in googlemaps GitHub beschrieben.

import googlemaps

def geocode(place_name):
	gmaps = googlemaps.Client(key='write your API key')
	geocode_result = gmaps.geocode(place_name)
	coord = geocode_result[0]['geometry']['viewport']['northeast']
	return coord['lat'], coord['lng']

Zusammenfassung bis hierher

Das Folgende ist der Code, der die Arbeit bis zu diesem Punkt verbindet (Zerlegen der Texte in Teile - Extrahieren der Bereichsnamen-Geokodierung).

sada_place_geocoder.py


#!/usr/bin/env python
# -* encoding: utf-8 -*

from janome.tokenizer import Tokenizer
import csv
import googlemaps


def main():
	writer = csv.writer(open('sada_places.csv','w'), delimiter=',')
	place_count_dict = count_place()
	gmaps = googlemaps.Client(key='write your API key')
	for place_name, place_count in place_count_dict.items():
		lat, lon = geocode(gmaps, place_name)
		writer.writerow([place_name, place_count, lat, lon])


def count_place():
	place_count_dict = {}
	with open('sada_lyrics.csv','r') as lyrics:
		reader = csv.reader(lyrics)
		for row in reader:
			t = Tokenizer()
			for token in t.tokenize(row[1]):
				if 'Substantiv,固有Substantiv,Bereich' in token.part_of_speech:
					place_name = token.surface
					if place_name in place_count_dict:
						place_count_dict[place_name] = place_count_dict[place_name]+1
					else:
						place_count_dict[place_name] = 1
	return place_count_dict


def geocode(gmaps, place_name):
	geocode_result = gmaps.geocode(place_name)
	coord = geocode_result[0]['geometry']['viewport']['northeast']
	return coord['lat'], coord['lng']


if __name__ == '__main__':
	main()

Infolgedessen werden der Bereichsname, die Anzahl der Auftritte in den Texten, der Breitengrad und der Längengrad ausgegeben. Da ich kein benutzerdefiniertes Wörterbuch verwende, kann ich einige Mülldatensätze sehen, aber dieses Mal werde ich es ignorieren.

sada_places.csv


Amerika,1,49.38,-66.94
Bermuda,1,14.5192371802915,121.0361231302915
Akita,1,39.86527460000001,140.5154199
Kasugayama,1,37.1489639802915,138.2363259802915
Victoria,1,48.450518,-123.322346
Mimiya,1,36.4073904302915,136.4570957
Minase,1,34.8791869802915,135.6691649802915
Kyo,3,30.5403905,120.3877692
Frühling,1,33.8689809,130.8083576
Asuka,3,38.8972965,139.9375578
Tag,2,50.68819,5.675110099999999
Kamakura,2,35.3682478,139.5933376
Badehaus,1,34.93531738029149,135.7610285302915
Yamami,1,36.5698502,136.9701007
Jerusalem,1,31.8829601,35.2652869
West Kyo,1,34.67190798029149,135.7844679802915
Zusatz,1,36.5431863,-6.255334599999999
Berlin,1,52.6754542,13.7611176
Kiraku,1,35.1904253,136.7319704
Mitsuke,3,37.5933274,139.0009869
Nagasaki,5,35.7377658,139.6976565
Urashima,1,35.4839466,139.6447166
Atago,1,35.9737504,139.6042941
glücklich,1,34.4654479,135.5854033
Akishino,1,34.7155978,135.7837222
Heiankyo,1,44.5883529,127.1930004
Hongkong,1,14.4904672802915,121.0242180302915
Karuizawa,2,36.4240846,138.6571307
Han,2,32.555258,114.2922103
Inasa,1,32.7592694,129.8647033
Kyoto,1,35.0542,135.8236
Musashi Koganei,1,35.70241118029149,139.5080892802915
Hakuhagi,1,38.2529733,140.9109412
Chino,3,34.047811,-117.5995851
Unter dem Hang,1,35.3120498,139.5356368
Yukon,1,69.646498,-123.8009179
Zuhause,1,34.0886418,132.9547384
Nanjing,1,32.3940135,119.050169
Frankreich,3,51.0891658,9.5597934
Echtes Reisfeld,1,35.6882069802915,140.0695889802915
Herzlich willkommen,1,37.9205189,112.7839926
Gutes Geld,1,37.2102144,139.9250478
Yabu,1,35.3875492,140.1588221
Kano,1,35.2016331,135.4969237
Ebi Name,1,35.4774536,139.4364727
Renge,5,48.02912,8.027220699999999
Magellan,1,31.8199301,76.95342
Michinoku,1,35.5030142302915,139.6870448302915
Pearl Harbor,1,21.3885713,-157.9335744
Kai,1,34.6863148,135.1933421
Harumi,1,35.6634906,139.7897775
Japan,2,34.6687571,135.5100311
Sofia,2,42.7877752,23.4569049
Alaska,4,71.3868712,-129.9945562
yangtze Fluss,1,36.4361024802915,139.8532846302915
Kitamae,1,26.3027021,127.7615069
Tsugaru,1,35.0117177302915,135.7573022302915
Ginza,1,35.6760255,139.7724941
Tau,1,51.2964846,22.6735312
Vereinigte Staaten,1,49.38,-66.94
Casablanca,2,33.6486015,-7.4582757
Tokio,31,35.817813,139.910202
Apotheke,1,35.0155830302915,135.7545184802915
Weit im Norden,1,12.9797045,15.683687
Buddha Lan West,1,35.17525588029149,139.6558066802915
Gojo,1,39.5593820302915,115.7611693
Bagdad,2,33.4350586,44.5558261
Kanzeonji-Tempel,1,33.5222913,130.5254343
Akasaka,1,35.6782744,139.7459391
Buddha,4,34.9489952,136.9632495
New York,1,40.91525559999999,-73.70027209999999
Nishiki,1,32.2516958,130.9134777
Tigris,1,-15.4044999,-42.8735213
Kukata,1,35.10910000000001,136.9854947
Wellen,1,33.9145777,130.8043569
Yushima,2,35.711327,139.7724702
Hirajoyama,1,34.71184798029149,135.8116589802915
Koshien,1,34.7234607,135.3633836
Shinjuku,2,35.7298963,139.7451654
Kasumi,1,24.0234098,82.02101979999999
Fuji,1,35.3539032,138.8118555
Curry,1,50.9818821,1.9320691
Nagasaki,24,32.9686469,129.9938174
Minamiyamat,2,32.7361422,129.8708733
Kuchiyasu,1,43.015163,140.9243102
Gasse,1,36.1243706,139.5655411
Sakamoto,1,37.9298369802915,140.9141139802915
Shijo,1,35.0044451802915,135.7580809302915
Mittelmeer-,1,45.7927967,36.215244
Akebono,1,26.2435843,127.6904124
Kagura,1,34.6626033,135.1513682
Azumi,2,36.3649943,137.8106765
Hiroshima,1,31.9163645,131.4305945
Mt.,1,29.7169085,103.6231299
Yokohama,1,35.5113,139.674
Ueno,1,36.1325774,138.8291853
Chile,6,-17.4983293,-66.4169643
Yoga,1,35.62797998029149,139.6354899802915
Kirimanjaro,2,-3.0562826,37.3716347
Gebratene Federn,1,35.1848028,136.9673238
Hiroshima,6,34.4426,132.4865
Nairobi,1,-1.164744,37.0493746
Tanifu,1,35.5452879,136.6135764
Nerima,2,35.779946,139.6811359
Namba,1,43.648665,-116.48121
Asakusa,1,35.7233639,139.8055923
Hochdrücken,2,35.71155898029149,139.8137769802915
Shinsaibashi,2,30.6801709802915,114.2062109802915
Japan,9,45.5227719,145.8175503
Hauptstadt,1,36.0447089,139.3743599
Rokuto,1,36.0028345,140.1105419
Baumwurzel,2,36.9430004,137.4747414
Tateyama,1,36.5847934,137.6343407
Arakawa,1,36.1415564,139.8589857
Deutschland,5,41.2296285,141.0143767
Kimikage,1,34.7205324,135.1428907
Nara,3,34.70489999999999,135.8384
Shanghai,2,31.6688967,122.1137989
Yunnan,4,29.2233272,106.1977228
Ja,1,36.7995957,138.4063989
Gion,1,34.4529231,132.4693298
Shinano,2,36.8707572,138.2803909
Higashiyama,1,35.010837,135.7914226
Yotsuya,2,35.6726745,139.4551008
Nagano,1,36.835842,138.3190722
Pflanzen,1,33.6152803,130.5166492

Generieren Sie eine Heatmap basierend auf der Anzahl der Auftritte und Koordinaten

Da die Koordinaten und die Anzahl der Auftritte für jede Region in sada_places.csv aufgezeichnet sind, verwenden Sie diese Informationen, um sie in der Heatmap wiederzugeben.

Da ich die Google Maps-API für die Geokodierung verwendet habe, habe ich auch versucht, die Google Maps-API für Heatmaps zu verwenden.

Ich habe sowohl den Stil als auch das Skript in HTML geschrieben, aber die Menge an Code ist so.

<!DOCTYPE html>
<html>
  <head>
    <style>
      #map {
        width: 1200px;
        height: 600px;
      }
    </style>
    <script
  src="https://maps.googleapis.com/maps/api/js?key='write your API key'&libraries=geometry,visualization">
</script>
    <script>
      function initialize() {
        var mapCanvas = document.getElementById('map');
        var mapOptions = {
          center: new google.maps.LatLng(36.83566824724438,138.372802734375),
          zoom: 6,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        var map = new google.maps.Map(mapCanvas, mapOptions)

        var heatmapData = [
         //Objekte werden so oft wie die Anzahl der Koordinaten aufgereiht. Weggelassen, weil es lang ist.
         //Es ist definitiv besser, eine externe Datei erstellen zu können
         { weight :  2 ,  location :  new google.maps.LatLng(32.7361422,129.8708733) },
         { weight :  4 ,  location :  new google.maps.LatLng(71.3868712,-129.9945562) }, 
         { weight :  3 ,  location :  new google.maps.LatLng(37.5933274,139.0009869) }
        ]
        var heatmap = new google.maps.visualization.HeatmapLayer({
          data: heatmapData,
          radius: 50,
          map: map
        });
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map"></div>
  </body>
</html>

Referenzierte Seite

Ergebnis

Karte von Japan

日本地図

Wenn man die erwarteten Ergebnisse betrachtet, sind Tokio und Nagasaki, die mit Masan verwandt sind, die hellsten. Hiroshima in "Hiroshima no Sora" und Kyoto / Nara in "Yesterday / Kyo / Nara, Asuka / Tomorrow" und "Shujikai" werden ebenfalls heller.

Als ich mich fragte: "Warum ist die obere rechte Ecke von Hokkaido heller?", War das Geokodierungsergebnis von "Japan" hier ...

Weltkarte

世界地図

Wenn Sie den Zoom ziehen und auf die Weltkarte schauen, können Sie sehen, dass viele andere Gebiete als Japan gesungen werden. Herr Masa, der ein großer Veteran mit 42 Jahren Sängergeschichte sein sollte, eine schreckliche globale Humanressource ...

Der weiße Schnee von Kirimanjaro in "Lion Standing in the Wind" bringt mich jedes Mal zum Weinen, wenn ich einen Live-Song höre Das Alaska, das in "Aurora" und "Twilight of the White Nights" mit dem Thema eines echten Fotografen zu sehen ist, ist ebenfalls schwach gefärbt.

Es ist ein bisschen abseits des Themas, aber wenn Sie "Aurora" und "Twilight of the White Nights" hören, während Sie im Winter den Nachthimmel beobachten, werden Sie sehr weinen. Wenn Sie noch nie davon gehört haben, nutzen Sie diese Gelegenheit, um es zu meistern. "Aurora" und "Twilight of the White Nights" - Masashi Sada, Mitsuho Agishi und Michio Hoshino

In Frankreich und Deutschland ist es heller, aber es scheint heller als erwartet. Dies lag daran, dass die Wörter "Buddha" und "Deutschland" als Regionen interpretiert wurden, als die Teile zerlegt wurden. Ich denke, wir können Verbesserungen in der Genauigkeit erwarten, indem wir Wörterbücher hinzufügen.

schließlich

Sadamasashi x IT-Adventskalender Der Veranstalter schrieb am 4. Tag von "Einfache Zerlegung von Sadamasashi mit Kuromoji" Es ist peinlich, weil einige der Inhalte und das Ergebnis der Heatmap dünn sind.

Ich möchte es tatsächlich versuchen und den Himmelsbaum und Shinjiike auf dem Display wiedergeben. Einige Geokodierungsergebnisse mit der Google Maps-API sind "?". Nehmen Sie sich also Zeit, um sich vorzubereiten und erneut zu studieren. Ich wollte noch einmal versuchen, eine Heatmap zu erstellen.

Wenn Sie ein interessantes Ergebnis erhalten, möchte ich es als Rohstoff veröffentlichen ...

Recommended Posts

Ich habe versucht, den Ortsnamen zu wecken, der in den Texten von Masashi Sada auf der Heatmap erscheint
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, Objekte aus dem Bild des Steak-Set-Essens zu sortieren - Ähnliches Bild Wärmekartenerkennung
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, die Texte von GReeeen zu visualisieren, die ich in meiner Jugend verrückt gehört habe, aber nicht mehr gehört habe.
Ich habe versucht, den Text in der Bilddatei mit Tesseract der OCR-Engine zu extrahieren
Ich habe versucht, HULFT IoT (Agent) in das Gateway Rooster von Sun Electronics zu integrieren
[Erste Datenwissenschaft ⑥] Ich habe versucht, den Marktpreis von Restaurants in Tokio zu visualisieren
Ich habe versucht, es einfach zu machen, die Einstellung des authentifizierten Proxys auf Jupyter zu ändern
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich möchte eine wunderschön angepasste Wärmekarte der Korrelationsmatrix ausgeben. matplotlib edition
Ich habe versucht, die Sprachen, die Anfänger von nun an lernen sollten, absichtlich zusammenzufassen
Ich habe versucht, das Musikgenre anhand des Songtitels im Recurrent Neural Network vorherzusagen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
So löschen Sie "(base)", das im Terminal angezeigt wird, wenn Anaconda auf einem Mac installiert ist
Ich habe versucht, HULFT IoT (Edge Streaming) in das Gateway Rooster von Sun Electronics zu integrieren
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln.
Ich habe versucht, ein Skript zu erstellen, das die Tweets eines bestimmten Benutzers auf Twitter verfolgt und das veröffentlichte Bild sofort speichert
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, die im Geschäftsleben häufig verwendeten Befehle zusammenzufassen
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, den Ipython-Cluster unter AWS auf das Minimum zu starten
Ich habe versucht, das Blackjack of Trump-Spiel mit Python zu implementieren
Ich habe versucht, eine Site zu erstellen, mit der die aktualisierten Informationen von Azure einfach angezeigt werden können
Ich habe versucht herauszufinden, in welcher Sprache die Software geschrieben ist, um die ich mich immer kümmere
Ich habe versucht, den Benutzernamen und das Kennwort von phpMyAdmin zu bewerten, auf die der Serverangriff abzielte
Ich habe versucht, Herrn Saito zu reproduzieren, der in "Aine Kleine Nachtmusik" als Herr Sakurai von Mischil auftritt
Ich habe versucht, den Inhalt jedes von Python pip gespeicherten Pakets in einer Zeile zusammenzufassen
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Ich habe versucht, eine SATA-Software-RAID-Konfiguration zu erstellen, die das Betriebssystem unter Ubuntu Server startet
Ich habe versucht, die Höhen und Tiefen des Schlusskurses des Aktienkurses von Guru Navi mit TensorFlow vorherzusagen (Fortschritt)
Ich habe versucht, die Exponentialfunktion und die Logistikfunktion an die Anzahl der COVID-19-positiven Patienten in Tokio anzupassen