[PYTHON] Je veux gérer la rime part1

__ Introduction __

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.) ~~

__ Jugement de la rime __

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...

__ Quantification de la rime __

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 ~~

__ Quoi sortir __

À 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.

__ Impressions, développement futur __

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 conclusion

* 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

Je veux gérer la rime part1
Je veux gérer la rime part3
Je veux gérer la rime part2
Je veux gérer la rime part5
Je veux gérer la rime part4
Je veux gérer la rime part7 (BOW)
Je veux gérer la rime part6 (organiser une fois)
Je veux gérer la rime part8 (fini une fois)
Je veux automatiser ssh en utilisant la commande expect! partie 2
Je veux afficher la barre de progression
Je souhaite personnaliser l'apparence de zabbix
Je souhaite utiliser la fonction d'activation Mish
Je veux afficher la progression en Python!
Je veux voir le nom de fichier de DataLoader
Je veux grep le résultat de l'exécution de strace
Je veux faire défiler la table de décalage Django, mais ...
Je veux gérer l'optimisation avec python et cplex
Je veux résoudre SUDOKU
Je veux hériter de l'arrière avec la classe de données python
Je veux bien comprendre les bases de Bokeh
Je veux écrire en Python! (3) Utiliser des simulacres
J'ai essayé d'effacer la partie négative de Meros
Je veux automatiser ssh en utilisant la commande expect!
Je souhaite publier le produit au moindre coût
Je veux utiliser le jeu de données R avec python
Je souhaite augmenter la sécurité de la connexion SSH
[TensorFlow] Je souhaite maîtriser l'indexation pour Ragged Tensor
Je veux pouvoir analyser des données avec Python (partie 3)
Je veux utiliser la dernière version de gcc même si je n'ai pas les privilèges sudo! !!
Je veux initialiser si la valeur est vide (python)
Je souhaite enregistrer les photos envoyées par LINE vers S3
maya Python Je veux réparer à nouveau l'animation cuite.
Je veux déplacer le sélénium pour le moment [pour mac]
Je veux pouvoir analyser des données avec Python (partie 1)
Je souhaite utiliser uniquement le traitement de normalisation SudachiPy
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
Je veux changer le drapeau japonais en drapeau des Palaos avec Numpy
Je veux pouvoir analyser des données avec Python (partie 4)
Je souhaite calculer le temps d'arrêt autorisé à partir du taux de fonctionnement
Je veux pouvoir analyser des données avec Python (partie 2)
[Python] Je souhaite utiliser l'option -h avec argparse
Je veux déterminer l'authenticité d'un élément du tableau numpy
Je veux connaître la nature de Python et pip
Je veux rendre le type de dictionnaire dans la liste unique
Je souhaite mapper le code EDINET et le numéro de valeur
Keras Je veux obtenir la sortie de n'importe quelle couche !!
Je veux aligner les nombres valides dans le tableau Numpy
Je veux connaître la légende du monde des technologies informatiques
Je veux créer un Dockerfile pour le moment.
Je ne voulais pas écrire la clé AWS dans le programme
Je veux comprendre à peu près systemd
J'ai essayé de calculer l'intégrale de probabilité (I à l'intégrale)
Je veux gratter des images et les former
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je veux déboguer avec Python
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Je veux trouver automatiquement des pièces de haute qualité à partir des vidéos que j'ai tournées