100 Sprachverarbeitungsklopfen mit Python 2015

Ich werde "100 Language Processing Knock 2015" machen, um Programme und Python zu studieren! http://www.cl.ecei.tohoku.ac.jp/nlp100/

Vorerst denke ich darüber nach, es einzeln zu aktualisieren. (Vielleicht wird es ziemlich langsam ...) Ich werde es einzeln auf GitHub aktualisieren.

Regel

Geben Sie zuerst den Code ein, den Sie selbst geschrieben haben. Danach werde ich nachschlagen und den Schreibstil veröffentlichen, den ich für besser hielt.

Kapitel 1: Vorbereitende Bewegung

00. Umgekehrte Reihenfolge der Zeichenfolgen

Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).

Mein Code

Ich denke, es gibt einen kurzen Weg, es zu schreiben, Ich konnte nicht daran denken, weil ich zu unerfahren war, also entschied ich mich für eine sehr schlammige Methode ...

knock000.py


s = "stressed"

def reverse(s: str) -> str:
	list = []

	for char in s:
		list.insert(0, char)

	return "".join(list)

print(reverse(s))

Den Code habe ich nachgeschlagen

python


s = "stressed"
print(s[::-1])

Es scheint, dass ich es so kurz schreiben kann. .. ..

Überprüfung der String-Slices

python


str = "I have a dream!"

#Grundstr[Der Erste:letzte]
str[0:6]
#=> 'I have'

#Die Spezifikation kann weggelassen werden (wenn weggelassen, alle oder bis zum Ende?)
str[:10]
#=> 'I have a d'

str[3:]
#=> 'ave a dream!'

#Sie können auch die Anzahl der Schritte str angeben[Der Erste:letzte:Anzahl der Schritte]
str[0:12:3]
#=> 'Ia d'

Damit

python


s[::-1]

Dies bedeutet "von Anfang bis Ende eins nach dem anderen" = umgekehrte Reihenfolge.

01. "Patatokukashi"

Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.

Mein Code

Obwohl der numerische Wert direkt angegeben wird

knock001.py


s = "Patatoku Kashii"
print(s[0] + s[2] + s[4] + s[6])

Alle sind gerade. Wenn Sie sie also in einer Schleife drehen und sie gerade sind, ist es richtig, auf ähnliche Weise zu schreiben? ??

Den Code habe ich nachgeschlagen

Diesmal keine

Nachtrag: Ich werde es hinzufügen, weil Sie im Kommentar darauf hingewiesen haben. Wie bei 00 können Sie die Anzahl der Schritte angeben und wie folgt in Slices schreiben.

python


s = "Patatoku Kashii"
print(s[::2])

02. "Patcar" + "Tax" = "Patatokukasie"

Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.

Mein Code

knock002.py


s1 = "Pat Auto"
s2 = "Taxi"
s3 = ""

for i in range(len(s1)):
    s3 = s3 + s1[i] + s2[i]

print(s3)

Ich finde, dass das Argument len (s1) von range nicht cool ist. Da die angegebene Zeichenfolge die gleiche Anzahl von Zeichen enthält, fühlt es sich in Ordnung an.

Den Code habe ich nachgeschlagen

Diesmal keine (Ich bin der Meinung, dass diese Methode nicht gut ist, daher werde ich diesen Punkt nur festlegen, wenn ich etwas überprüft habe.)

Nachtrag: Es scheint, dass Sie die Zip-Funktion bei len (s1) verwenden können.

python


for char1, char2 in zip(s1, s2):
    s3 = s3 + char1 + char2

Die Zip-Funktion verarbeitet mehrere Argumente gleichzeitig in einer Schleife.

Nachtrag Nachtrag: Sie haben in den Kommentaren darauf hingewiesen.

python


for char1, char2 in zip(s1, s2):
    s3 = s3 + char1 + char2

Wenn Sie die Zeichenketten wie oben beschrieben verbinden, ist dies langsam, da bei jedem Durchlaufen der Schleife neuer Speicher zugewiesen wird. Es scheint also besser, eine Liste mit Zeichenketten zu erstellen und diese am Ende mit join zu reiben.

Was du mir unten beigebracht hast

python


