[PYTHON] J'ai essayé de réveiller le nom de lieu qui apparaît dans les paroles de Masashi Sada sur la carte thermique

introduction

Il existe de nombreuses chansons de M. Masashi Sada (Massan) qui couvrent une zone ou un lieu spécifique.

Toutes sont des chansons merveilleuses (^ o ^) En particulier, Hiume est un super chef-d'œuvre qui se régénère dans le cerveau chaque fois que vous vous rendez au sanctuaire Taishofu Tenmangu.

Quelle région est souvent présentée dans les chansons de Ma-san qui les incluent? Après tout Nagasaki? Tokyo? Ou ...? Afin de résoudre le mystère de, j'ai pris le clavier et j'ai écrit le code.

Au fait, "From the North Country" est un endroit très célèbre, mais comme il a été présenté à maintes reprises dans le calendrier de l'Avent jusqu'à présent, il n'y a pas de paroles, donc cette fois, il est hors du champ de l'enquête.

Ce que j'ai fait (à peu près)

Ce que j'ai fait (détails)

Décomposition partielle des paroles de Masan

Obtenir les paroles

J'ai gratté le site des paroles. En raison de problèmes de droits d'auteur, il n'est pas répertorié ici.

Décomposition en mot partiel

J'ai utilisé la bibliothèque d'analyse morphologique de Python janome pour la décomposition de mots partiels.

tokenize_sample.py


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

from janome.tokenizer import Tokenizer


