[PYTHON] Ich möchte mit dem Reim part8 umgehen (einmal fertig)

__ Inhalt __

Versuchen wir die vorherige Korrektur, Verwendung und Zählung. Da es in dem Teil, in dem die Vokalfolge als Wort betrachtet wurde, eine Duplizierung gab, korrigieren Sie diese so, dass keine Duplizierung erfolgt. Danach werde ich, wie beim letzten Mal, die Sätze im Text in binären Ausdrücken ausdrücken und diejenigen mit hoher Kosinusähnlichkeit anzeigen. Machen wir dasselbe für den Zählausdruck.

__ Änderungen __

from pykakasi import kakasi
import re
import numpy as np
import pandas as pd
import itertools

with open("./test.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

text_data = re.split("\u3000|\n", data)
kakasi = kakasi()
kakasi.setMode('J', 'a')
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
conv = kakasi.getConverter()
vowel_text_list = [conv.do(d) for d in text_data]
vowel_text_list = [re.sub(r"[^aeiou]+","",text) for text in vowel_text_list]

Ich habe "itertools" verwendet, um das Duplizieren des Wortlistenteils zu verhindern. Es wurde auch verwendet, um zu vermeiden, dass (0,1) und (1,0) zweimal berechnet werden, wenn die Kosinusähnlichkeit der Verwendung untersucht wird. itertools

__ Binäre Darstellung __

df = pd.DataFrame({"Satz": text_data, "Vokal": vowel_text_list})
#Spaltenname"aa"Wenn es im Text erscheint, ist es 1, andernfalls ist es 0.
binali_dic = {}
temp = []
for word in word_list:
    for vowel in vowel_text_list:
        if word in vowel:
            temp.append(1)
        else:
            temp.append(0)
        binali_dic[word] = temp
    temp = []

for k, v in binali_dic.items():
    df[k] = v

Die dritte und die folgenden Spalten geben an, ob der Satz eine Folge von Vokalen enthält, die mit einem Wort wie "aa" verglichen wird.

die Art zu benutzen

#Kosinusähnlichkeit
def cosine_similarity(v1, v2):
    cos_sim = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
    return cos_sim

#Übergeben Sie den Index von df und geben Sie den gemeinsamen Vokal zurück
def common_vowel(index1, index2):
    idx = df.iloc[index1, 2:].values + df.iloc[index2, 2:].values
    vowel_word = df.columns[2:]
    common_list = [vowel_word[i] for i in range(len(idx)) if idx[i] == 2]
    return common_list

#Cosinus-Ähnlichkeitsranking. aufführen(Index,Index,cos_sim,Gemeinsame Vokalliste)
def cos_sim_ranking(df, threshold):
    ranking = []
    idx = itertools.combinations(df.index, 2)
    for i in idx:
        cos_sim = cosine_similarity(df.iloc[i[0]][2:].values, df.iloc[i[1]][2:].values)
        if cos_sim > threshold:
            com_list = common_vowel(i[0], i[1])
            ranking.append((i[0],i[1],cos_sim,com_list))
    return sorted(ranking, key=lambda x:-x[2])

ranking = cos_sim_ranking(df, 0.4)
for r in ranking:
    print(df["Satz"][r[0]] + ":" + df["Satz"][r[1]])
    print("Gemeinsamer Vokal:{}".format(r[3]))
    print()

Für Elemente oberhalb der Kosinus-Ähnlichkeitsschwelle (beliebiger Wert) werden der ursprüngliche Satz und die Folge gemeinsamer Vokale in absteigender Reihenfolge der Ähnlichkeit ausgegeben. Der Reim kann hervorgehoben werden, indem der gemeinsame Vokal am Anfang oder Ende des Satzes unter Verwendung der Inversionsmethode des ursprünglichen Satzes verschoben wird.

__ Ausdruck zählen __

df = pd.DataFrame({"Satz": text_data, "Vokal": vowel_text_list})
#Spaltenname"aa"Der Wert ist die Anzahl der Vorkommen
count_dic = {}
temp = []
for word in word_list:
    for vowel in vowel_text_list:
        temp.append(vowel.count(word))
    count_dic[word] = temp
    temp = []

for k, v in count_dic.items():
    df[k] = v

#Übergeben Sie den Index von df und geben Sie den gemeinsamen Vokal und die Anzahl der Vorkommen zurück
def common_vowel(index1, index2):
    idx = df.iloc[index1, 2:].values + df.iloc[index2, 2:].values
    vowel_word = df.columns[2:]
    common_list = [(vowel_word[i], idx[i]) for i in range(len(idx)) if idx[i] >= 2]
    return common_list

Der Unterschied zwischen dem Erstellen eines Datenrahmens und dem Hinzufügen und Zurückgeben der "Anzahl der Vorkommen" in common_vowel. Die Ausgabeergebnisse sind unterschiedlich, selbst wenn derselbe Schwellenwert verwendet wird, und ich fand, dass der Zählausdruck, der die Anzahl der Vorkommen anzeigt, gut ist.

__ Zusammenfassung __

Die Ausgabe der Testdaten war recht zufriedenstellend. Ein gewöhnlicher Vokal ist ein Vokal mit einer Anzahl von 2 oder mehr, aber es gibt einige, die eine Anzahl von 2 in einem Satz haben. Dies zeigte, dass der Text selbst gereimt werden konnte und es eine unerwartete Ernte war. Zuerst habe ich versucht, so lange wie möglich damit umzugehen, aber ich erinnere mich, dass ich aufgegeben habe zu denken, dass ich den "Ton, auf den der Satz selbst treten kann" nicht erfassen konnte. Danach machte ich mir Sorgen darüber, wie ich es teilen sollte, und es war interessant, dass ich Sätze behandelte, ohne sie zu teilen. Nun, es ist nicht so, dass das, was ich bisher getan habe, nicht schlecht ist, und ich bin froh, dass ich die Vor- und Nachteile erkannt habe. Es mag kleinere Korrekturen und Verbesserungen geben, aber ich fand es interessant, wie man den Text durch "welche Art von Vokalsequenz" ausdrückt, so dass "Ich möchte mit dem Reim umgehen" einmal endet.

__ Was ich in Zukunft machen möchte __

Ich möchte diesen Zählausdruck mit den Texten des eigentlichen Rapper ausprobieren und sehen, ob es eine Entdeckung gibt.

Recommended Posts

Ich möchte mit dem Reim part8 umgehen (einmal fertig)
Ich möchte mit dem Reim part6 umgehen (einmal organisieren)
Ich möchte mit dem Reim part2 umgehen
Ich möchte mit dem Reim part5 umgehen
Ich möchte mit dem Reim part4 umgehen
Ich möchte ssh mit dem Befehl expected automatisieren! Teil 2
Ich möchte den Fortschrittsbalken anzeigen
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte den Dateinamen von DataLoader sehen
Ich möchte das Ausführungsergebnis von strace erfassen
Ich möchte in der Django-Verschiebungstabelle scrollen, aber ...
Ich möchte mit Python-Datenklasse nach hinten erben
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich möchte ssh mit dem Befehl expected automatisieren!
Ich möchte das Produkt zu den niedrigsten Kosten veröffentlichen
Ich möchte R-Datensatz mit Python verwenden
Ich möchte die Sicherheit der SSH-Verbindung erhöhen
[TensorFlow] Ich möchte die Indizierung für Ragged Tensor beherrschen
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich möchte das neueste gcc verwenden, auch wenn ich keine Sudo-Berechtigungen habe! !!
Ich möchte initialisieren, wenn der Wert leer ist (Python)
Ich möchte die von LINE an S3 gesendeten Fotos speichern
maya Python Ich möchte die gebackene Animation wieder reparieren.
Ich möchte vorerst Selen bewegen [für Mac]
Ich möchte Daten mit Python analysieren können (Teil 1)
Ich möchte nur die SudachiPy-Normalisierungsverarbeitung verwenden
Ich möchte Betriebsinformationen über die Yahoo-Route erhalten
Ich möchte Daten mit Python analysieren können (Teil 4)
Ich möchte die zulässige Ausfallzeit aus der Betriebsrate berechnen
Ich möchte Daten mit Python analysieren können (Teil 2)
[Python] Ich möchte die Option -h mit argparse verwenden
Ich möchte die Authentizität eines Elements eines numpy-Arrays bestimmen
Ich möchte die Natur von Python und Pip kennenlernen
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
Ich möchte den EDINET-Code und die Wertpapiernummer zuordnen
Keras Ich möchte die Ausgabe einer beliebigen Ebene erhalten !!
Ich möchte die gültigen Zahlen im Numpy-Array ausrichten
Ich möchte die Legende der IT-Technologiewelt kennenlernen
Ich möchte vorerst eine Docker-Datei erstellen.
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
Ich möchte den Namen der ausgeführten Funktion / Methode erhalten
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Ich möchte automatisch hochwertige Teile aus den von mir aufgenommenen Videos finden
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
[Linux] Ich möchte das Datum wissen, an dem sich der Benutzer angemeldet hat
Ich möchte systemd grob verstehen
Ich möchte die HTML-Version der OpenCV 3.1-Version "OpenCV-Python Tutorials" lesen
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich möchte Python GUI ausführen, wenn Raspberry Pi startet
LINEbot-Entwicklung möchte ich den Betrieb in der lokalen Umgebung überprüfen
Ich möchte ein System erstellen, um zu verhindern, dass vergessen wird, den Schlüssel 1 festzuziehen
Ich habe versucht, das Wahrscheinlichkeitsintegral (I zu Integral) zu berechnen.
Vorerst möchte ich jede Datei mit ffmpeg konvertieren !!
Ich möchte ○○ mit Pandas machen
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
Ich möchte Yolos Anmerkung kopieren