Depuis que j'ai fait un graphique la dernière fois, je vais essayer le clustering, etc. De plus, la manière de capturer la rime est élargie. Il est converti de "e i" → "ee", "o u" → "oo", et celui avec la même voyelle après conversion est également considéré comme "rimp". Ceci était basé sur le katakana anglais et japonais, ce qui est facile pour les enfants de faire des erreurs. Ne pas écrire «ei» signifie que «eki» ne devient pas «oui». «I» et «U» doivent être des voyelles seules. ("Reizoko" est "Reizoko")
import networkx as nx
import matplotlib.pyplot as plt
import community
G = nx.Graph()
G.add_weighted_edges_from(edge_list)
#Clustering
partition = community.best_partition(G, weight="weight")
#Séparez les nœuds de chaque communauté dans une liste.[[Liste des nœuds de la communauté 0],[Liste des nœuds de la communauté 1]…]
part_sub = [[] for _ in set(list(partition.values()))]
for key in partition.keys():
part_sub[partition[key]].append(key)
#Lister les nœuds qui ont la centralité maximale des vecteurs propres dans chaque communauté
max_betw_cent_node = []
for part in part_sub:
G_part = nx.Graph()
for edge in edge_list:
if edge[0] in part and edge[1] in part:
G_part.add_weighted_edges_from([edge])
max_betw_cent_node.append(max(G_part.nodes(), key=lambda val:
nx.eigenvector_centrality_numpy(G_part, weight="weight")[val]))
print([dic[i] for i in max_betw_cent_node])
#Indicateur de modularité
print(community.modularity(partition,G))
Nous avons regroupé et trouvé celui avec la centralité maximale des vecteurs propres pour chaque communauté. Si une bonne division est effectuée, de bons résultats seront obtenus lorsque chacun sera défini comme target_word. Pensez à définir un seuil pour la pièce utilisée pour l'épaisseur du bord afin que le poids soit différent.
from pykakasi import kakasi
import re
with open("./gennama.txt","r", encoding="utf-8") as f:
data = f.read()
kakasi = kakasi()
kakasi.setMode('J', 'K')
kakasi.setMode('H', 'K')
conv = kakasi.getConverter()
text_data = conv.do(data)
#e i → ee,Obtenez le texte converti comme o u → oo
def expansion(text_data):
#Selon la dernière lettre, je,Résoudre le u supplémentaire en ajustant la longueur
text_data_len = len(text_data)
#Traiter de bonnes chaises et une série de "I, U" comme cette rumeur.
text_data = text_data.replace("bien", "Je je").replace("U","U u")
text_data = text_data.split("je")
new_text_data = []
kakasi.setMode('K', 'a')
conv = kakasi.getConverter()
for i in range(len(text_data):
if len(text_data[i]) > 0:
if ("e" in conv.do(text_data[i][-1])):
new_text_data.append(text_data[i] + "e")
else:
new_text_data.append(text_data[i] + "i")
text_data = "".join(new_text_data).split("C")
new_text_data = []
for i in range(len(text_data):
if len(text_data[i]) > 0:
if ("o" in conv.do(text_data[i][-1])):
new_text_data.append(text_data[i] + "o")
else:
new_text_data.append(text_data[i] + "u")
return "".join(new_text_data)[:text_data_len]
print(expansion(text_data))
Premièrement, j'avais pour politique de convertir les données en katakana, de les diviser par «i, u» et de changer le traitement en fonction de la voyelle du caractère immédiatement précédent, mais j'ai eu du mal. Si la fin des données est "i, u" ou autre, "iu" reste. Je l'ai traité en faisant en sorte que la longueur soit la même que celle des données d'argument, mais quand j'ai essayé print
," i "est resté à la fin. Je ne m'attendais pas à l'apparition continue de "Good, U". Après tout, lorsque vous l'essayez, cela ne se passe pas bien et vous ne le remarquez souvent pas à moins de le faire.
Je vais marquer la partie correspondante pour chacun (données de conversion katakana, données avec seulement des voyelles restantes, données étendues) et essayer de capturer (correspondance de consonnes, correspondance de voyelles, correspondance de son). Il a été jugé inutile de voir la correspondance entre un son long, une répulsion sonore et un son stimulant. En d'autres termes, résumons ce que nous avons fait jusqu'à présent. Je pense que N-gramme et la partie de division spatiale devraient être considérés, et il y a un problème dans la façon de voir la partie correspondante. Je voudrais résumer la meilleure méthode actuelle, préparer quelques données d'entrée et la vérifier.
Recommended Posts