[PYTHON] Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!

0: Was du machen willst

Verwenden von ** word2vec ** basierend auf den Textdaten aller Songs von Hinatazaka 46, ** Natürliche Sprache ⇒ Zahlenwert ** Ich würde es gerne konvertieren und damit spielen.

Was ist Word2vec?

** Magie, um Wörter in Vektoren umzuwandeln **

image.png

** Wie werden Wörter zu Vektoren? ** ** ** image.png

Die Gewichte W, W "werden berechnet, indem die Wörter um das Eingabewort (** diesmal beträgt der Abstand 1 **) als Lehrerdaten verwendet werden. Das berechnete Gewicht W repräsentiert den Vektor jedes Wortes.

Ablauf der Verarbeitung natürlicher Sprache

自然言語処理の流れ

1: Datenerfassung

Sammeln Sie Daten entsprechend der Aufgabe, die Sie lösen möchten

2: Reinigungsprozess

Entfernen Sie bedeutungsloses Rauschen wie HTML-Tags ・ ** Schöne Suppe ** ・ ** Standardbibliothek bezüglich Modul **

1,2: Datenerfassungs- und Reinigungsprozess

#1.Schaben
import requests
from bs4 import BeautifulSoup
import warnings
warnings.filterwarnings('ignore')
target_url = "https://www.uta-net.com/search/?Aselect=1&Keyword=%E6%97%A5%E5%90%91%E5%9D%82&Bselect=3&x=0&y=0"
r = requests.get(target_url)
soup = BeautifulSoup(r.text,"html.parser")
music_list = soup.find_all('td', class_='side td1')
url_list = [] #Extrahieren Sie die URL jedes Songnamens aus der Songliste und fügen Sie sie in die Liste ein
for elem in music_list:
    a = elem.find("a")
    b = a.attrs['href']
    url_list.append(b)

#<td class="side td1">
#    <a href="/song/291307/"> Azato Kawaii </a>
#</td>  
#<td class="side td1">
#    <a href="/song/250797/"> Unbequem und erwachsen </a>
#</td>  
自然言語処理の流れ
hinataza_kashi = "" #Senden Sie eine Anfrage für jedes Lied und extrahieren Sie die Texte
base_url = "https://www.uta-net.com"
for i in range(len(url_list)):
    target_url = base_url + url_list[i]
    r = requests.get(target_url)
    soup = BeautifulSoup(r.text,"html.parser")
    div_list = soup.find_all("div", id = "kashi_area")

    for i in div_list:
        tmp = i.text
        hinatazaka_kashi += tmp

#<div id="kashi_area" itemprop="text">
#ich wurde erwischt(Ja auf einen Blick, Yeah, Yeah)
#<br>
#Ich habe mich ohne Erlaubnis verliebt
#<br>
#Es ist nicht deine Schuld
自然言語処理の流れ
#Vorverarbeitung(Entfernen Sie Englisch und Symbole mit regulären Ausdrücken)
import re
kashi=re.sub("[a-xA-Z0-9_]","",hinatazaka_kashi)#Löschen Sie alphanumerische Zeichen
kashi=re.sub("[!-/:-@[-`{-~]","",kashi)#Symbol entfernen
kashi=re.sub(u"\n\n","\n",kashi)#Zeilenumbrüche entfernen
kashi=re.sub(u"\r","",kashi)#Leerzeichen entfernen
kashi=re.sub(u"\u3000","",kashi)#Rohlinge in voller Breite entfernen
kashi=kashi.replace(' ','')
kashi=kashi.replace(' ','')
kashi=kashi.replace('?','')
kashi=kashi.replace('。','')
kashi=kashi.replace('…','')
kashi=kashi.replace('!','')
kashi=kashi.replace('!','')
kashi=kashi.replace('「','')
kashi=kashi.replace('」','')
kashi=kashi.replace('y','')
kashi=kashi.replace('“','')
kashi=kashi.replace('”','')
kashi=kashi.replace('、','')
kashi=kashi.replace('・','')
kashi=kashi.replace('\u3000','')
自然言語処理の流れ
with open("hinatazaka_kashi_1.txt",mode="w",encoding="utf-8") as fw:
    fw.write(kashi)

3: Wortnormalisierung

Vereinheitlichen Sie halbe Breite, volle Breite, Klein- und Großbuchstaben usw. ・ ** Durch Senden eines Pseudonyms ** "Do" und "Do" "Empfang" und "Empfang"

・ ** Zeichentyp ** "Apple" und "Apple" "Hund", "Inu" und "Hund"

· ** Groß-und Kleinschreibung ** Apfel und Apfel

** * Dieses Mal ignorieren **

4: Morphologische Analyse (Wortteilung)

Teilen Sie Sätze Wort für Wort ・ ** MeCab ** ・ ** Janome ** ・ ** Juman +++

5: Umstellung auf Grundform

Vereinige dich mit dem Wortstamm (dem Teil, der nicht verwendet wird) Beispiel: Lernen → Lernen In neueren Implementierungen wird es möglicherweise nicht in die Grundform konvertiert.

4,5: Morphologische Analyse (Wortteilung) & Umwandlung in die Grundform

path="hinatazaka_kashi_1.txt"
f = open(path,encoding="utf-8")
data = f.read()  #Gibt alle gelesenen Daten bis zum Ende der Datei zurück
f.close()
#3.Morphologische Analyse
import MeCab

text = data
m = MeCab.Tagger("-Ochasen")#Tagger-Instanziierung zum Parsen von Text

nouns = [line for line in m.parse(text).splitlines()#Bei Verwendung der Analysemethode der Tagger-Klasse wird das Ergebnis der morphologischen Analyse des Textes zurückgegeben
               if "Substantiv" or "Adjektiv Verb" or "Adjektiv" or"Adjektiv Verb" or "Verb" or "固有Substantiv" in line.split()[-1]]
