Probieren Sie etwas anderes als zuvor. Ich war besorgt darüber, wie der Text geteilt werden soll, aber wenn Sie die Übereinstimmung des Vokals "aiueo" sehen, können Sie die Sätze vergleichen, indem Sie die Vokale auf verschiedene Arten anordnen und zeigen, ob der Vokal im Satz erscheint. Ist es nicht? Ich werde es basierend auf der Idee versuchen. Mit anderen Worten, jedes Wort in der binären Ausdrucksmethode, das "sich nicht um die Häufigkeit des Auftretens kümmert und nur darauf achtet, ob jedes Wort erscheint oder nicht", ist in verschiedenen Vokalen angeordnet.
from pykakasi import kakasi
import re
import numpy as np
import pandas as pd
with open("./gennama.txt","r", encoding="utf-8") as f:
data = f.read()
vowel_list = ["a","i","u","e","o"]
#Wortliste. Ein 2- bis 4-stelliges Wort, das nur mit Vokalen erstellt werden kann. 775 Typen
word_list = []
for i in vowel_list:
for j in vowel_list:
for k in vowel_list:
for l in vowel_list:
word_list.append(i+j)
word_list.append(i+j+k)
word_list.append(i+j+k+l)
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]
Davon abgesehen ist es einfach. Es gibt nicht so viele Arten von Wörtern, 755. Als Faustregel gilt, dass übereinstimmende Vokale mit 5 oder mehr Zeichen äußerst selten sind. Daher haben wir sie auf 4 Zeichen beschränkt. Bis jetzt habe ich verschiedene Wörterbücher erstellt, aber ich werde sie in DataFrame zusammenfassen.
df = pd.DataFrame({"Satz": text_data, "Vokal": vowel_text_list})
#Spaltenname"aa"Wenn es im Text erscheint, ist es 1, andernfalls ist es 0.
binaly_dic = {}
temp = []
for word in word_list:
for vowel in vowel_text_list:
if word in vowel:
temp.append(1)
else:
temp.append(0)
binaly_dic[word] = temp
temp = []
for k, v in binaly_dic.items():
df[k] = v
df.to_csv("df_test.csv")
Die Spalten sind "Sätze, Vokale, Wörter ...", "Sätze" sind Sätze, in die die ursprünglichen Textdaten unterteilt sind, "Vokale" sind solche, die nur in Vokale umgewandelt werden, und "Wörter ..." sind Sätze. Wenn es drinnen war, wurde es 1 gegeben, und wenn es nicht drinnen war, wurde es 0 gegeben.
#Kosinusähnlichkeit
def cosine_similarity(v1, v2):
cos_sim = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
return cos_sim
print(cosine_similarity(df.iloc[0, 2:].values, df.iloc[3, 2:].values))
Auf diese Weise wird beispielsweise die Ähnlichkeit zwischen Satz 0 und Satz 3 angezeigt. Sie können auch sum
verwenden, um schnell herauszufinden, welche Wörter am häufigsten verwendet werden.
Da ich mich nur auf Vokale konzentrierte, war die Anzahl der Wörter auf 755 begrenzt, selbst wenn alle Kombinationen mit 2 bis 4 Zeichen berücksichtigt wurden. Bis jetzt hatte ich versucht, den Text zu teilen und damit umzugehen, aber es gab einige Dinge, die ich so tun konnte, wie sie waren. Es ist ein großes Ereignis für mich, deshalb habe ich einen Artikel geschrieben, obwohl der Inhalt dünn ist. In Zukunft werde ich etwas tun, das auf dem erstellten DataFrame basiert, z. B. ob ich etwas mehr tun kann, basierend auf der Ähnlichkeit der Sätze.
Recommended Posts