Rehabilitation von Python- und NLP-Kenntnissen ab "Knock 100 Language Processing 2015" (Kapitel 2, zweite Hälfte)

16. Teilen Sie die Datei in N.

Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.

Import- und Argparse-Einstellungen weglassen. Wenn die Anzahl der Zeilen M in der Datei nicht genau durch die gegebene natürliche Zahl N teilbar ist Es ist eine Spezifikation, die eine weitere Zeile in der Reihenfolge vom ersten geteilten Teil gibt.

knock016.py


args = parser.parse_args()
N = args.line
filename = args.filename

#Letzte N Zeilen anzeigen
f = open(filename)
lines = f.readlines()
M = len(lines)

#Waren und Rest
quotient = M/N
remainder = M - quotient*N

#Suchen Sie die Zeile, die die Datei teilt
num_of_lines = [quotient+1 if i < remainder else quotient for i in xrange(N)]
num_of_lines_cumulative = [sum(num_of_lines[:i+1]) for i in xrange(N)]

for i, line in enumerate(lines):
	if i in num_of_lines_cumulative:
		print
		print line.strip()
	else:
		print line.strip()

f.close()

UNIX-Befehl ... Der Code wurde mit optionaler Validierung länger (obwohl nicht genug).

knock016.sh


#!/bin/sh

#Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N.
#Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.
# ex.
# sh knock016.sh -f hightemp.txt -n 7

while getopts f:n: OPT
do
  case $OPT in
    "f" ) FLG_F="TRUE" ; INPUT_FILE=$OPTARG ;;
    "n" ) FLG_N="TRUE" ; N=$OPTARG ;;
      * ) echo "Usage: $CMDNAME [-f file name] [-n split number]" 1>&2
          exit 1 ;;
  esac
done

if [ ! "$FLG_F" = "TRUE" ]; then
  echo 'file name is not set.'
  exit 1
fi
if [ ! "$FLG_N" = "TRUE" ]; then
  echo 'split number is not set.'
  exit 1
fi

#INPUT_FILE="hightemp.txt"
TMP_HEAD="split/tmphead.$INPUT_FILE"
TMP_TAIL="split/tmptail.$INPUT_FILE"
SPLITHEAD_PREFIX="split/splithead."
SPLITTAIL_PREFIX="split/splittail."

M=$( wc -l < $INPUT_FILE )
#N=9
quotient=`expr \( $M / $N \)`
remainder=`expr \( $M - $quotient \* $N \)`

if [ $quotient -eq 0 ]; then
  echo "cannot divide: N is larger than the lines of the input file."
  exit 0
fi

if [ $remainder -eq 0 ]; then
  #Wenn der Rest 0 ist, befindet er sich in einer Datei$Aufteilen, um Quotientenlinien einzuschließen
  split -l $quotient $INPUT_FILE SPLITHEAD_PREFIX
else
  #Wenn der Rest nicht 0 ist
  # (a)Von Anfang an(($quotient + 1) * $remainder)Linie und(b)Teilen Sie es danach in 2 Dateien auf
  split_head=`expr \( \( $quotient + 1 \) \* $remainder \)`
  split_tail=`expr \( $M - $split_head \)`
  head -n $split_head $INPUT_FILE > $TMP_HEAD
  tail -n $split_tail $INPUT_FILE > $TMP_TAIL

  # (a)In einer Datei($quotient+1)Linie,(b)In einer Datei$quotientLinie,含まれるように分割する
  split -l `expr \( $quotient + 1 \)` $TMP_HEAD $SPLITHEAD_PREFIX
  split -l $quotient $TMP_TAIL $SPLITTAIL_PREFIX

  rm -iv split/tmp*

fi

Da split ein Befehl ist, der durch Angabe der Anzahl der in einer Datei enthaltenen Zeilen verwendet wird, Eindruck, dass ein wenig Einfallsreichtum nötig war.

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 sort und uniq.

python


if __name__ == '__main__':

	f = open(filename)
	lines = f.readlines()

	# unlike problem 12., "+ '\n'" is not necessary
	content_col1 = [line.split()[0] for line in lines]
	content_col1_set = set(content_col1)
	print len(content_col1_set)

	for x in content_col1_set:
		print x

	f.close()

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

UNIX-Befehl. Muss ich die gleiche Bestellung machen ...?

python


awk -F'\t' '{print $1;}' hightemp.txt | sort | uniq
#>>>
#Präfektur Chiba
#Präfektur Wakayama
#Saitama
#Präfektur Osaka
#Präfektur Yamagata
#Präfektur Yamanashi
#Präfektur Gifu
#Präfektur Ehime
#Präfektur Aichi
#Präfektur Gunma
#Präfektur Shizuoka
#Präfektur Kochi

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).

python


if __name__ == '__main__':

	f = open(filename)
	lines = f.readlines()
	# reverse=True allows us to perform descending sort
	sorted_lines = sorted(lines, key=lambda line: float(line.split()[2]), reverse=True)

	for sorted_line in sorted_lines:
		print sorted_line,

	f.close()

#>>>
#Präfektur Kochi Egawasaki 41 2013-08-12
#40 Kumagai, Präfektur Saitama.9	2007-08-16
#Präfektur Gifu Tajimi 40.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