自然言語処理の流れ
nouns = [line.split()[0] for line in m.parse(text).splitlines()
               if "Substantiv" or "Adjektiv Verb" or "Adjektiv" or "Adjektiv Verb" or "Verb" or "固有Substantiv" in line.split()[-1]]
自然言語処理の流れ

6: Stoppen Sie die Wortentfernung

Entfernen Sie nutzlose Wörter, z. B. zu häufig vorkommende Wörter Es kann in neueren Implementierungen möglicherweise nicht entfernt werden


my_stop_word=["Machen","Teru","Werden","Ist","Ding","von","Hmm","y","einer","Sa","damit","Sein","Gut","Gibt es","Yo","もvon","Abwesend","Enden",
                 "Sein","Gib mir","Von","Ich wundere mich","Das","aber","Nur","Einer","Hand","Bis","EinerHand","Wir sehen uns","Wollen","Wenn","Tara","Ohne","Sein","Wie es ist","Taku"]

nouns_new=[]
for i in nouns:
    if i in my_stop_word:
        continue
    else:
        nouns_new.append(i)
自然言語処理の流れ
import codecs
with codecs.open("hinatazaka_kashi_2.txt", "w", "utf-8") as f:
    f.write("\n".join(nouns_new))

7: Wörter digitalisieren

Konvertieren Sie von einer Zeichenfolge in einen numerischen Wert, damit dieser durch maschinelles Lernen verarbeitet werden kann

8: Modelllernen

Klassisches maschinelles Lernen ~ Wählen Sie ein neuronales Netzwerk entsprechend Ihrer Aufgabe aus Lassen Sie uns nun verstehen, was der Vorverarbeitung in diesem Ablauf entspricht.

7,8: Wortdigitalisierung und Modelllernen

from gensim.models import word2vec

corpus = word2vec.LineSentence("hinatazaka_kashi_2.txt")
model = word2vec.Word2Vec(corpus, size=100 ,min_count=3,window=5,iter=30)
model.save("hinatazaka.model")
model = word2vec.Word2Vec.load("hinatazaka.model")

#Siehe Wörter, die dem Treiber ähnlich sind
print('Top 10 Wörter im Zusammenhang mit Likes')
similar_words = model.wv.most_similar(positive=[u"Mögen"], topn=10)
for key,value in similar_words:
    print('{}\t\t{:.2f}'.format(key, value))

print('-----')
# #Berechnen Sie die Ähnlichkeit zwischen zwei Wörtern
similarity = model.wv.similarity(w1=u"Lächeln", w2=u"Sommer-")
print('Ähnlichkeit zwischen "Lächeln" und "Sommer"=>' + str(similarity))

similarity = model.wv.similarity(w1=u"Freund", w2=u"Sommer-")
print("Ähnlichkeit zwischen "Freunden" und "Sommer"=>" + str(similarity))

similarity = model.wv.similarity(w1=u"Mädchen", w2=u"Mann")
print('Ähnlichkeit zwischen "Mädchen" und "Mann"=>' + str(similarity))
自然言語処理の流れ

Ähnlichkeitsgrad

Die Ähnlichkeit, die darin erscheint, ist ** cos Ähnlichkeit **. Einfach ausgedrückt ist cos-Ähnlichkeit ein numerischer Wert dafür, wie viel zwei Vektoren in dieselbe Richtung zeigen (Ähnlichkeit). Eine cos-Ähnlichkeit von 0 zeigt eine geringe Ähnlichkeit an, und eine cos-Ähnlichkeit von 1 zeigt eine geringe Ähnlichkeit an. Die cos-Ähnlichkeit wird durch die folgende Formel ausgedrückt.

自然言語処理の流れ

[Überblick]

*** "Papa Duwa Duwa Duwa Duwa Duwa Duwa Papa Papa" *** Was ist das? Wenn Sie die Daten aus dem Blog des Mitglieds anstelle der Texte erhalten, können Sie sehen, wie nah die Mitglieder sind. (Lass es uns das nächste Mal versuchen ...)

Verweise

1: Grundlagen der Verarbeitung natürlicher Sprache (TensorFlow)

2: [uepon tägliches Memorandum] (https://uepon.hatenadiary.com/entry/2019/02/10/150804)

3: [Np-Ur-Datenanalyseklasse] (https://www.randpy.tokyo/entry/word2vec_skip_gram_model)

Recommended Posts

Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
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 habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
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, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
[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 den asynchronen Server von Django 3.0 ausprobiert
Ich habe versucht, den Befehl umask zusammenzufassen
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, die COTOHA-API zu berühren
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, den allgemeinen Zustand der VTuber-Kanalbetrachter zu visualisieren
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, die Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
Ich habe versucht, die Beispielnachrichten zur Geschäftsintegration in Amazon Transcribe zu übertragen
Ich habe versucht, Slack über das Update von Redmine zu informieren
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
zoom Ich habe versucht, den Grad der Aufregung der Geschichte auf der Konferenz zu quantifizieren
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, das Umfangsverhältnis mit 100 Millionen Stellen zu ermitteln
Ich habe versucht, die Genauigkeit meines eigenen neuronalen Netzwerks zu verbessern
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, die optimale Route des Traumlandes durch (Quanten-) Tempern zu finden
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Qiita Job Ich habe versucht, den Job zu analysieren
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
[Linux] Ich habe versucht, die sichere Bestätigungsmethode von FQDN (CentOS7) zu überprüfen.
Ich habe versucht, das RSS des Top-Songs des iTunes Store automatisch abzurufen
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.