Python unerfahrene Person versucht, 100 Sprachverarbeitung 10 ~ 13 zu klopfen

Kapitel 2 von heute. Dies ist eine Fortsetzung davon. Python unerfahrene Person versucht, 100 Sprachverarbeitung 07-09 zu klopfen https://qiita.com/earlgrey914/items/a7b6781037bc0844744b

Als ich in Kapitel 1 sagte "es hat 7 Stunden gedauert", wurde ich gefragt "Was ist dein Job?" Natürlich tue ich das.


Vorbereitung

hightemp.txt ist eine Datei, in der die Aufzeichnung der höchsten Temperatur in Japan im tabulatorgetrennten Format "Präfektur", "Punkt", "℃" und "Tag" gespeichert wird. Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt, und führen Sie hightemp.txt als Eingabedatei aus. Führen Sie außerdem denselben Prozess mit einem UNIX-Befehl aus und überprüfen Sie das Ausführungsergebnis des Programms.

Verwenden Sie diese Datei hightemp.txt als Eingabedatei

Der Inhalt von hightemp.txt sieht folgendermaßen aus. Tabulatorgetrennte 24-mal-4-Daten.

hightemp.txt


Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9	2007-08-16
40 Tajimi, Präfektur Gifu.9	2007-08-16
Yamagata 40 Yamagata.8	1933-07-25
Präfektur Yamanashi Kofu 40.7	2013-08-10
Präfektur Wakayama Katsuragi 40.6	1994-08-08
Präfektur Shizuoka Tenryu 40.6	1994-08-04
40 Katsunuma, Präfektur Yamanashi.5	2013-08-10
40 Koshiya, Präfektur Saitama.4	2007-08-16
Präfektur Gunma Tatebayashi 40.3	2007-08-16
Präfektur Gunma Kamisatomi 40.3	1998-07-04
Ainishi 40, Präfektur Aichi.3	1994-08-05
Präfektur Chiba Ushihisa 40.2	2004-07-20
Präfektur Shizuoka Sakuma 40.2	2001-07-24
40 Uwajima, Präfektur Ehime.2	1927-07-22
40 Sakata, Präfektur Yamagata.1	1978-08-03
Mino 40, Präfektur Gifu 2007-08-16
Präfektur Gunma Maebashi 40 2001-07-24
39 Shigehara, Chiba.9	2013-08-11
39 Hatoyama, Präfektur Saitama.9	1997-07-05
Toyonaka 39, Osaka.9	1994-08-08
Otsuki, Yamanashi 39.9	1990-07-19
39 Tsuruoka, Präfektur Yamagata.9	1978-08-03
Präfektur Aichi Nagoya 39.9	1942-08-02

Ich verwende also AWS Cloud9 als Python-Ausführungsumgebung Starten Sie nach dem Hochladen dieser txt-Datei dort.

Abgesehen davon ist Cloud 9 wirklich nützlich. Ich bin froh, native Cloud-Apps mit Cloud9 entwickeln zu können (ich sage etwas Seltsames)

10. Zählen der Anzahl der Zeilen

Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.

Gut. Zunächst, wie man eine txt-Datei mit Python liest. Ich weiß das. Ich habe .txt an der gleichen Stelle wie .py abgelegt, daher sollte dies in Ordnung sein.

yomikoku.py


with open('hightemp.txt') as f:
    s = f.read()
    print(s)
Traceback (most recent call last):
  File "/home/ec2-user/knock/02/enshu11.py", line 6, in <module>
    with open('hightemp.txt') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'hightemp.txt'

Oh. Es ist nicht gut.

~ 3 Minuten google ~


Referenz-URL
https://qiita.com/nagamee/items/b7d1b02074293fdfdfff

korede.py


import os.path

#Der Ursprung ist der Speicherort dieser py-Datei
os.chdir((os.path.dirname(os.path.abspath(__file__))))

with open('hightemp.txt') as f:
    s = f.read()
    print(s)
Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9    2007-08-16
:

Das ist in Ordnung. Ist das os.chdir ((os.path.dirname (os.path.abspath (__ file __)))) Magie? Ist es in Ordnung, in Zukunft zu schreiben? Abhängig von der Ausführungsumgebung kann es notwendig oder unnötig sein (oder nicht geschrieben) ...

Es scheint also mehrere Möglichkeiten zu geben, den Inhalt nach "open ()" der Datei zu lesen. In diesem Problem heißt es "Zähle die Anzahl der Zeilen", daher ist es besser, "readlines ()" zu verwenden, in dem jede Zeile aufgelistet ist.

enshu10.py


import os.path

