[PYTHON] 100 Sprachverarbeitungsklopfen ~ Kapitel 1

Ich möchte Python machen, bin mir aber nicht sicher, wo ich anfangen soll Wir werden mit [100 Sprachverarbeitung Klopfen 2015] fortfahren (http://www.cl.ecei.tohoku.ac.jp/nlp100/) Die Umgebung ist Windows 10, Python 3.6.0

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

00.py


string = "stressed"
print(string[::-1])
#In Scheiben implementiert
# string[Startposition:Endposition:Anzahl der Schritte]
#Start- und Endpositionen werden ab dem Ende durch Angabe einer negativen Zahl gezählt
#Sie können auch Folgendes tun
print(string[-1::-1])

Implementiert mit Slice

01. "Patatokukashi"

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

01.py


string = "Patatoku Kashii"
print(string[::2])
#Entspricht jeweils 00, 2 durch Angabe des Slice-Schritts

Mit Schritten wie 00

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

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

02.py


string1 = "Pat Auto"
string2 = "Taxi"
string3 = ""
i = 0
while i < len(string1):
    string3 += string1[i] + string2[i]
    i+=1
print(string3)

Ein wenig subtil ... Es kann nur die gleiche Zeichenlänge verbunden werden

03. Umfangsrate

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.

03.py


import re #Verwendung von regulären Ausdrücken
from collections import defaultdict #Zum Zählen von Zeichen

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

# ,Wann.Nach Wort nach dem Löschen auflisten
words_list = re.sub('[,.]','',string).split()

#Initialisierung des Zählers
counter = defaultdict(int)

#Zähle ab dem ersten Wort / Buchstaben
for word in words_list:
	for c in word:
		counter[c] += 1

#Weil es ein Wörterbuchtyp ist(Brief,Zählerstand)In Tupellistentyp konvertieren
count_list = dict(counter).items()

print(count_list)

Insgesamt gibt es zu viel Typkonvertierungsverarbeitung ... Ich möchte sie etwas weiter reduzieren.

04. Elementsymbol

Teilen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch die Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16, 19 auf Das erste Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen. Erstelle es.

04.py


import re #Verwendung von regulären Ausdrücken

elements = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
mono_words = [1, 5, 6, 7, 8, 9, 15, 16, 19]
shortened_elements = {}

# .Nach Wort nach dem Löschen auflisten
elements_list = elements.replace('.','').split()

#Während Sie die Elementwortliste einzeln erkunden
#Überprüfen Sie, ob es sich um einen definierten einstelligen Ausdruck handelt
#Geben Sie den abgekürzten Elementnamen und die Nummer von Anfang an in das Elementwörterbuch ein
#Sie können einen Iterator erhalten, indem Sie enumerate verwenden
for i,e in enumerate(elements_list):
    count = i + 1
    if(count in mono_words):
        shortened_elements[e[:1]] = count
    else:
        shortened_elements[e[:2]] = count

print(shortened_elements)
  1. n-gram Erstellen Sie eine Funktion, die aus einer bestimmten Sequenz (Zeichenfolge, Liste usw.) ein n-Gramm erstellt. Verwenden Sie diese Funktion, um das Wort Bi-Gramm und den Buchstaben Bi-Gramm aus dem Satz "Ich bin ein NLPer" zu erhalten.

Zeichen Bi-Gramm? Wort Bi-Gramm?

Das Wort Bi-Gramm von "Ich bin ein NLPer" {‘I am’,’am an’,’an NLPer’} Mit dem Charakter Bi-Gramm {‘I a’,’a m ‘,’m a’,’a n’,’n N’,’N L’,’L P’,’P e’,’e r’}

Sollte das Ergebnis sein

05.py


import re #Verwendung von regulären Ausdrücken

#Zeichenkette und Liste als Sequenz vorbereitet
sentence_string = "I am an NLPer"
sentence_list = sentence_string.split()

#N mit Nummer n und Sequenz als Argumente-Grammfunktion
def n_gram(n,sequence):

    #Liste für Rückgabewerte
    ngram = []

    #Gemeinsame Verarbeitung von Zeichenfolgen und Listen
    #Konvertiert in eine zeichenweise Liste, wenn eine Zeichenfolge als Argument angegeben wird
    # ,Wann.Wannスペースを削除
    if isinstance(sequence, str):
        sequence = list(re.sub('[,. ]','',sequence))

    # n-Gramm-Erstellungsprozess
    #Position von i in für Anweisung+Schneiden Sie das Argument n
    #Das Ende von for reicht von der Listenlänge minus n bis zu dem Punkt, an dem 1 hinzugefügt wird
    for i in range(len(sequence)-n+1):
        ngram.append(sequence[i:i+n])

    return ngram

#Wort bi-gram
print(n_gram(2,sentence_list))
#Zeichen bi-gram
print(n_gram(2,sentence_string))

06. Treffen

Suchen Sie den in "paraparaparadise" und "Absatz" enthaltenen Satz von Zeichen-Bi-Gramm als X bzw. Y und suchen Sie den Summensatz, den Produktsatz und den Differenzsatz von X bzw. Y. Finden Sie außerdem heraus, ob das Bi-Gramm in X und Y enthalten ist.

06.py


import re #Verwendung von regulären Ausdrücken

#Zeichenkette und Liste als Sequenz vorbereitet
X = "paraparaparadise"
Y = "paragraph"

# n-Wiederverwendung der Grammfunktion 05
def n_gram(n,sequence):

    ngram = []

    if isinstance(sequence, str):
        sequence = list(re.sub('[,. ]','',sequence))

    for i in range(len(sequence)-n+1):
        #Da das Teil auf 05 geändert wurde, konnte die Liste in der Liste nicht in den später beschriebenen Satztyp konvertiert werden
        #Die Konvertierungsverarbeitung wird in den Taple-Typ gestellt
        ngram.append(tuple(sequence[i:i+n]))

    return ngram

# X,Y bi-Gramerstellung
#Definiert als Set-Typ für die Set-Berechnung
X = set(n_gram(2,X))
Y = set(n_gram(2,Y))

#Summensatz
print(X | Y)
#Produktset
print(X & Y)
#Differenz gesetzt
print(X - Y)
print(Y - X)
# 'se'Überprüfen Sie, ob
if ('s','e') in X & Y:
    print("'se'Ist in X und Y enthalten")
else:
    print("'se'Ist nicht in X oder Y enthalten")

07. Anweisungsgenerierung nach Vorlage

Implementieren Sie eine Funktion, die die Argumente x, y, z verwendet und die Zeichenfolge "y bei x ist z" zurückgibt. Setzen Sie außerdem x = 12, y = "Temperatur", z = 22,4 und überprüfen Sie das Ausführungsergebnis.

07.py


def tostr(x,y,z):
    return ("%s Zeit%s ist%s" % (x,y,z))

print( tostr(12,"Temperatur",22.4))

08. Kryptographie

Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge gemäß den folgenden Spezifikationen konvertiert.

Durch Kleinbuchstaben ersetzen (219 - Zeichencode) Geben Sie andere Zeichen so aus, wie sie sind Verwenden Sie diese Funktion, um englische Nachrichten zu verschlüsseln / entschlüsseln.

08.py


import re #Verwendung von regulären Ausdrücken

def cipher(str):
    #Einmal auflisten und Zeichen für Zeichen verarbeiten
    str = list(str)
    re_str = []
    for s in str:
        if re.search('[a-z]',s):
            #Das Eiko-Zeichen enthält 97 Zeichen~122 Im folgenden Prozess wird a->z,b->y,c->x...z->Konvertiert wie ein
            re_str.append(chr(219-ord(s)))
        else:
            re_str.append(s)
    return "".join(re_str)

test_str = "I am a esaka!!"

print(cipher(test_str))
#Ergebnis:I zn z vhzpz!!
print(cipher(cipher(test_str)))
#Ergebnis:I am a esaka!!
  1. Typoglycemia Erstellen Sie ein Programm, das die Reihenfolge der anderen Zeichen zufällig neu anordnet, wobei das erste und das letzte Zeichen jedes Wortes für die Wortfolge durch Leerzeichen getrennt bleiben. Wörter mit einer Länge von 4 oder weniger werden jedoch nicht neu angeordnet. Geben Sie einen geeigneten englischen Satz ein (zum Beispiel: "Ich konnte nicht glauben, dass ich tatsächlich verstehen konnte, was ich las: die phänomenale Kraft des menschlichen Geistes.") Und überprüfen Sie das Ausführungsergebnis.

09.py


import random #Verwendung der Zufallszahlenverarbeitung

def rand_str(str):
    #Liste durch Leerzeichen getrennt
    str = str.split(' ')
    re_str = []
    for i,s in enumerate(str):
        if len(s) > 4 and i != 0 and i != len(str)-1:
            re_str.append("".join(random.sample(s,len(s))))
        else:
            re_str.append(s)
    #Der Rückgabewert soll das Wort durch ein Leerzeichen ersetzen
    return " ".join(re_str)

test_str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."

print(rand_str(test_str))
#Ergebnis: I tdcuon'l evibele that I ludoc ltyucala andnetrsdu what I was drienag : the lnpaeneohm erpow of the uahmn mind .

Korrektur

Ich habe falsch verstanden, dass ich nicht nur das erste und das letzte Wort einer bestimmten Zeichenfolge sortieren würde. Es ist der Anfang und das Ende von * jedem Wort *. Ist es dies, das vor einiger Zeit populär war?

Deshalb habe ich es unten behoben

09.py


import random #Verwendung der Zufallszahlenverarbeitung

def rand_str(str):
    #Liste durch Leerzeichen getrennt
    str = str.split(' ')
    re_str = []
    for i,s in enumerate(str):
        if len(s) > 4:
            re_str.append(s[0]+"".join(random.sample(s[1:-1],len(s)-2))+s[-1])
        else:
            re_str.append(s)
    #Der Rückgabewert soll das Wort durch ein Leerzeichen ersetzen
    return " ".join(re_str)

test_str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
test_str2 = "Solange Sie den Text von Saisho und Saigo haben, wird der Junban durcheinander sein, aber wie wäre es, wenn Sie den Junban des Textes absichtlich ersetzen, basierend auf der Idee, dass Sie ihn richtig lesen können? Du wirst es richtig lesen, oder?"

print(rand_str(test_str))
#Ergebnis: I cnlu'dot belevie that I colud allctauy udeatsnnrd what I was radineg : the pehnomanel pwoer of the huamn mind .
print(rand_str(test_str2))
#Ergebnis:Solange es ein Schwert und ein Schwert gibt, ist das Schwert durcheinander, aber es wird absichtlich lächerlich gemacht, basierend auf dem Lehrplan, den Sie richtig lesen können. Ist es nicht richtig?

Vorerst damit

Recommended Posts

100 Sprachverarbeitungsklopfen ~ Kapitel 1
100 Sprachverarbeitung klopft Kapitel 2 (10 ~ 19)
100 Sprachverarbeitungsklopfen 03 ~ 05
100 Sprachverarbeitungsklopfen (2020): 32
100 Sprachverarbeitungsklopfen (2020): 35
100 Sprachverarbeitungsklopfen (2020): 47
100 Sprachverarbeitungsklopfen (2020): 39
100 Sprachverarbeitungsklopfen (2020): 22
100 Sprachverarbeitungsklopfen (2020): 26
100 Sprachverarbeitungsklopfen (2020): 34
100 Sprachverarbeitungsklopfen (2020): 42
100 Sprachverarbeitungsklopfen (2020): 29
100 Sprachverarbeitungsklopfen (2020): 49
100 Sprachverarbeitungsklopfen 06 ~ 09
100 Sprachverarbeitungsklopfen (2020): 43
100 Sprachverarbeitungsklopfen (2020): 24
100 Sprachverarbeitungsklopfen (2020): 45
100 Sprachverarbeitungsklopfen (2020): 10-19
100 Sprachverarbeitungsklopfen (2020): 30
100 Sprachverarbeitungsklopfen (2020): 00-09
100 Sprachverarbeitungsklopfen (2020): 31
100 Sprachverarbeitungsklopfen (2020): 48
100 Sprachverarbeitungsklopfen (2020): 44
100 Sprachverarbeitungsklopfen (2020): 41
100 Sprachverarbeitungsklopfen (2020): 37
100 Sprachverarbeitungsklopfen (2020): 25
100 Sprachverarbeitungsklopfen (2020): 23
100 Sprachverarbeitungsklopfen (2020): 33
100 Sprachverarbeitungsklopfen (2020): 20
100 Sprachverarbeitungsklopfen (2020): 27
100 Sprachverarbeitungsklopfen (2020): 46
100 Sprachverarbeitungsklopfen (2020): 21
100 Sprachverarbeitungsklopfen (2020): 36
[Sprachverarbeitung 100 Schläge 2020] Kapitel 3: Reguläre Ausdrücke
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
[Sprachverarbeitung 100 Schläge 2020] Kapitel 6: Maschinelles Lernen
[Sprachverarbeitung 100 Schläge 2020] Kapitel 1: Vorbereitende Bewegung
[Sprachverarbeitung 100 Schläge 2020] Kapitel 7: Wortvektor
100 Sprachverarbeitung klopfen 2020: Kapitel 3 (regulärer Ausdruck)
[Sprachverarbeitung 100 Schläge 2020] Kapitel 8: Neuronales Netz
[Sprachverarbeitung 100 Schläge 2020] Kapitel 2: UNIX-Befehle
[Sprachverarbeitung 100 Schläge 2020] Kapitel 9: RNN, CNN
[Sprachverarbeitung 100 Schläge 2020] Kapitel 4: Morphologische Analyse
100 Amateur-Sprachverarbeitungsklopfen: 41
100 Amateur-Sprachverarbeitungsklopfen: 71
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 Amateur-Sprachverarbeitungsklopfen: 60
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 92
100 Amateur-Sprachverarbeitungsklopfen: 30
100 Amateur-Sprachverarbeitungsklopfen: 06
100 Amateur-Sprachverarbeitungsklopfen: 84
100 Amateur-Sprachverarbeitungsklopfen: 81
100 Amateur-Sprachverarbeitungsklopfen: 33
100 Amateur-Sprachverarbeitungsklopfen: 46
100 Amateur-Sprachverarbeitungsklopfen: 88