Presque tous les SNS tels que Twitter sont écrits horizontalement. Écrivons un script Python qui convertit cela en écriture verticale tout en étudiant la programmation Python.
Tweet
Je voudrais écrire les tweets suivants verticalement.
tweet = '''\
Normalement, Tweet est écrit horizontalement,
Je veux écrire ceci verticalement.
Cela rend la recherche plus difficile, non?
Pourquoi ne pas l'essayer avec Python?
'''
tweet
'Le Tweet est généralement écrit horizontalement, mais \ nJe veux l'écrire verticalement. \ n Ensuite, il sera difficile de rechercher, non? \ nPourquoi ne pas l'essayer avec Python? \ n '
Vous pouvez le décomposer en caractères un par un en procédant comme suit.
for line in tweet.split("\n"):
print([line[i] for i in range(len(line))])
['Public', 'Communication', 'is', '', 'T', 'w', 'e', 'e', 't', '', 'is', 'horizontal', 'book' , 'Ki', 'Na', 'N', 'Da', 'Ke', 'Do', 'Sa', ','] ['Ko', 're', 'to', 'vertical', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke', ' Yo ','. '] ['So', 'U', 'Su', 'Ru', 'and', ',', 'Inspection', 'Search', 'Sa', 'Re', 'to', 'Ku', ' Ku ',' na ',' ru ',' n ',' ji ',' ya ',' ne ','? '] ['Je', '', ',' chi ',' yo ',' ',' P ',' y ',' t ',' h ',' o ',' n ',' in ',' ','',',',',',',',',',' ou','? '] []
Cependant, seule la dernière ligne sera vide, donc excluons-la.
for line in tweet.split("\n"):
if len(line) > 0:
print([line[i] for i in range(len(line))])
['Public', 'Communication', 'is', '', 'T', 'w', 'e', 'e', 't', '', 'is', 'horizontal', 'book' , 'Ki', 'Na', 'N', 'Da', 'Ke', 'Do', 'Sa', ','] ['Ko', 're', 'to', 'vertical', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke', ' Yo ','. '] ['So', 'U', 'Su', 'Ru', 'and', ',', 'Inspection', 'Search', 'Sa', 'Re', 'to', 'Ku', ' Ku ',' na ',' ru ',' n ',' ji ',' ya ',' ne ','? '] ['Je', '', ',' chi ',' yo ',' ',' P ',' y ',' t ',' h ',' o ',' n ',' in ',' ','',',',',',',',',',' ou','? ']
Exprimez intelligemment le processus ci-dessus en utilisant la notation d'inclusion de liste et placez-le dans la variable data
.
data = [[line[i] for i in range(len(line))] for line in tweet.split("\n") if len(line) > 0]
print(data)
[['Public', 'Communication', 'is', '', 'T', 'w', 'e', 'e', 't', '', 'is', 'horizontal', 'book ',' Ki ',' Na ',' N ',' Da ',' Ke ',' Do ',' Sa ',', '], [' Ko ',' Re ',' to ',' Vertical ',' calligraphie ',' ki ',' ni ',' shi ',' ta ',' i ',' wa ',' ke ',' yo ','. '], [' So ',' U ',' Su ',' Ru ',' and ',', ',' Inspection ',' Search ',' Sa ',' Re ',' Ni ',' Ku ',' Ku ',' na ',' ru ',' n ',' ji ',' ya ',' ne ','? '], [' I ',' ',', 'Chi', 'Yo', '', 'P', 'y', 't', 'h', 'o', 'n', 'de' , 'Ya', 'tsu', 'te', 'mi', 'na', 'i', 'ka', '? ']]
Je voudrais pouvoir utiliser numpy car je veux transposer la matrice.
import numpy as np
np.array(data)
array ([list (['Public', 'Communication', 'is', '', 'T', 'w', 'e', 'e', 't', '', 'is', 'horizontal ',' Calligraphie ',' Ki ',' Na ',' N ',' Da ',' Ke ',' Do ',' Sa ',', ']), list (['ko', 're', 'to', 'vertical', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke' , 'Yo', '.']), list (['so', 'u', 'su', 'ru', 'and', ',', 'inspection', 'search', 'sa', 're', 'ni', 'ku' , 'Ku', 'na', 'ru', 'n', 'ji', 'ya', 'ne', '?']) list (['i', 'tsu', 'chi', 'yo', '', 'P', 'y', 't', 'h', 'o', 'n', 'in', 'Ya', 'tsu', 'te', 'mi', 'na', 'i', 'ka', '?'])], dtype=object)
Comme mentionné ci-dessus, cela devient un tableau de listes et cela ne fonctionne pas.
Par conséquent, mesurez le nombre de lignes et de colonnes et préparez un tableau correspondant à cette taille.
max_length = 0 #Comptez le nombre de caractères dans la phrase la plus longue
for d in data:
if max_length < len(d):
max_length = len(d)
De ce qui précède, nous pouvons voir que «tweet» peut être représenté par un tableau de lignes «len (data)» et de colonnes «max_length». Alors, préparons un tableau numpy de la même taille. Remplissez-le de caractères vides à l'avance.
import numpy as np
np.full((len(data), max_length), " ")
array([['\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000'],
['\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000'],
['\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000'],
['\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000',
'\u3000', '\u3000', '\u3000']], dtype='<U1')
Après cela, copiez les caractères des données dans le tableau numpy caractère par caractère.
Cependant, à ce stade, assurez-vous que l'ordre des instructions est inversé.
data2 = np.full((len(data), max_length), " ")
for i in range(len(data)):
for j in range(max_length):
if j < len(data[i]):
data2[len(data) - i - 1][j] = data[i][j]
data2
array ([['i', 'tsu', 'chi', 'yo', '', 'P', 'y', 't', 'h', 'o', 'n', 'de' , 'Ya', «T», «T», «Mi», «Na», «I», «Ka», «? ',' \ u3000 '], ['So', 'U', 'Su', 'Ru', 'and', ',', 'Inspection', 'Search', 'Sa', 'Re', 'to', 'Ku', ' Ku ', «Na», «Ru», «N», «Ji», «Ya», «Ne», «? ',' \ u3000 '], ['Ko', 're', 'to', 'vertical', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke', ' Yo ', '。', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000'], ['Public', 'Communication', 'is', '', 'T', 'w', 'e', 'e', 't', '', 'is', 'horizontal', 'book' , 'Ki', 'Na', 'N', 'Da', 'Ke', 'Do', 'Sa', ',']], dtype = '<U1')
Si vous pouvez le faire jusqu'à présent, vous pouvez écrire verticalement en utilisant la transposition de la matrice.
data2.T #Translocation matricielle
tableau ([['i', 'so', 'ko', 'normal'], ['T', 'U', 'Re', 'Tsu'], ['Chi', 'Su', 'O', 'is'], ['Yo', 'Ru', 'Vertical', ''], ['', 'Et', 'Livre', 'T'], ['P', ',', 'ki', 'w'], ['y', 'inspection', 'to', 'e'], ['t', 'recherche', 'shi', 'e'], ['h', 'sa', 'ta', 't'], ['o', 're', 'i', ''], ['n', 'à', 'wa', 'wa'], ['De', 'Ku', 'Ke', 'Horizontal'], ['Ya', 'Ku', 'Yo', 'Book'], [«T», «Na», «. ',' Ki '], ['Te', 'Ru', '\ u3000', 'Na'], ['Mi', 'N', '\ u3000', 'N'], ['Na', 'Ji', '\ u3000', 'Da'], ['Je', 'ya', '\ u3000', 'ke'], ['Ka', 'Ne', '\ u3000', 'Do'], ['? ','? ',' \ u3000 ',' sa '], ['\u3000', '\u3000', '\u3000', '、']], dtype='<U1')
Sortie de la matrice transposée sous forme de chaîne de caractères
delimiter = " "
for line in data2.T:
print(delimiter.join(line))
Isoko Fu Tsuretsu Chisu Verticale Et livre T P, ki w y pour vérifier e t rechercher e h sata t o Rei n À côté du grand Livre Yakuyo Quoi? Ki Teruna Minnesota C'est le même Yake Kane ?? ?? Sa 、
Cela peut être réécrit intelligemment en utilisant la notation d'inclusion de liste.
delimiter = " "
print("\n".join([delimiter.join(line) for line in data2.T]))
Isoko Fu Tsuretsu Chisu Verticale Et livre T P, ki w y pour vérifier e t rechercher e h sata t o Rei n À côté du grand Livre Yakuyo Quoi? Ki Teruna Minnesota C'est le même Yake Kane ?? ?? Sa 、
J'ai essayé l'opération ci-dessus en tant que fonction appelée yoko2tate
.
def yoko2tate(tweet, delimiter = " "):
data = [[line[i] for i in range(len(line))] for line in tweet.split("\n") if len(line) > 0]
max_length = 0
for d in data:
if max_length < len(d):
max_length = len(d)
data2 = np.full((len(data), max_length), " ")
for i in range(len(data)):
for j in range(max_length):
if j < len(data[i]):
data2[len(data) - i - 1][j] = data[i][j]
return "\n".join([delimiter.join(line) for line in data2.T])
L'exemple d'utilisation ressemble à ceci.
tweet = '''\
Ah...Ahりのまま 今 起こったことを話すぜ!
"Quand j'ai écrit un tweet, c'est devenu une écriture verticale."
Nana...何を言っているか分からねーと思うが、おれも何をされたのか分からNanaかった...
'''
print(yoko2tate(tweet))
"Ah" .Tsu. . JE . .-. Quoi À Du mot Puissance Teshima Était Rura maintenant Ou Montée verticale minute Livre Raki Nita -Nako Toto Pensée Histoire de U Est , Ze Oh! Ré Aussi quoi À Sa Ré Ta de Ou Minutes Ou Et al. Nana Ou Tsu Ta . . .
Recommended Posts