[PYTHON] 100 natürliche Sprachverarbeitung klopft Kapitel 1 Vorbereitungsbewegung (zweite Hälfte)

Eine Aufzeichnung zur Lösung der Probleme in der zweiten Hälfte von Kapitel 1.

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

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

def ngram(data, n):
    res = []
    for i in xrange(len(data) - 1):
        res.append(data[i:i + n])
    return res

string = 'I am an NLPer'
print u'Zeichenliste bi-gram:'
print ngram(string.split(), 2)
print u'String bi-gram:'
print ngram(string, 2)
#=>Zeichenliste bi-gram:
#=> [['I', 'am'], ['am', 'an'], ['an', 'NLPer']]
#=>String bi-gram:
#=> ['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er']

Für das Bi-Gramm der Zeichenkette wird das Leerzeichen ebenfalls als ein Zeichen behandelt.

</ i> 06. Montage

Suchen Sie den in "paraparaparadise" und "Absatz" enthaltenen Satz von Zeichen-Bi-Gramm als X bzw. Y und suchen Sie die Summen-, Produkt- und Differenzsätze von X bzw. Y. Finden Sie außerdem heraus, ob das Bi-Gramm in X und Y enthalten ist.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

def ngram(data, n):
    res = []
    for i in xrange(len(data) - 1):
        res.append(data[i:i + n])
    return res

string1 = 'paraparaparadise'
string2 = 'paragraph'

X = ngram(string1, 2)
Y = ngram(string2, 2)

print u"Summensatz:"
print list(set(X).union(set(Y)))
print u"Produktset:"
print list(set(X).intersection(set(Y)))
print u"Differenz gesetzt:"
print list(set(X).difference(set(Y)))

print u'\'se\'Ist in X enthalten?'
print "se" in X
print u'\'se\'Ist in Y enthalten?'
print "se" in Y
#=>Summensatz:
#=> ['ad', 'ag', 'di', 'is', 'ap', 'pa', 'ra', 'ph', 'ar', 'se', 'gr']
#=>Produktset:
#=> ['ap', 'pa', 'ar', 'ra']
#=>Differenz gesetzt:
#=> ['is', 'ad', 'se', 'di']
#=> 'se'Ist in X enthalten?
#=> True
#=> 'se'Ist in Y enthalten?
#=> False

Der Summensatz, der Produktsatz und der Differenzsatz von Bi-Gramm werden unter Verwendung der Satzmethode erhalten.

</ i> 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.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

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

x = 12
y = u"Temperatur"
z = 22.4
print func(x, y, z)
#=>Die Temperatur um 12 Uhr ist 22.4

Verwenden Sie die Formatspezifikation der Druckanweisung für die Vorlage.

</ i> 08. Kryptographie

Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge mit 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.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

def cipher(data):
    res = ""
    for s in data:
        if s.islower():
            res += chr(219-ord(s))
        else:
            res += s
    return res

string = "re1"
print u'Verschlüsselung:'
print cipher(string)
print u'Entschlüsselung:'
print cipher(cipher(string))
#=>Verschlüsselung:
#=> iv1
#=>Entschlüsselung:
#=> re1

Ob es sich um Kleinbuchstaben handelt oder nicht, wird durch die islower-Methode bestimmt. Es ist nicht erforderlich, eine spezielle Verbindung zu implementieren, da diese die Eigenschaft hat, dass sie wiederhergestellt wird, wenn die verschlüsselte erneut konvertiert wird.

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

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

import random

def typoglycemia(data):
    res = []
    for d in data.split():
        if len(d) > 4:
            pre = d[0]
            suf = d[-1]
            word = list(d[1:-1])
            random.shuffle(word)
            res.append(pre + "".join(word) + suf)
        else:
            res.append(d)
    return " ".join(res)

sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print typoglycemia(sentence)
#=> I cuodn'lt beevile that I cuold alluacty usdtanrend what I was reidang : the pmeenhnaol peowr of the huamn mind .

Das Innere der Zeichenfolge wird mithilfe der Zufallsmischmethode gemischt. Natürlich ist die Sortierung zufällig, daher ist die Ausgabe jedes Mal anders.

Recommended Posts