[PYTHON] Je souhaite convertir du texte horizontal en texte vertical et le publier sur Twitter, etc.

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 '

Décomposer en 1 caractère 1 caractère

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', '? ']]

Transposé avec numpy

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       、

Résumé

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

Je souhaite convertir du texte horizontal en texte vertical et le publier sur Twitter, etc.
Je veux tweeter Twitter avec Python, mais j'y suis accro
J'ai essayé d'utiliser Twitter Scraper avec AWS Lambda et cela n'a pas fonctionné.
Je veux créer un fichier pip et le refléter dans le menu fixe
Je veux créer un histogramme et superposer la courbe de distribution normale dessus. édition matplotlib
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
Je veux utiliser Linux sur mac
Je veux formater et vérifier le code Python à mon goût sur VS Code
Je souhaite développer des applications Android sur Android
Je veux déposer un fichier sur tkinter et obtenir son chemin [Tkinter DnD2]
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
J'ai fait un modèle de classification d'images et essayé de le déplacer sur mobile
Je veux faire pyenv + pipenv même sous Windows
Je veux enregistrer les entrées / sorties de fichiers sous Linux
Je veux remplacer les variables dans le fichier de modèle python et le produire en masse dans un autre fichier
Je veux convertir une image en WebP avec sucette
Je souhaite développer des applications Android sur Android (débogage)
Je veux trouver un package populaire sur PyPi
Publiez sur votre compte en utilisant l'API sur Twitter
Je veux AWS Lambda avec Python sur Mac!
Je souhaite utiliser OpenJDK 11 avec Ubuntu Linux 18.04 LTS / 18.10
J'ai essayé d'installer scrapy sur Anaconda et je n'ai pas pu
Je veux faire Wake On LAN de manière entièrement automatique
POSTEZ l'image sélectionnée sur le site Web avec multipart / form-data et enregistrez-la sur Amazon S3! !!
Je souhaite copier un article en anglais à partir d'un pdf et le mettre dans Google Traduction
Je veux absorber la différence entre l'instruction for sur la matrice Python + numpy et l'instruction Julia for
Utilisez pyOCR pour convertir la description de la carte en texte
Je souhaite désactiver les interruptions sur le Raspberry Pi (≒ DI / EI)
Je souhaite annoncer ma thèse de fin d'études sur IPython Notebook
Comment convertir Youtube en mp3 et le télécharger en toute sécurité [Python]
Je souhaite convertir une chaîne de caractères ISO-8601 en heure japonaise
Je veux connaître la nature de Python et pip
Je veux compter des valeurs uniques dans un tableau ou un tuple
Je souhaite mapper le code EDINET et le numéro de valeur
Je veux que Sphinx soit pratique et utilisé par tout le monde
Je veux connaître la légende du monde des technologies informatiques
Je veux utiliser VS Code et Spyder sans anaconda! !! !!
Script pour convertir entre les fichiers de langue Xcode et le texte délimité par des tabulations
[Pour la phobie de l'écran noir] Je veux en savoir plus sur Linux et les shells, donc je les ai illustrés de manière lâche.
Comment vérifier et modifier les autorisations Linux (autorisations) (chmod) (je veux être enregistré depuis Permiss sur refusé)