UNIX-Befehl.

python


sort -k3r hightemp.txt

Geben Sie eine Spalte mit der Option k an. Fügen Sie r hinzu und kehren Sie die Reihenfolge um.

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.

python


from collections import defaultdict
from collections import Counter

...

if __name__ == '__main__':

	f = open(filename)
	lines = f.readlines()

	# extract 1st column
	content_col1 = [line.split()[0] for line in lines]
	
	# (1) defaultdict
	# http://docs.python.jp/2/library/collections.html#collections.defaultdict
	d = defaultdict(int)
	for col1 in content_col1:
		d[col1] += 1
	for word, cnt in sorted(d.items(), key=lambda x: x[1], reverse=True):
		print word, cnt

	print

	# (2) Counter
	# http://docs.python.jp/2/library/collections.html#collections.Counter
	counter = Counter(content_col1)
	for word, cnt in counter.most_common():
		print word, cnt

	f.close()

#>>>
#Präfektur Yamagata 3
#Präfektur Saitama 3
#Präfektur Gunma 3
#Präfektur Yamanashi 3
#Präfektur Aichi 2
#Präfektur Gifu 2
#Präfektur Chiba 2
#Präfektur Shizuoka 2
#Präfektur Kochi 1
#Präfektur Wakayama 1
#Präfektur Ehime 1
#Präfektur Osaka 1

#Präfektur Yamagata 3
#Präfektur Saitama 3
#Präfektur Gunma 3
#Präfektur Yamanashi 3
#Präfektur Aichi 2
#Präfektur Gifu 2
#Präfektur Chiba 2
#Präfektur Shizuoka 2
#Präfektur Kochi 1
#Präfektur Wakayama 1
#Präfektur Ehime 1
#Präfektur Osaka 1

Gibt an, ob mit dem Standarddiktortyp wie in (1) gezählt werden soll. Verwenden Sie wie in (2) den Zähler selbst? Es gibt eine most_common () -Methode ...

Dann UNIX-Befehl.

python


cut -f 1 hightemp.txt | sort | uniq -c | sort -nr
#>>>
#3 Präfektur Gunma
#3 Präfektur Yamanashi
#3 Präfektur Yamagata
#3 Präfektur Saitama
#2 Präfektur Shizuoka
#2 Präfektur Aichi
#2 Präfektur Gifu
#2 Chiba
#1 Präfektur Kochi
#1 Präfektur Ehime
#1 Präfektur Osaka
#1 Präfektur Wakayama

Es ist ein idiomartiger Befehl, den ich oft benutze, deshalb möchte ich mich gut daran erinnern. Sortieren Sie nach Sortierung, und wenn in der nebenstehenden Zeile mit uniq dasselbe steht, setzen Sie es zusammen. Verwenden Sie die Option -c, um solche doppelten Zeilen zu zählen Sortieren Sie die Zeilen als Zahlen (in absteigender Reihenfolge) mit "sort -nr".

Recommended Posts

Rehabilitation von Python- und NLP-Kenntnissen ab "Knock 100 Language Processing 2015" (Kapitel 2, zweite Hälfte)
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 2, erste Hälfte)
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
[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 Kapitel 1 in Python
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (zweite Hälfte)
Nachdem ich 2015 100 Sprachverarbeitungsklopfen gemacht hatte, bekam ich viele grundlegende Python-Fähigkeiten, Kapitel 1
100 Sprachverarbeitung Knock Kapitel 1 von Python
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Sprachverarbeitung Knock Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 natürliche Sprachverarbeitung klopft Kapitel 1 Vorbereitungsbewegung (zweite Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 4 Morphologische Analyse (zweite Hälfte)
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
100 natürliche Sprachverarbeitung klopft Kapitel 3 Reguläre Ausdrücke (zweite Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 6 Englische Textverarbeitung (zweite Hälfte)
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
100 natürliche Sprachverarbeitung klopft Kapitel 5 Abhängigkeitsanalyse (zweite Hälfte)
[Programmierer-Neuling "100 Sprachverarbeitung klopft 2020"] Löse Kapitel 2 [Erste Hälfte: 10 ~ 15]
100 Sprachverarbeitung Knock-42: Anzeige der Phrase der betroffenen Person und der betroffenen Person
Knock-70 mit 100 Sprachverarbeitung (unter Verwendung von Stanford NLP): Abrufen und Formatieren von Daten
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (erste Hälfte)
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitung Knock Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
10 Funktionen von "Sprache mit Batterie" Python
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
100 Sprachverarbeitung Knock 2020 Kapitel 8: Neuronales Netz
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 1: Vorbereitende Bewegung
Koexistenz von Python2 und 3 mit CircleCI (1.0)
100 Sprachverarbeitung Knock 2020 Kapitel 3: Reguläre Ausdrücke
100 Language Processing Knock 2015 Kapitel 4 Morphologische Analyse (30-39)
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 4
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
Ich habe 0 Jahre Programmiererfahrung und fordere die Datenverarbeitung mit Python heraus
Grundlagen der binärisierten Bildverarbeitung durch Python