#Der Ursprung ist der Speicherort dieser py-Datei
os.chdir((os.path.dirname(os.path.abspath(__file__))))

with open('hightemp.txt') as f:
    s = f.readlines()
    print(len(s))
24

Es ist einfach. Es wird gesagt, dass dasselbe mit UNIX-Befehlen gemacht werden sollte, also führen Sie es aus.

[ec2-user@ip-172-31-34-215 02]$ wc -l hightemp.txt 
24 hightemp.txt

Der Dateiname ist im Weg. Lass uns Katze beißen.

[ec2-user@ip-172-31-34-215 02]$ cat hightemp.txt | wc -l
24

11. Ersetzen Sie die Registerkarten durch Leerzeichen

Ersetzen Sie jede Registerkarte durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.

Ist es nicht einfacher als Kapitel 1?

eunshu11.py


import os.path

os.chdir((os.path.dirname(os.path.abspath(__file__))))

with open('hightemp.txt', mode="r") as f:
    s = f.read()
    tikango = s.replace("\t", " ") 
    
with open('hightemp.txt', mode="w") as f:
    f.write(tikango)

hightemp.txt


Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9 2007-08-16
40 Tajimi, Präfektur Gifu.9 2007-08-16
Yamagata 40 Yamagata.8 1933-07-25
Präfektur Yamanashi Kofu 40.7 2013-08-10
Präfektur Wakayama Katsuragi 40.6 1994-08-08
Präfektur Shizuoka Tenryu 40.6 1994-08-04
40 Katsunuma, Präfektur Yamanashi.5 2013-08-10
40 Koshiya, Präfektur Saitama.4 2007-08-16
Präfektur Gunma Tatebayashi 40.3 2007-08-16
Präfektur Gunma Kamisatomi 40.3 1998-07-04
Ainishi 40, Präfektur Aichi.3 1994-08-05
Präfektur Chiba Ushihisa 40.2 2004-07-20
Präfektur Shizuoka Sakuma 40.2 2001-07-24
40 Uwajima, Präfektur Ehime.2 1927-07-22
40 Sakata, Präfektur Yamagata.1 1978-08-03
Mino 40, Präfektur Gifu 2007-08-16
Präfektur Gunma Maebashi 40 2001-07-24
39 Shigehara, Chiba.9 2013-08-11
39 Hatoyama, Präfektur Saitama.9 1997-07-05
Toyonaka 39, Osaka.9 1994-08-08
Otsuki, Yamanashi 39.9 1990-07-19
39 Tsuruoka, Präfektur Yamagata.9 1978-08-03
Präfektur Aichi Nagoya 39.9 1942-08-02

Versuchen Sie, es auch im Terminal durch sed zu ersetzen.

[ec2-user@ip-172-31-34-215 02]$ sed -i -e "s/\t/ /g" hightemp.txt
[ec2-user@ip-172-31-34-215 02]$ cat hightemp.txt 
Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9 2007-08-16
40 Tajimi, Präfektur Gifu.9 2007-08-16
Yamagata 40 Yamagata.8 1933-07-25
Präfektur Yamanashi Kofu 40.7 2013-08-10
Präfektur Wakayama Katsuragi 40.6 1994-08-08
Präfektur Shizuoka Tenryu 40.6 1994-08-04
40 Katsunuma, Präfektur Yamanashi.5 2013-08-10
40 Koshiya, Präfektur Saitama.4 2007-08-16
Präfektur Gunma Tatebayashi 40.3 2007-08-16
Präfektur Gunma Kamisatomi 40.3 1998-07-04
Ainishi 40, Präfektur Aichi.3 1994-08-05
Präfektur Chiba Ushihisa 40.2 2004-07-20
Präfektur Shizuoka Sakuma 40.2 2001-07-24
40 Uwajima, Präfektur Ehime.2 1927-07-22
40 Sakata, Präfektur Yamagata.1 1978-08-03
Mino 40, Präfektur Gifu 2007-08-16
Präfektur Gunma Maebashi 40 2001-07-24
39 Shigehara, Chiba.9 2013-08-11
39 Hatoyama, Präfektur Saitama.9 1997-07-05
Toyonaka 39, Osaka.9 1994-08-08
Otsuki, Yamanashi 39.9 1990-07-19
39 Tsuruoka, Präfektur Yamagata.9 1978-08-03
Präfektur Aichi Nagoya 39.9 1942-08-0

12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt

Speichern Sie nur die erste Spalte jeder Zeile als col1.txt und die zweite Spalte als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.

Ich habe das Gefühl, dass es sofort einfacher wird.

enshu12.py


import os.path