def main():
	for token in Tokenizer().tokenize('Trois ponts rouges sur l'étang Shinji'):
		print(token)


if __name__ == '__main__':
	main()

Si vous écrivez et exécutez du code comme celui ci-dessus ...

Shinjiike substantif,Général,*,*,*,*,Étang Shinji,Shinjiike,Shinjiike
Auxiliaire,Assistant de cas,Général,*,*,*,À,ré,ré
Un tel verbe,Indépendance,*,*,Cinq étapes, La ligne,Forme basique,Prendre,Kakar,Kakar
Trois nomenclature,Général,*,*,*,*,Trois,Mitz,Mitz
Mots auxiliaires,Assistant de cas,Général,*,*,*,de,Non,Non
Adjectif rouge,Indépendance,*,*,apocalypse,Forme basique,rouge,Akai,Akai
Pont substantif,Général,*,*,*,*,pont,Hashi,Hashi

Oh! L'étang Shinji est correctement reconnu! !! Et la tension monte.

Pour le mécanisme détaillé et l'historique de janome, veuillez vous référer à la diapositive du milieu "Pyconjp2015 - analyse morphologique apprise en faisant avec Python". S'il te plait donne moi. (Vous êtes né en 2015! Merci!)

Extraire le nom de la zone et le géocodage

Extraire la zone

Janome analyse le groupe de paroles pré-grattées et prend le mot correspondant à «région». Aussi, comme je veux refléter le nombre d'apparitions de mots dans la densité de la carte thermique, j'ai également compté les mots en même temps.

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 'nom,固有nom,zone' 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

Vous pouvez également lire des dictionnaires personnalisés. D'après la documentation janome, le format du dictionnaire est le même que celui de Mecab.

sada_dict.csv


Basilique de Yushima,1288,1288,5000,nom,固有nom,Général,*,*,*,Basilique de Yushima,Yushima Seidou,Yushima Seidou
Arbre du ciel,1288,1288,5001,nom,固有nom,Général,*,*,*,Arbre du ciel,Arbre du ciel,Arbre du ciel

Un exemple du document janome est "Tokyo Sky Tree", mais comme il est chanté comme "Sky Tree" dans "Kasutira" que tout le monde connaît, il est recommandé de s'inscrire auprès de "Sky Tree".

(Remarquer)

En fait, je voulais refléter le résultat de l'identification de l'emplacement de la nomenclature appropriée dans la carte thermique, mais j'ai abandonné à cause du temps. Donc je n'utilise même pas de dictionnaire. Je suis désolé de le mentionner.

Géocodage

Pour le géocodage, j'ai également utilisé la bibliothèque [googlemaps] de Python (https://pypi.python.org/pypi/googlemaps).

Étant donné que vous utiliserez l'API Google Maps, vous devez spécifier la clé API. La méthode d'acquisition est décrite dans googlemaps GitHub.

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']

Résumé jusqu'à ici

Ce qui suit est le code qui relie le travail jusqu'à ce point (décomposer les paroles en parties - extraire le nom de la zone - géocodage).

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 'nom,固有nom,zone' 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()

En conséquence, le nom de la zone, le nombre d'apparitions dans les paroles, la latitude et la longitude sont affichés. Comme je n'utilise pas de dictionnaire personnalisé, je peux voir certains enregistrements de déchets, mais cette fois je vais l'ignorer.

sada_places.csv


Amérique,1,49.38,-66.94
Bermudes,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
printemps,1,33.8689809,130.8083576
Asuka,3,38.8972965,139.9375578
journée,2,50.68819,5.675110099999999
Kamakura,2,35.3682478,139.5933376
Bains publics,1,34.93531738029149,135.7610285302915
Yamami,1,36.5698502,136.9701007
Jérusalem,1,31.8829601,35.2652869
West Kyo,1,34.67190798029149,135.7844679802915
Une addition,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
Heureux,1,34.4654479,135.5854033
Akishino,1,34.7155978,135.7837222
Heiankyo,1,44.5883529,127.1930004
Hong Kong,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
Sous la pente,1,35.3120498,139.5356368
Yukon,1,69.646498,-123.8009179
Accueil,1,34.0886418,132.9547384
Nanjing,1,32.3940135,119.050169
France,3,51.0891658,9.5597934
Vraie paddy,1,35.6882069802915,140.0695889802915
Bienvenue,1,37.9205189,112.7839926
De l'argent solide,1,37.2102144,139.9250478
Yabu,1,35.3875492,140.1588221
Kano,1,35.2016331,135.4969237
Nom Ebi,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
Quai,1,34.6863148,135.1933421
Harumi,1,35.6634906,139.7897775
Japon,2,34.6687571,135.5100311
Sophia,2,42.7877752,23.4569049
Alaska,4,71.3868712,-129.9945562
Fleuve Yangtze,1,36.4361024802915,139.8532846302915
Kitamae,1,26.3027021,127.7615069
Tsugaru,1,35.0117177302915,135.7573022302915
Ginza,1,35.6760255,139.7724941
Rosée,1,51.2964846,22.6735312
États Unis,1,49.38,-66.94
Casablanca,2,33.6486015,-7.4582757
Tokyo,31,35.817813,139.910202
Pharmacie,1,35.0155830302915,135.7545184802915
Extrème nord,1,12.9797045,15.683687
Bouddha Lan West,1,35.17525588029149,139.6558066802915
Gojo,1,39.5593820302915,115.7611693
Bagdad,2,33.4350586,44.5558261
Temple de Kanzeonji,1,33.5222913,130.5254343
Akasaka,1,35.6782744,139.7459391
Bouddha,4,34.9489952,136.9632495
New York,1,40.91525559999999,-73.70027209999999
Nishiki,1,32.2516958,130.9134777
Tigre,1,-15.4044999,-42.8735213
Kukata,1,35.10910000000001,136.9854947
Ondulation,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
Minamiyamate,2,32.7361422,129.8708733
Kuchiyasu,1,43.015163,140.9243102
Ruelle,1,36.1243706,139.5655411
Sakamoto,1,37.9298369802915,140.9141139802915
Shijo,1,35.0044451802915,135.7580809302915
méditerranéen,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
Chili,6,-17.4983293,-66.4169643
Yoga,1,35.62797998029149,139.6354899802915
Kirimandjaro,2,-3.0562826,37.3716347
Plumes de levage,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
Faire monter,2,35.71155898029149,139.8137769802915
Shinsaibashi,2,30.6801709802915,114.2062109802915
Japon,9,45.5227719,145.8175503
Capitale,1,36.0447089,139.3743599
Rokuto,1,36.0028345,140.1105419
Racine d'arbre,2,36.9430004,137.4747414
Tateyama,1,36.5847934,137.6343407
Arakawa,1,36.1415564,139.8589857
Allemagne,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
Yue,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
Plantation,1,33.6152803,130.5166492

Générer une carte thermique en fonction du nombre d'apparitions et de coordonnées

Puisque les coordonnées et le nombre d'apparitions pour chaque région sont enregistrés dans sada_places.csv généré plus tôt, utilisez ces informations pour les refléter dans la carte thermique.

Depuis que j'ai utilisé l'API Google Maps pour le géocodage, j'ai également essayé d'utiliser l'API Google Maps pour les cartes thermiques.

J'ai écrit à la fois le style et le script en HTML, mais la quantité de code est comme ça.

<!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 = [
         //Les objets sont alignés autant que le nombre de coordonnées. Omis car il est long.
         //Il est certainement préférable de pouvoir créer un fichier externe
         { 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>

Page référencée

résultat

Carte du Japon

日本地図

En regardant les résultats, comme prévu, Tokyo et Nagasaki, qui sont liés à Masan, sont les plus brillants. Hiroshima dans "Hiroshima no Sora" et Kyoto / Nara apparaissant dans "Hier / Kyo / Nara, Asuka / Demain" et "Shujikai" deviennent également plus brillants.

Quand je me suis demandé, "Pourquoi le coin supérieur droit de Hokkaido est-il plus clair?", Le résultat du géocodage de "Japon" était ici ...

carte du monde

世界地図

Si vous tirez le zoom et regardez la carte du monde, vous pouvez voir que de nombreuses régions autres que le Japon sont chantées. M. Masa, qui aurait dû être un grand vétéran pendant 42 ans en tant que chanteur, est une ressource humaine mondiale terrifiante.

La neige blanche de Kirimandjaro dans "Lion Standing in the Wind" qui me fait pleurer à chaque fois que j'écoute une chanson live L'Alaska qui apparaît dans "Aurora" et "Twilight of the White Nights" chantés sur le thème d'un vrai photographe est également légèrement coloré.

C'est un peu hors sujet, mais si vous écoutez "Aurora" et "Twilight of the White Nights" tout en regardant le ciel nocturne en hiver, vous pouvez beaucoup pleurer, donc si vous n'en avez jamais entendu parler, saisissez cette occasion pour le maîtriser. «Aurora» et «Crépuscule des nuits blanches» - Masashi Sada, Mitsuho Agishi et Michio Hoshino

Il est plus lumineux en France et en Allemagne, mais il semble plus brillant que prévu. Cela était dû au fait que les mots «Bouddha» et «Allemagne» étaient interprétés comme des régions lorsque les parties étaient décomposées, donc je pense que nous pouvons nous attendre à des améliorations de la précision en ajoutant des dictionnaires.

à la fin

Calendrier de l'Avent Sadamasashi x IT L'organisateur a écrit le 4ème jour de "Décomposition facile de Sadamasashi à l'aide de kuromoji" C'est embarrassant car une partie du contenu et le résultat de la carte thermique sont minces.

Je veux vraiment l'essayer et refléter l'arbre du ciel et Shinjiike sur l'écran et certains résultats de géocodage avec l'API Google Maps sont "?", Alors prenez le temps de préparer et d'étudier à nouveau. Je voulais réessayer de créer une carte thermique.

Si vous obtenez un résultat intéressant, j'aimerais le publier comme matière première ...

Recommended Posts

J'ai essayé de réveiller le nom de lieu qui apparaît dans les paroles de Masashi Sada sur la carte thermique
J'ai essayé d'afficher le degré d'infection par le virus corona sur la carte thermique Seaborn
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de trier les objets de l'image du plat de steak --③ Image similaire Détection de carte de chaleur
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
J'ai essayé de prédire les chevaux qui seront dans le top 3 avec LightGBM
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
J'ai essayé Web Scraping pour analyser les paroles.
J'ai essayé l'analyse par grappes de la carte météo
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de visualiser les paroles de GReeeen, que j'écoutais de façon folle dans ma jeunesse mais que je ne l'écoutais plus.
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
J'ai essayé de mettre HULFT IoT (Agent) dans la passerelle Rooster de Sun Electronics
[First data science ⑥] J'ai essayé de visualiser le prix du marché des restaurants à Tokyo
J'ai essayé de faciliter la modification du paramètre du proxy authentifié sur Jupyter
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de résumer les opérations de chaîne de Python
Je souhaite produire une carte thermique magnifiquement personnalisée de la matrice de corrélation. édition matplotlib
J'ai essayé de résumer les langues que les débutants devraient désormais apprendre par but
J'ai essayé de prédire le genre de musique à partir du titre de la chanson sur le réseau neuronal récurrent
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
Comment supprimer "(base)" qui apparaît dans le terminal lorsqu'Anaconda est installé sur Mac
J'ai essayé de mettre HULFT IoT (Edge Streaming) dans la passerelle Rooster de Sun Electronics
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
J'ai essayé de trouver la tendance du nombre de navires dans la baie de Tokyo à partir d'images satellites.
J'ai essayé de créer un script qui retrace les tweets d'un utilisateur spécifique sur Twitter et enregistre l'image publiée à la fois
J'ai essayé de trouver l'entropie de l'image avec python
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé d'illustrer le temps et le temps du langage C
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé de résumer les commandes souvent utilisées en entreprise
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de combattre le minimum local de la fonction Goldstein-Price
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé de lancer le cluster ipython au minimum sur AWS
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
J'ai essayé de savoir dans quelle langue ce logiciel dont je m'occupe toujours est écrit
J'ai essayé de classer le nom d'utilisateur et le mot de passe de phpMyAdmin ciblés par l'attaque du serveur
J'ai essayé de reproduire M. Saito qui apparaît dans "Aine Kleine Nachtmusik" comme M. Sakurai de Mischil
J'ai essayé de résumer le contenu de chaque paquet enregistré par Python pip en une seule ligne
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
J'ai essayé de créer une configuration RAID logicielle SATA qui démarre le système d'exploitation sur Ubuntu Server
J'ai essayé de prédire les hauts et les bas du cours de clôture du cours de l'action de Guru Navi en utilisant TensorFlow (progression)
J'ai essayé d'adapter la fonction exponentielle et la fonction logistique au nombre de patients positifs au COVID-19 à Tokyo