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.
** Magie, um Wörter in Vektoren umzuwandeln **
** Wie werden Wörter zu Vektoren? ** ** **
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.
Sammeln Sie Daten entsprechend der Aufgabe, die Sie lösen möchten
Entfernen Sie bedeutungsloses Rauschen wie HTML-Tags ・ ** Schöne Suppe ** ・ ** Standardbibliothek bezüglich Modul **
#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)
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 **
Teilen Sie Sätze Wort für Wort ・ ** MeCab ** ・ ** Janome ** ・ ** Juman +++
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.
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]]
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))
Konvertieren Sie von einer Zeichenfolge in einen numerischen Wert, damit dieser durch maschinelles Lernen verarbeitet werden kann
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.
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))
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.
*** "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 ...)
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