os.chdir((os.path.dirname(os.path.abspath(__file__))))

with open('hightemp.txt', mode="r") as f:
    linedata = f.readlines()
    for l in linedata:
        with open('col1.txt', mode="a") as c1:
            c1.write(l.split(" ")[0] + "\r")
        with open('col2.txt', mode="a") as c2:
            c2.write(l.split(" ")[1] +"\r")

col1.txt


Präfektur Kochi
Saitama
Präfektur Gifu
Präfektur Yamagata
Präfektur Yamanashi
Präfektur Wakayama
Präfektur Shizuoka
Präfektur Yamanashi
Saitama
Präfektur Gunma
Präfektur Gunma
Präfektur Aichi
Präfektur Chiba
Präfektur Shizuoka
Präfektur Ehime
Präfektur Yamagata
Präfektur Gifu
Präfektur Gunma
Präfektur Chiba
Saitama
Präfektur Osaka
Präfektur Yamanashi
Präfektur Yamagata
Präfektur Aichi

col2.txt


Egawazaki
Kumagai
Tajimi
Yamagata
Kofu
Katsuragi
Tenryu
Katsunuma
Koshiya
Tatebayashi
Kamisatomi
Ainishi
Ushihisa
Sakuma
Uwajima
Sakata
Mino
Maebashi
Mobara
Hatoyama
Toyonaka
Otsuki
Tsuruoka
Nagoya

Der Befehl cut sieht folgendermaßen aus.

[ec2-user@ip-172-31-34-215 02]$ cut -f 1 -d " " hightemp.txt > col1_command.txt 
[ec2-user@ip-172-31-34-215 02]$ cut -f 2 -d " " hightemp.txt > col2_command.txt

Vergleichen Sie mit diff ...

[ec2-user@ip-172-31-34-215 02]$ diff col1.txt col1_command.txt 
1c1,24
Präfektur Aichi
\ No newline at end of file
---
>Präfektur Kochi
>Saitama
>Präfektur Gifu
>Präfektur Yamagata
>Präfektur Yamanashi
>Präfektur Wakayama
>Präfektur Shizuoka
>Präfektur Yamanashi
>Saitama
>Präfektur Gunma
>Präfektur Gunma
>Präfektur Aichi
>Präfektur Chiba
>Präfektur Shizuoka
>Präfektur Ehime
>Präfektur Yamagata
>Präfektur Gifu
>Präfektur Gunma
>Präfektur Chiba
>Saitama
>Präfektur Osaka
>Präfektur Yamanashi
>Präfektur Yamagata
>Präfektur Aichi

Sind! ?? Dies liegt daran, dass es auch mit cat col1.txt nicht angezeigt wird ... ** Wegen des Zeilenvorschubcodes! ** ** ** Also habe ich den Zeilenvorschubcode von "\ r" in "\ n" geändert und beim Schreiben der Datei "UTF-8" als Codierung angegeben.

enshu13.py


import os.path

os.chdir((os.path.dirname(os.path.abspath(__file__))))

with open('hightemp.txt', mode="r") as f:
    linedata = f.readlines()
    for l in linedata:
        with open('col1.txt', mode="a", encoding="utf-8") as c1:
            c1.write(l.split(" ")[0] + "\n")
        with open('col2.txt', mode="a", encoding="utf-8") as c2:
            c2.write(l.split(" ")[1] +"\n")

Ausführungsbestätigung

[ec2-user@ip-172-31-34-215 02]$ python3 enshu12.py
[ec2-user@ip-172-31-34-215 02]$ 
[ec2-user@ip-172-31-34-215 02]$ cut -f 1 -d " " hightemp.txt > col1_command.txt
[ec2-user@ip-172-31-34-215 02]$ cut -f 2 -d " " hightemp.txt > col2_command.txt
[ec2-user@ip-172-31-34-215 02]$ diff col1.txt col1_command.txt
[ec2-user@ip-172-31-34-215 02]$ diff col2.txt col2_command.txt
[ec2-user@ip-172-31-34-215 02]$ 

Es ist in Ordnung.

13. Führen Sie col1.txt und col2.txt zusammen

Kombinieren Sie die in 12 erstellten Spalten col1.txt und col2.txt und erstellen Sie eine Textdatei, in der die erste und die zweite Spalte der Originaldatei tabulatorgetrennt angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.

Vielleicht ist es so, aber gibt es einen besseren Weg?

tabun.py



with open col1.txt
Fügen Sie alle Zeilen in Array 1 ein

with open col2.txt
Fügen Sie alle Zeilen in Array 2 ein

for[i]
Ausgabedatei= write(Array 1[i] + "\t" +Sequenz 2[i])

