Durch die Analyse der Texte des eigentlichen Rapper gibt es kein bestimmtes Endziel, um etwas zu finden. Ich werde mich darauf konzentrieren, welche Art von Vokalsequenz der Text hat, was ich in "Ich möchte mit dem Reim umgehen" gemacht habe. Die vorbereiteten Daten beziehen sich auf 8 Songs (ca. 90 Songs) einer Gruppe mit zwei kontrastierenden Rapper. Es gibt einen Unterschied zwischen ausgeflipptem Flow (gut im Anlegen von Sound ?!) Und hartem Reim (schwer zu erklären), aber ich hoffe herauszufinden, wie man auf den Reim tritt, die Anzahl der Auftritte und die Vokale, die Sie mögen. .. ~~ "123" wird als "Hi-Fumi" oder "Andu Troyes" gelesen, daher habe ich die Daten in diesem Sinne von Hand vorbereitet ~~
from pykakasi import kakasi
import re
import pandas as pd
import itertools
with open("./data/yoshi.txt","r", encoding="utf-8") as f:
data = f.read()
#Wortliste. Ein 2- bis 4-stelliges Wort, das nur mit Vokalen erstellt werden kann. 775 Typen
word_list2 = [i[0]+i[1] for i in itertools.product("aiueo", repeat=2)]
word_list3 = [i[0]+i[1]+i[2] for i in itertools.product("aiueo", repeat=3)]
word_list4 = [i[0]+i[1]+i[2]+i[3] for i in itertools.product("aiueo", repeat=4)]
word_list = word_list2 + word_list3 + word_list4
#Nacheinander in Songs unterteilt.{Nummer:Liste der Texte, die durch Leerzeichen und Zeilenumbrüche in voller Breite getrennt sind}
text_data = data.split("!")
text_data_dic = {k:re.split("\u3000|\n", v) for k,v in enumerate(text_data)}
kakasi = kakasi()
kakasi.setMode('J', 'a')
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
conv = kakasi.getConverter()
#{Nummer:Liste in Vokale konvertiert}
vowel_text_dic = {}
for k,v in text_data_dic.items():
vowel_text_dic[k] = [conv.do(d) for d in v]
for k,v in vowel_text_dic.items():
vowel_text_dic[k] = [re.sub(r"[^aeiou]+","",d) for d in v]
#Spaltenname"aa"Der Wert ist die Anzahl der Auftritte. Zähle den Ausdruck für ein Lied
count_dic = {}
temp1 = []
temp2 = 0
for word in word_list:
for k,v in vowel_text_dic.items():
for vowel in v:
temp2 += vowel.count(word)
temp1.append(temp2)
temp2 = 0
vowel_text_len = 0
count_dic[word] = temp1
temp1 = []
df = pd.DataFrame(count_dic)
df["label"] = 0
df.to_csv("./data/yoshi.csv", index=False)
aa | ai | au | … | ooou | oooe | oooo | label | |
---|---|---|---|---|---|---|---|---|
0 | 4 | 9 | 7 | … | 1 | 1 | 0 | 0 |
1 | 21 | 18 | 7 | … | 1 | 1 | 2 | 0 |
2 | 8 | 18 | 18 | … | 1 | 0 | 0 | 0 |
3 | 19 | 26 | 23 | … | 0 | 0 | 0 | 0 |
… | … | … | … | … | … | … | … | … |
88 | 12 | 14 | 2 | … | 0 | 0 | 0 | 0 |
89 | 17 | 17 | 10 | … | 1 | 0 | 1 | 0 |
Für jeden Wrapper gibt es zwei vorbereitete Textdateien. Im Text gibt "!" Den Teil an, in dem sich das Lied ändert, und im Text gibt es gemäß der Textkarte "Leerzeichen in voller Breite, Zeilenumbruch". Ich versuche, die Vokale nicht durchgehend zu machen. Die andere Textdatei wurde zur leichteren Identifizierung als df ["label"] = 1 gespeichert.
import pandas as pd
df1 = pd.read_csv("./data/pochomkin.csv")
df2 = pd.read_csv("./data/yoshi.csv")
#Konzentrieren Sie sich auf den Durchschnittswert des zweistelligen Teils
df1_2vowel = df1.describe().iloc[:, :25]
df1_2vowel = df1_2vowel.loc["mean", :]
print(df1_2vowel.sort_values(ascending=False))
df2_2vowel = df2.describe().iloc[:, :25]
df2_2vowel = df2_2vowel.loc["mean", :]
print(df2_2vowel.sort_values(ascending=False))
Es gibt 776 Spalten, also schauen wir sie uns separat an. Ich habe überprüft, was mit dem mit dem höchsten Durchschnittswert für jede Anzahl von Zeichen in der Spalte passiert ist (iloc [:, 25: 150] für 3 Zeichen, 125 Typen von 5 × 5 × 5 und iloc [:, 150: 775] für 4 Zeichen. ]). Bei 2 Zeichen stimmten die oberen 4 von df1 und df2 mit "ai, ia, ou, aa" überein, und bei 3 Zeichen stimmten die oberen 2 "aia, aai" überein. In allen Fällen war der Durchschnittswert von df2 höher.
#Fassen Sie jede Spaltenrichtung zusammen und erhalten Sie den Wert.(Zähle die Nummer in ungefähr 90 Songs)
value_count_1 = df1.sum(axis=0).values
value_count_2 = df2.sum(axis=0).values
#Ein Bool-Wert, der weniger als zehnmal zählt. Weniger als 10 ist wahr
bool_1 = value_count_1 < 10
bool_2 = value_count_2 < 10
#Drucken Sie eine Folge von Vokalen, die auf beiden weniger als zehnmal zählen
print(df1.columns[bool_1 * bool_2])
Bei der Untersuchung der Reihenfolge seltener Vokale in beiden Daten waren 37 anwendbar, von denen die meisten 4-stellige Vokale einschließlich "ee" waren.
Das Ergebnis der Suche nach einer Übereinstimmung oben kann sein, dass es auf Japanisch viele Vokalsequenzen gibt oder dass es dem Rapper gefällt. Aufgrund des Gruppennamens "Ai Ranger" kann er auch häufig in den vorbereiteten Daten vorkommen. Ich habe erwartet, dass "aa" am häufigsten vorkommt, da es viele Wörter von "aaaa" gibt, wie "schlampige, unterschiedliche Körper" in der Reihenfolge "aa", aber unterschiedliche Ergebnisse erhalten werden. Es ist interessant. Unabhängig davon, wie oft die Texte des Rapper als Daten verwendet werden, beziehen sich nicht alle Vokale auf den Reim, daher kann ich nichts sagen. Eine andere Sache, die ich erwartet hatte, war, dass "jeder Rapper eine Lieblingsfolge von Vokalen hat", aber der Unterschied in den Eigenschaften ist nicht so bemerkenswert wie ich erwartet hatte. Warum also nicht darauf konzentrieren? Es ist wie es ist. Was ich diesmal sagen kann ist, dass der Wrapper auf der df2-Seite (harter Reim) häufiger dieselbe Vokalsequenz zu haben scheint als der Wrapper auf der df1. Dies ist wie erwartet. Es ist auch eine neue Entdeckung, dass die Häufigkeit von "ee" niedrig ist. Es kann einen Grund für den Wrapper geben, dies zu vermeiden, z. B. Schwierigkeiten beim Aufnehmen des Tons. Wenn Sie die Daten in zwei Teile teilen, können Sie sie möglicherweise klassifizieren. Es war ein Gefühl, aber es scheint nicht so einfach zu sein. Ich werde mir die Daten in Zukunft etwas genauer ansehen, um festzustellen, ob es einen Unterschied zwischen den beiden gibt.
Recommended Posts