[PYTHON] [Sprachverarbeitung 100 Schläge 2020] Kapitel 2: UNIX-Befehle

Einführung

Die Version 2020 von 100 Klopfen der Sprachverarbeitung, die als Sammlung von Problemen der Verarbeitung natürlicher Sprache bekannt ist, wurde veröffentlicht. Dieser Artikel fasst die Ergebnisse der Lösung von Kapitel 2: UNIX-Befehle aus den folgenden Kapiteln 1 bis 10 zusammen. ..

Vorbereitungen

Wir verwenden Google Colaboratory für Antworten. Ausführliche Informationen zum Einrichten und Verwenden von Google Colaboratory finden Sie in diesem Artikel. Das Notizbuch mit den Ausführungsergebnissen der folgenden Antworten ist unter [github] verfügbar (https://github.com/yamaru12345/nlp100/blob/master/chapter02.ipynb).

Kapitel 2: UNIX-Befehle

popular-names.txt ist eine Datei, in der "Name", "Geschlecht", "Anzahl der Personen" und "Jahr" eines in den USA geborenen Babys in einem durch Tabulatoren getrennten Format gespeichert werden. Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt, und führen Sie popular-names.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.

Laden Sie zunächst die angegebenen Daten herunter. Wenn Sie den folgenden Befehl in der Zelle von Google Colaboratory ausführen, wird die Zieltextdatei in das aktuelle Verzeichnis heruntergeladen.

!wget https://nlp100.github.io/data/popular-names.txt

[Wget] Befehl - Datei durch Angabe der URL herunterladen

10. Zählen der Anzahl der Zeilen

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

Dieses Mal werden wir jede Frage bearbeiten, nachdem wir sie als Pandas-Datenrahmen gelesen haben. Zusätzlich überprüfen wir die Ergebnisse mit Befehlen gemäß den Anweisungen in der Problemstellung.

import pandas as pd

df = pd.read_table('./popular-names.txt', header=None, sep='\t', names=['name', 'sex', 'number', 'year'])
print(len(df))

Ausgabe


2780
#Bestätigung
!wc -l ./popular-names.txt

Ausgabe


2780 ./popular-names.txt

CSV / TsV-Datei mit Pandas lesen Ermitteln Sie die Anzahl der Zeilen, Spalten und Gesamtelemente (Größe) mit Pandas Befehl [[Cat] - Überprüfen Sie einfach den Inhalt der Einstellungsdatei] (https://www.atmarkit.co.jp/ait/articles/1602/25/news034.html) [Wc] Befehlszählung der Anzahl der Zeichen und Zeilen in einer Textdatei

11. Ersetzen Sie die Registerkarten durch Leerzeichen

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

Da diese Frage das Ersetzen der Registerkarte voraussetzt, die das Trennzeichen der Originaldaten darstellt, wird sie nicht in dem bereits gelesenen Datenrahmen ausgeführt, sondern nur die Bestätigung durch den Befehl.

#Bestätigung
!sed -e 's/\t/ /g' ./popular-names.txt | head -n 5

Ausgabe


Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
Minnie F 1746 1880

Befehl [Sed](Basisteil 4) - ersetzt die Zeichenfolge / gibt die ersetzte Zeile aus

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

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

col1 = df['name']
col1.to_csv('./col1.txt', index=False)
print(col1.head())

Ausgabe


0         Mary
1         Anna
2         Emma
3    Elizabeth
4       Minnie
Name: name, dtype: object
#Bestätigung
!cut -f 1 ./popular-names.txt > ./col1_chk.txt
!cat ./col1_chk.txt | head -n 5

Ausgabe


Mary
Anna
Emma
Elizabeth
Minnie
col2 = df['sex']
col2.to_csv('./col2.txt', index=False)

Ausgabe


0    F
1    F
2    F
3    F
4    F
Name: sex, dtype: object
#Bestätigung
!cut -f 2 ./popular-names.txt > ./col2_chk.txt
!cat ./col2_chk.txt | head -n 5

Ausgabe


F
F
F
F
F

Auswählen und Abrufen von Zeilen / Spalten anhand der Pandas-Indexreferenz CSV-Datei mit Pandas exportieren [Ausschneiden] Befehlsausschnitt aus einer Linie in fester Länge oder Feldeinheiten Ergebnis der Befehlsausführung / Standardausgabe in Datei speichern

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

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

col1 = pd.read_table('./col1.txt')
col2 = pd.read_table('./col2.txt')
merged_1_2 = pd.concat([col1, col2], axis=1)
merged_1_2.to_csv('./merged_1_2.txt', sep='\t', index=False)
print(merged_1_2.head())

Ausgabe


        name sex
0       Mary   F
1       Anna   F
2       Emma   F
3  Elizabeth   F
4     Minnie   F
#Bestätigung
!paste ./col1_chk.txt ./col2_chk.txt | head -n 5

Ausgabe


Mary	F
Anna	F
Emma	F
Elizabeth	F
Minnie	F

Pandas.DataFrame, Serie verketten [Einfügen] Befehlsverkettung mehrerer Dateien Zeile für Zeile

14. Geben Sie N Zeilen von Anfang an aus

Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.

def output_head(N):
  print(df.head(N))

output_head(5)

Ausgabe


        name sex  number  year
0       Mary   F    7065  1880
1       Anna   F    2604  1880
2       Emma   F    2003  1880
3  Elizabeth   F    1939  1880
4     Minnie   F    1746  1880
#Bestätigung
!head -n 5 ./popular-names.txt

Ausgabe


Mary	F	7065	1880
Anna	F	2604	1880
Emma	F	2003	1880
Elizabeth	F	1939	1880
Minnie	F	1746	1880

Funktionen in Python definieren und aufrufen Gibt die erste und letzte Zeile von pandas.DataFrame, Series zurück Befehl [[Kopf] / Befehl [Ende] - Zeigt nur den Anfang / das Ende einer langen Nachricht oder Textdatei an](https://www.atmarkit.co.jp/ait/articles/1603/07/news023. html)

15. Geben Sie die letzten N Zeilen aus

Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.

def output_tail(N):
  print(df.tail(N))

output_tail(5)

Ausgabe


          name sex  number  year
2775  Benjamin   M   13381  2018
2776    Elijah   M   12886  2018
2777     Lucas   M   12585  2018
2778     Mason   M   12435  2018
2779     Logan   M   12352  2018
#Bestätigung
!tail -n 5 ./popular-names.txt

Ausgabe


Benjamin	M	13381	2018
Elijah	M	12886	2018
Lucas	M	12585	2018
Mason	M	12435	2018
Logan	M	12352	2018

16. Teilen Sie die Datei in N.

Empfangen Sie die natürliche Zahl N beispielsweise über Befehlszeilenargumente und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.

Ich denke, es gibt verschiedene Möglichkeiten, dies zu tun, aber hier fügen wir ein Flag hinzu, das die Datei in N unterteilt, indem qcut, das den N-Teilungspunkt berechnet, auf die Seriennummer des Datensatzes angewendet wird.

def split_file(N):
  tmp = df.reset_index(drop=False)
  df_cut = pd.qcut(tmp.index, N, labels=[i for i in range(N)])
  df_cut = pd.concat([df, pd.Series(df_cut, name='sp')], axis=1)

  return df_cut

df_cut = split_file(10)
print(df_cut['sp'].value_counts())

Ausgabe


9    278
8    278
7    278
6    278
5    278
4    278
3    278
2    278
1    278
0    278
Name: sp, dtype: int64
print(df_cut.head())

Ausgabe


        name sex  number  year sp
0       Mary   F    7065  1880  0
1       Anna   F    2604  1880  0
2       Emma   F    2003  1880  0
3  Elizabeth   F    1939  1880  0
4     Minnie   F    1746  1880  0
#Auf Befehl aufteilen
!split -l 200 -d ./popular-names.txt sp

Pandas.DataFrame, Serie neu indizieren Binning-Prozess mit Cut- und Qcut-Funktionen von Pandas (Binning) Zählen Sie die Anzahl und Häufigkeit (Anzahl der Vorkommen) eindeutiger Elemente in Pandas [Split] Befehlsaufteilungsdateien

17. Unterschied in der Zeichenfolge in der ersten Spalte

Suchen Sie den Typ der Zeichenfolge in der ersten Spalte (eine Reihe verschiedener Zeichenfolgen). Verwenden Sie zur Bestätigung die Befehle cut, sort und uniq.

print(len(df.drop_duplicates(subset='name')))

Ausgabe


136
#Bestätigung
!cut -f 1 ./popular-names.txt | sort | uniq | wc -l

Ausgabe


136

Doppelte Zeilen von pandas.DataFrame, Series extrahieren / löschen [Sortieren] Befehl sortiert Textdateien Zeile für Zeile [Uniq] doppelte Zeilen mit Befehl löschen

18. Sortieren Sie jede Zeile in absteigender Reihenfolge der Zahlen in der dritten Spalte

Ordnen Sie jede Zeile in umgekehrter Reihenfolge der Zahlen in der dritten Spalte an (Hinweis: Ordnen Sie den Inhalt jeder Zeile neu an, ohne ihn zu ändern). Verwenden Sie den Befehl sort zur Bestätigung (dieses Problem muss nicht mit dem Ergebnis der Ausführung des Befehls übereinstimmen).

df.sort_values(by='number', ascending=False, inplace=True)
print(df.head())

Ausgabe


         name sex  number  year
1340    Linda   F   99689  1947
1360    Linda   F   96211  1948
1350    James   M   94757  1947
1550  Michael   M   92704  1957
1351   Robert   M   91640  1947
#Bestätigung
!cat ./popular-names.txt | sort -rnk 3 | head -n 5

Ausgabe


Linda	F	99689	1947
Linda	F	96211	1948
James	M	94757	1947
Michael	M	92704	1957
Robert	M	91640	1947

Pandas.DataFrame, Serie sortieren

19. Ermitteln Sie die Häufigkeit des Auftretens der Zeichenfolge in der ersten Spalte jeder Zeile und ordnen Sie sie in absteigender Reihenfolge der Häufigkeit des Auftretens an.

Ermitteln Sie die Häufigkeit des Auftretens der ersten Spalte jeder Zeile und zeigen Sie sie in absteigender Reihenfolge an. Verwenden Sie zur Bestätigung die Befehle cut, uniq und sort.

print(df['name'].value_counts())

Ausgabe


James      118
William    111
Robert     108
John       108
Mary        92
          ... 
Crystal      1
Rachel       1
Scott        1
Lucas        1
Carolyn      1
Name: name, Length: 136, dtype: int64
#Bestätigung
!cut -f 1 ./popular-names.txt | sort | uniq -c | sort -rn

Ausgabe


    118 James
    111 William
    108 Robert
    108 John
     92 Mary

abschließend

Sprachverarbeitung 100 Klopfen sind so konzipiert, dass Sie nicht nur die Verarbeitung natürlicher Sprache selbst lernen können, sondern auch die grundlegende Datenverarbeitung und das allgemeine maschinelle Lernen. Sogar diejenigen, die maschinelles Lernen in Online-Kursen studieren, können sehr gute Ergebnisse erzielen. Probieren Sie es also bitte aus.

Recommended Posts

[Sprachverarbeitung 100 Schläge 2020] Kapitel 2: UNIX-Befehle
100 Sprachverarbeitungsklopfen ~ Kapitel 1
100 Sprachverarbeitung Knock UNIX-Befehle in Kapitel 2
100 Sprachverarbeitungsklopfen 03 ~ 05
100 Sprachverarbeitungsklopfen (2020): 40
100 Sprachverarbeitungsklopfen (2020): 32
100 Sprachverarbeitungsklopfen (2020): 47
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
[Sprachverarbeitung 100 Schläge 2020] Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitungsklopfen (2020): 22
100 Sprachverarbeitungsklopfen (2020): 26
100 Sprachverarbeitungsklopfen (2020): 34
100 Sprachverarbeitungsklopfen 2020: Kapitel 4 (morphologische Analyse)
[Sprachverarbeitung 100 Schläge 2020] Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitungsklopfen (2020): 42
100 Sprachverarbeitungsklopfen (2020): 29
100 Sprachverarbeitungsklopfen (2020): 49
100 Sprachverarbeitungsklopfen 06 ~ 09
100 Sprachverarbeitungsklopfen (2020): 43
100 Sprachverarbeitungsklopfen (2020): 24
[Sprachverarbeitung 100 Schläge 2020] Kapitel 1: Vorbereitende Bewegung
100 Sprachverarbeitungsklopfen (2020): 45
100 Sprachverarbeitungsklopfen (2020): 10-19
[Sprachverarbeitung 100 Schläge 2020] Kapitel 7: Wortvektor
100 Sprachverarbeitungsklopfen (2020): 30
100 Sprachverarbeitungsklopfen (2020): 00-09
100 Sprachverarbeitungsklopfen (2020): 31
[Sprachverarbeitung 100 Schläge 2020] Kapitel 8: Neuronales Netz
100 Sprachverarbeitungsklopfen (2020): 48
100 Sprachverarbeitungsklopfen (2020): 44
100 Sprachverarbeitungsklopfen (2020): 41
100 Sprachverarbeitungsklopfen (2020): 37
[Sprachverarbeitung 100 Schläge 2020] Kapitel 9: RNN, CNN
100 Sprachverarbeitungsklopfen (2020): 25
100 Sprachverarbeitungsklopfen (2020): 23
100 Sprachverarbeitungsklopfen (2020): 33
100 Sprachverarbeitungsklopfen (2020): 20
100 Sprachverarbeitungsklopfen (2020): 27
[Sprachverarbeitung 100 Schläge 2020] Kapitel 4: Morphologische Analyse
100 Sprachverarbeitungsklopfen (2020): 46
100 Sprachverarbeitungsklopfen (2020): 21
100 Sprachverarbeitungsklopfen (2020): 36
Sprachverarbeitung 100 Schläge Kapitel 4: Morphologische Analyse 31. Verben
100 Amateur-Sprachverarbeitungsklopfen: 41
100 Amateur-Sprachverarbeitungsklopfen: 56
100 Amateur-Sprachverarbeitungsklopfen: 24
100 Amateur-Sprachverarbeitungsklopfen: 50
100 Amateur-Sprachverarbeitungsklopfen: 59
100 Amateur-Sprachverarbeitungsklopfen: 70
100 Amateur-Sprachverarbeitungsklopfen: 62
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 92
100 Amateur-Sprachverarbeitungsklopfen: 06
100 Amateur-Sprachverarbeitungsklopfen: 81
100 Amateur-Sprachverarbeitungsklopfen: 46
100 Amateur-Sprachverarbeitungsklopfen: 88
100 Amateur-Sprachverarbeitungsklopfen: 89
100 Amateur-Sprachverarbeitungsklopfen: 43
100 Amateur-Sprachverarbeitungsklopfen: 55
100 Amateur-Sprachverarbeitungsklopfen: 94
100 Amateur-Sprachverarbeitungsklopfen: 54