J'aime les tours, donc j'ai toujours voulu passer le mot. "Rhythm" est une partie intéressante et profonde. J'ai essayé d'écrire les paroles à plusieurs reprises, mais ça n'avait pas l'air correct (c'est devenu une merde, et l'histoire était en désordre avec le rythme en tête). Ensuite, si vous entrez la source des paroles, pourquoi ne pas produire quelque chose comme "rythme"? ?? Je vais essayer. ~~ (Avez-vous écrit des chansons d'amour ou des paroles dans votre jeunesse? Lol.) ~~
Même si vous dites la rime dans une bouchée, le son change en fonction de la prononciation ("so" et "soo"), et ainsi de suite. Cette fois, si les voyelles [a, i, u, e, o] sont dans la même séquence, elle est considérée comme "rym". La conversion en Romaji est requise, mais [kakashi] [lien](mentionné ici) le rend possible. Pour le moment, j'utiliserai les données de texte avec les paroles d'une chanson d'un certain rappeur comme données d'entrée. ~~ (En parlant de "Kakashi", "Robo ou Sakuyamako-like par KICK THE CAN CREW" me vient à l'esprit) ~~ [link]:https://crimnut.hateblo.jp/entry/2018/08/29/180455
from pykakasi import kakasi
import re
with open("gennama.txt","r") as f:
data = f.read()
kakasi = kakasi()
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
conv = kakasi.getConverter()
filename = data
data = conv.do(filename)
data_re = re.sub(r"[^aeiou]+","",data)
print(data_re)#Sortie oeauiaau...
Je l'ai converti en Romaji avec kakasi
et extrait uniquement la cible [a, i, u, e, o] avec re.sub ()
. Ensuite, j'aimerais diviser les données d'entrée selon une certaine règle et faire un traitement sur la partie où les voyelles correspondent, mais je me perds ici. Il est difficile de dire ce que vous voulez faire et quel est le "rin". Je m'inquiétais de la forme des données d'entrée et de la manière de les transformer, mais je ne pouvais pas y arriver, alors j'ai pensé à "quantifier la rime" pour le moment.
~~ ("Tout le monde a dit que la rime évoluée est bonne. Dans la ligne Ginza de YOSHI (Hunger Ranger)" Le son de [in] est confortable. Je n'ai pas pensé à [n] cette fois) ~~
#Découpez le mot le plus court et, s'il est inclus dans l'autre, considérez-le comme une "rime" et ajoutez sa longueur en tant que partition
def make_score(word_a, word_b):
score = 0
if len(word_a) > len(word_b):
word_len = len(word_b)
for i in range(word_len):
for j in range(word_len + 1):
if word_b[i:j] in word_a:
score += len(word_b[i:j])
else:
word_len = len(word_a)
for i in range(word_len):
for j in range(word_len + 1):
if word_a[i:j] in word_b:
score += len(word_a[i:j])
return score
Je pense que j'ai pu exprimer "quantification de la rime" avec cette partition. C'était correct de ne marquer que le match à la fin du mot, mais j'ai décidé de trancher le mot. ~~ Tous les verbes japonais se terminent par le son "u". Il n'est pas souhaitable de s'attarder uniquement sur les verbes ~~
À propos, les données d'entrée sont encore incertaines, mais pensons à la sortie jusqu'à présent. La sortie n'est pas pertinente, mais c'est une sortie "lyrique". .. On peut dire que la «quantification de la rime» est similaire entre les mots. Si vous entrez votre mot préféré dans l'un des mots, il recommandera celui qui présente une forte similitude à partir des données. Les données d'entrée sont les paroles d'un certain wrapper, la méthode de division est vide selon la carte des paroles et les dernières sont résumées sous cette condition. ~~ Je pense que catch copy et dajare sont aussi des rimes. Surtout des mots synonymes. La finition pendant le tour est également confortable. Je pense que marcher sur la rime renforce le sentiment de dire de bonnes choses. ~~
from pykakasi import kakasi
import re
with open("./gennama.txt","r", encoding="utf-8") as f:
data = f.read()
#Cette fois "hoge hoge hoge...Parce qu'il est divisé uniquement par l'espace comme "split"()Uniquement prétraitement
data_sp = data.split()
target_word_origin = "Gennama"
kakasi = kakasi()
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
conv = kakasi.getConverter()
#Convertir en Romaji
target_word = conv.do(target_word_origin)
text_data = conv.do(data).split()
text_data = list(text_data)
#Ne laissez que les voyelles
target_word_vo = re.sub(r"[^aeiou]+","",target_word)
vowel_data = [re.sub(r"[^aeiou]+","",text) for text in text_data]
#vowel_Créez un dictionnaire afin que vous puissiez voir les données avant la conversion de voyelle à partir de l'index de données.
dic = {k:v for k,v in enumerate(data_sp)}
#Découpez le mot le plus court et, s'il est inclus dans l'autre, considérez-le comme une "rime" et ajoutez sa longueur en tant que partition
def make_score(word_a, word_b):
score = 0
if len(word_a) > len(word_b):
word_len = len(word_b)
for i in range(word_len):
for j in range(word_len + 1):
if word_b[i:j] in word_a:
score += len(word_b[i:j])
else:
word_len = len(word_a)
for i in range(word_len):
for j in range(word_len + 1):
if word_a[i:j] in word_b:
score += len(word_a[i:j])
return score
#Transmettez des données avec seulement des voyelles et des mots arbitraires. Obtenez l'index et le score comme un ensemble afin que vous puissiez comprendre les mots originaux plus tard.
def get_idx_score(vowel_data, target_word):
ranking = []
for i, word_b in enumerate(vowel_data):
score = make_score(target_word, word_b)
ranking.append([i, score])
return sorted(ranking, key=lambda x:-x[1])
ranking = get_idx_score(vowel_data, target_word_vo)
print(target_word_origin)
for i in range(len(ranking)):
idx = ranking[i][0]
score = ranking[i][1]
print("But:" + str(score))
print("mot:" + dic[idx])
J'ai utilisé les paroles terminées comme données d'entrée, mais même si j'utilise les mots dans les paroles pour target_word, la partie qui rime ne vient pas toujours en haut. Cela devrait être le cas et la méthode de division des données d'entrée est appropriée. Cependant, j'ai pu réfléchir plus concrètement à la partie déraisonnable car le contour a été créé. De plus, le problème est devenu clair.
Je pouvais voir la direction. L'entrée est une liste de mes propres mots, et la sortie est un sentiment qui recommande des mots qui peuvent être rimés à partir de l'entrée comme je l'ai fait cette fois. En faisant cela, je pense qu'il est intéressant de savoir que vous pouvez vous attarder dans vos propres mots. Aussi, si vous voulez écrire des paroles comme vous, je pense que la partie centrale des paroles doit être complétée si vous écrivez ce que vous voulez dire sans vous soucier de la rime. À l'avenir, il sera nécessaire d'améliorer la méthode de division des données d'entrée en mots et la notation des rimes. Je veux donner la liberté de saisie comme mes propres mots (je veux garder des dialectes et des phrases uniques), donc je vais essayer diverses choses. (La simple extraction par liaison de mot partiel ne semble pas produire le résultat souhaité.)
* En dessous du mémorandum
Je suis un débutant en programmation. Après avoir reçu un apprentissage en ligne, quand j'ai essayé de faire quelque chose, j'ai essayé d'utiliser tout ce que j'avais appris, en grattant les données d'entrée et en analysant la morphologie ... je pensais que la sortie utiliserait les paroles complètes, LSTM, etc. Rien ne s'est passé. Comme mentionné dans le texte, l'entrée et la sortie étaient déraisonnables, et ce que je voulais faire n'était pas concret, alors je l'ai jeté. Je voulais quelque chose que j'ai fait pour le moment, et j'ai essayé de presser le codage de quelqu'un, mais je n'ai trouvé personne faisant la même chose. (Une personne qui veut marcher sur la comptine originale essayait de cueillir ...)
Ce qui a changé le flux cette fois-ci, c'est le «filtrage des recommandations basé sur le contenu» lors de l'examen de l'apprentissage en ligne, et si la similitude était fixée à «quantification de la rime», il serait possible de faire des recommandations. Ai-je soudain pensé. En fait, je faisais toujours attention à la similitude, mais je ne savais pas comment l'utiliser. Cela semble facile, alors je l'ai essayé, mais cela n'a pas produit le résultat souhaité. Ici, il est devenu clair quel était le point. De plus, je pensais que les données d'entrée pourraient être une liste de mots comme les paroles utilisées cette fois.
Ce que je veux dire, c'est qu'il est important de créer d'abord un cadre général comme celui-ci, les données à utiliser devraient être quelque chose qui peut prédire approximativement la sortie, et l'utilisation du produit fini peut être envisagée plus tard. Il existe également des liens vers des choses que vous ne pensez pas inutiles. Quand j'étais moins motivée pour étudier, j'avais envie de m'en souvenir.
Recommended Posts