print(''.join([char1 + char2 for char1, char2 in zip(s1, s2)]))

03. Umfangsrate

Mein Code

Teilen Sie den Satz "Jetzt brauche ich nach den schweren Vorlesungen über Quantenmechanik einen Alkoholiker auf." In Wörter auf und erstellen Sie eine Liste mit der Anzahl der (alphabetischen) Zeichen in jedem Wort in der Reihenfolge ihres Auftretens.

python


s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."

words = s.split(" ")
char_count = []

for word in words:
    char_count.append(len(word))

print(char_count)

Nachtrag: Sie haben in den Kommentaren darauf hingewiesen. Es scheint, dass Sie präzise schreiben können, wenn Sie die Listeneinschlussnotation verwenden Und da die Standardeinstellung für die Aufteilungsfunktion leer ist, müssen Sie die Leerstelle anscheinend nicht einzeln angeben. Darüber hinaus scheint es, dass Sie entfernen müssen, und. .. ..

Ich werde auflisten, was Sie mir in den Kommentaren unten gesagt haben Es scheint jedoch, dass sich die Spezifikationen pro Übersetzung in Python3.4 geändert haben, daher habe ich sie wie folgt umgeschrieben

python


s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."

print([len(word.translate(word.maketrans({".":None,",":None}))) for word in s.split()])

Ich kann es nicht gut schreiben, daher besteht eine andere Methode darin, einen regulären Ausdruck anzugeben und ihn zu ersetzen (diesmal löschen).

python


import re

s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."

pat = re.compile('[.,]')
print([len(pat.sub('', word)) for word in s.split()])

04. Elementsymbol

Brechen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch eine Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16, Das 19. Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen und das assoziative Array (Wörterbuchtyp oder Kartentyp) von der extrahierten Zeichenfolge bis zur Position des Wortes (welche Anzahl von Wörtern von Anfang an) Erstellen.

Mein Code

python


s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."

s = s.replace(".", "")
words = s.split(" ")
words_index = {}

for i, word in enumerate(words):
    if i in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
        words_index[word[:1]] = i
    else:
        words_index[word[:2]] = i

print(words_index)

Nachtrag: Ich erhielt einen Kommentar, der darauf hinwies, dass es falsch war

Die folgende modifizierte Version

python


s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."

s = s.replace(".", "")
words = s.split(" ")
words_index = {}

for i, word in enumerate(words):
    n = i + 1
    if n in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
        words_index[word[:1]] = n
    else:
        words_index[word[:2]] = n

print(words_index)

Danach ist die Zuweisung in for redundant, sodass die folgende im Kommentar angegebene Schreibmethode einfacher ist

python


for i, word in enumerate(words):
    n = i + 1
    l = 1 if n in (1, 5, 6, 7, 8, 9, 15, 16, 19) else 2
    words_index[word[:l]] = n

Recommended Posts

100 Sprachverarbeitungsklopfen mit Python 2015
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 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock Kapitel 1 in Python
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 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
Python: Verarbeitung natürlicher Sprache
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitung Knock Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
3. Verarbeitung natürlicher Sprache durch Python 2-1. Netzwerk für das gleichzeitige Auftreten
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
3. Verarbeitung natürlicher Sprache durch Python 1-1. Word N-Gramm
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
Bildverarbeitung mit Python
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
Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
3. Verarbeitung natürlicher Sprache durch Python 2-2. Koexistenznetzwerk [mecab-ipadic-NEologd]
Python unerfahrene Person versucht, 100 Sprachverarbeitung 14-16 zu klopfen
[Python] Ich habe mit der Verarbeitung natürlicher Sprache ~ Transformatoren ~ gespielt
Python unerfahrene Person versucht, 100 Sprachverarbeitung 07-09 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 10 ~ 13 zu klopfen
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
Python unerfahrene Person versucht, 100 Sprachverarbeitung 05-06 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 00-04 zu klopfen
Bildverarbeitung mit Python (Teil 2)
100 Sprachverarbeitung Knock-51: Wortausschnitt
"Apple-Verarbeitung" mit OpenCV3 + Python3
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
Akustische Signalverarbeitung mit Python (2)
100 Sprachverarbeitung Knock-50: Satzumbruch
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit