Fast alle SNS wie Twitter sind horizontal geschrieben. Schreiben wir ein Python-Skript, das dies in vertikales Schreiben umwandelt, während wir gleichzeitig die Python-Programmierung studieren.
Tweet
Ich möchte die folgenden Tweets vertikal schreiben.
tweet = '''\
Normalerweise wird Tweet horizontal geschrieben,
Ich möchte das vertikal schreiben.
Das würde es schwieriger machen zu finden, oder?
Warum versuchst du es nicht mit Python?
'''
tweet
'Normalerweise wird Tweet horizontal geschrieben, aber \ nIch möchte es vertikal schreiben. \ n Dann wird es schwierig sein zu suchen, oder? \ nWarum versuchst du es nicht mit Python? \ n '
Sie können es nacheinander in Zeichen aufteilen, indem Sie die folgenden Schritte ausführen.
for line in tweet.split("\n"):
print([line[i] for i in range(len(line))])
['Öffentlich', 'Kommunikation', 'ist', '', 'T', 'w', 'e', 'e', 't', '', 'ist', 'horizontal', 'Buch' , 'Ki', 'Na', 'N', 'Da', 'Ke', 'Do', 'Sa', ','] ['Ko', 're', 'to', 'vertikal', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke', ' Yo ','. '] ['Also', 'U', 'Su', 'Ru', 'und', ',', 'Inspektion', 'Suche', 'Sa', 'Re', 'bis', 'Ku', ' Ku ',' na ',' ru ',' n ',' ji ',' ya ',' ne ','? '] ['ICH', ' ','',',',',',',',',',' oder','? '] []
Da jedoch nur die letzte Zeile leer ist, schließen wir sie aus.
for line in tweet.split("\n"):
if len(line) > 0:
print([line[i] for i in range(len(line))])
['Öffentlich', 'Kommunikation', 'ist', '', 'T', 'w', 'e', 'e', 't', '', 'ist', 'horizontal', 'Buch' , 'Ki', 'Na', 'N', 'Da', 'Ke', 'Do', 'Sa', ','] ['Ko', 're', 'to', 'vertikal', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke', ' Yo ','. '] ['Also', 'U', 'Su', 'Ru', 'und', ',', 'Inspektion', 'Suche', 'Sa', 'Re', 'bis', 'Ku', ' Ku ',' na ',' ru ',' n ',' ji ',' ya ',' ne ','? '] ['ICH', ' ','',',',',',',',',',' oder','? ']
Drücken Sie den obigen Prozess mit der Listeneinschlussnotation intelligent aus und fügen Sie ihn in die Variable "Daten" ein.
data = [[line[i] for i in range(len(line))] for line in tweet.split("\n") if len(line) > 0]
print(data)
[['Öffentlich', 'Kommunikation', 'ist', '', 'T', 'w', 'e', 'e', 't', '', 'ist', 'horizontal', 'Buch ',' Ki ',' Na ',' N ',' Da ',' Ke ',' Do ',' Sa ',', '], [' Ko ',' Re ',' to ',' Vertical ',' Kalligraphie ',' ki ',' ni ',' shi ',' ta ',' i ',' wa ',' ke ',' yo ','. '], [' Also ',' U ',' Su ',' Ru ',' und ',', ',' Inspektion ',' Suche ',' 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', '? ']]
Ich möchte numpy verwenden können, weil ich die Matrix transponieren möchte.
import numpy as np
np.array(data)
Array ([Liste (['Öffentlich', 'Kommunikation', 'ist', '', 'T', 'w', 'e', 'e', 't', '', 'ist', 'horizontal ',' Kalligraphie ',' Ki ',' Na ',' N ',' Da ',' Ke ',' Do ',' Sa ',', ']), Liste (['ko', 're', 'to', 'vertikal', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke' , 'Yo', '.']), Liste (['so', 'u', 'su', 'ru', 'und', ',', 'Inspektion', 'Suche', 'sa', 're', 'ni', 'ku' , 'Ku', 'na', 'ru', 'n', 'ji', 'ya', 'ne', '?']), Liste (['i', 'tsu', 'chi', 'yo', '', 'P', 'y', 't', 'h', 'o', 'n', 'in', 'Ya', 'tsu', 'te', 'mi', 'na', 'i', 'ka', '?'])], dtype=object)
Wie oben erwähnt, wird es zu einem Array von Listen und es funktioniert nicht.
Messen Sie daher die Anzahl der Zeilen und Spalten und bereiten Sie ein Array vor, das dieser Größe entspricht.
max_length = 0 #Zählen Sie die Anzahl der Zeichen im längsten Satz
for d in data:
if max_length < len(d):
max_length = len(d)
Aus dem Obigen können wir sehen, dass "Tweet" durch ein Array von "len (Daten)" Zeilen und "max_length" Spalten dargestellt werden kann. Bereiten wir also ein numpy Array derselben Größe vor. Füllen Sie es vorher mit leeren Zeichen.
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')
Kopieren Sie anschließend die Zeichen der Daten zeichenweise in das Numpy-Array.
Stellen Sie zu diesem Zeitpunkt jedoch sicher, dass die Reihenfolge der Anweisungen umgekehrt ist.
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', 'Ich', 'Ka', '? ',' \ u3000 '], ['Also', 'U', 'Su', 'Ru', 'und', ',', 'Inspektion', 'Suche', 'Sa', 'Re', 'bis', 'Ku', ' Ku ', 'Na', 'Ru', 'N', 'Ji', 'Ya', 'Ne', '? ',' \ u3000 '], ['Ko', 're', 'to', 'vertikal', 'book', 'ki', 'to', 'shi', 'ta', 'i', 'wa', 'ke', ' Yo ', '。', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000', '\u3000'], ['Öffentlich', 'Tsu', 'ist', '', 'T', 'w', 'e', 'e', 't', '', 'ist', 'horizontal', 'Buch , 'Ki', 'Na', 'N', 'Da', 'Ke', 'Do', 'Sa', ',']], dtype = '<U1')
Wenn Sie dies bisher tun können, können Sie mithilfe der Transposition der Matrix vertikal schreiben.
data2.T #Translokation der Matrix
Array ([['i', 'so', 'ko', 'normal'], ['T', 'U', 'Re', 'Tsu'], ['Chi', 'Su', 'O', 'ist'], ['Yo', 'Ru', 'Vertical', ''], ['', 'Und', 'Buch', 'T'], ['P', ',', 'ki', 'w'], ['y', 'inspektion', 'bis', 'e'], ['t', 'search', 'shi', 'e'], ['h', 'sa', 'ta', 't'], ['o', 're', 'i', ''], ['n', 'bis', 'wa', 'wa'], ['De', 'Ku', 'Ke', 'Horizontal'], ['Ya', 'Ku', 'Yo', 'Buch'], ['T', 'Na', '. ',' Ki '], ['Te', 'Ru', '\ u3000', 'Na'], ['Mi', 'N', '\ u3000', 'N'], ['Na', 'Ji', '\ u3000', 'Da'], ['I', 'ya', '\ u3000', 'ke'], ['Ka', 'Ne', '\ u3000', 'Do'], ['? ','? ',' \ u3000 ',' sa '], ['\u3000', '\u3000', '\u3000', '、']], dtype='<U1')
Geben Sie die transponierte Matrix als Zeichenfolge aus
delimiter = " "
for line in data2.T:
print(delimiter.join(line))
Isoko Fu Tsuretsu Chisu Vertikal Und Buch T. P, ki w y zu überprüfen e t Suche e h sata t o Rei n Neben dem großen Yakuyo Buch Was? Ki Teruna Minn Es ist das gleiche Yake Kane ?? ?? Sa 、
Dies kann mithilfe der Listeneinschlussnotation intelligent umgeschrieben werden.
delimiter = " "
print("\n".join([delimiter.join(line) for line in data2.T]))
Isoko Fu Tsuretsu Chisu Vertikal Und Buch T. P, ki w y zu überprüfen e t Suche e h sata t o Rei n Neben dem großen Yakuyo Buch Was? Ki Teruna Minn Es ist das gleiche Yake Kane ?? ?? Sa 、
Ich habe die obige Operation als Funktion namens "yoko2tate" ausprobiert.
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])
Das Anwendungsbeispiel sieht folgendermaßen aus.
tweet = '''\
Ah...Ahりのまま 今 起こったことを話すぜ!
"Als ich einen Tweet eingegeben habe, wurde er vertikal geschrieben."
Nana...何を言っているか分からねーと思うが、おれも何をされたのか分からNanaかった...
'''
print(yoko2tate(tweet))
"Ah" .Tsu. . ICH . .-. Was Zu Der Welt Leistung Teshima War Rura jetzt Oder Winziger vertikaler Anstieg Kalligraphie Raki Nita -Nako Toto Habe gedacht U "Geschichte Ist Ze Oh! Re Ebenfalls Was Zu Sa Re Ta von Oder Protokoll Oder Et al. Nana Oder Tsu Ta . . .
Recommended Posts