~ 20 Minuten später ~

enshu13.py


import os.path

os.chdir((os.path.dirname(os.path.abspath(__file__))))

linedata_col1 = []
linedata_col2 = []

with open('col1.txt', mode="r") as f:
    linedata_col1 = f.read().splitlines()


with open('col2.txt', mode="r") as f:
    linedata_col2 = f.read().splitlines()

with open('merge.txt', mode="a", encoding="utf-8") as f:
    for c1, c2 in zip(linedata_col1, linedata_col2):
        f.write(c1 + "\t" + c2 + "\n")

merge.txt


Präfektur Kochi Egawazaki
Kumagai, Präfektur Saitama
Tajimi, Präfektur Gifu
Präfektur Yamagata Yamagata
Präfektur Yamanashi Kofu
Präfektur Wakayama Katsuragi
Präfektur Shizuoka Tenryu
Katsunuma, Präfektur Yamanashi
Koshiya, Präfektur Saitama
Präfektur Gunma Tatebayashi
Präfektur Gunma Kamisatomi
Präfektur Aichi Ainishi
Ushihisa, Chiba
Sakuma, Präfektur Shizuoka
Uwajima, Präfektur Ehime
Sakata, Präfektur Yamagata
Mino, Präfektur Gifu
Präfektur Gunma Maebashi
Shigehara, Chiba
Hatoyama, Präfektur Saitama
Toyonaka, Osaka
Präfektur Yamanashi Otsuki
Tsuruoka, Präfektur Yamagata
Präfektur Aichi Nagoya

Der Punkt des Einfallsreichtums ist linien_col1 = f.read (). Splitlines (). ** Es ist eine Ameise, Zeile für Zeile mit f.readlines () zu lesen, aber dann wird es eine Liste mit Zeilenvorschubcode wie ↓ sein. ** **.

readlinesdato.py


with open('col1.txt', mode="r") as f:
    linedata_col1 = f.readlines()
    print(linedata_col1)
['Präfektur Kochi\n', 'Saitama\n', 'Präfektur Gifu\n', 'Präfektur Yamagata\n', 'Präfektur Yamanashi\n', 'Präfektur Wakayama\n', 'Präfektur Shizuoka\n', 'Präfektur Yamanashi\n', 'Saitama\n', 'Präfektur Gunma\n', 'Präfektur Gunma\n', 'Präfektur Aichi\n', 'Präfektur Chiba\n', 'Präfektur Shizuoka\n', 'Präfektur Ehime\n', 'Präfektur Yamagata\n', 'Präfektur Gifu\n', 'Präfektur Gunma\n', 'Präfektur Chiba\n', 'Saitama\n', 'Präfektur Osaka\n', 'Präfektur Yamanashi\n', 'Präfektur Yamagata\n', 'Präfektur Aichi\n']

Ich dachte, es wäre am besten, ** read () zu verwenden, um es als Blockobjekt einschließlich des Zeilenvorschubcodes zu lesen und es mit dem Zeilenvorschubcode split () aufzulisten, anstatt sich die Mühe zu machen, diesen Zeilenvorschubcode zu löschen.

Dann mit Paste vergleichen.

[ec2-user@ip-172-31-34-215 02]$ python3 enshu13.py
[ec2-user@ip-172-31-34-215 02]$ paste col1.txt col2.txt > merge_command.txt
[ec2-user@ip-172-31-34-215 02]$ diff merge.txt merge_command.txt 
[ec2-user@ip-172-31-34-215 02]$ 

Es ist ziemlich einfach und die Ergebnisüberprüfung ist problematisch geworden, weil die Dateien eingeklemmt sind. Lass uns morgen weitermachen ~ ** Bisher hat es 2 Stunden gedauert! !! ** Ich mache es faul, also dachte ich, es wäre diesmal sehr hilfreich.

Recommended Posts

Python unerfahrene Person versucht, 100 Sprachverarbeitung 14-16 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 07-09 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 10 ~ 13 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 05-06 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 00-04 zu klopfen
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
100 Sprachverarbeitung Knock Kapitel 1 von Python
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
Python: Verarbeitung natürlicher Sprache
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitung Knock Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
Sprachverarbeitung 100 Knocks-43: Extrahieren Sie Klauseln mit Nomenklatur in Bezug auf Klauseln mit Verben
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
100 Sprachverarbeitung Knock-42: Anzeige der Phrase der betroffenen Person und der betroffenen Person
Überlassen Sie die mühsame Verarbeitung Python
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
Einführung in Protobuf-c (C-Sprache ⇔ Python)
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)