Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 1)

http://www.cl.ecei.tohoku.ac.jp/nlp100/ Wurde erneuert und es scheint, dass die Version 2015 veröffentlicht wurde.

Ich habe versucht, meine Lieblingspython (2 Serien) zu verwenden. Ich weiß, dass es viele ähnliche Artikel gibt, aber (und ich sehe) http://qiita.com/tanaka0325/items/08831b96b684d7ecb2f7 Es ist auch für die Öffentlichkeit als Memo Ihres Fortschritts + Teilens zugänglich. Wenn Sie Vorschläge haben, danke.

Ich möchte nach Kapitel 2 fortfahren ... "Rehabilitation" ist nur dann sinnvoll, wenn es weitergeht!

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

Ehrlich


text = "stressed"
text_reverse = ""
n = len(text)
for i in xrange(n):
    text_reverse += text[n-i-1]
print text_reverse
#>>> desserts

Holen Sie sich vom Ende bis zum Anfang ehrlich mit Indizes. Es funktioniert auch, wenn text = "".

Verbesserte Version


text = "stressed"
n = len(text)
text_reverse_list = [text[n-i-1] for i in xrange(n)]
text_reverse = ''.join(text_reverse_list)

print text_reverse
#>>> desserts

Nachtrag: Es scheint, dass die Verbindung zu einer Zeichenkette mit einer for-Schleife in Bezug auf Ausführungsgeschwindigkeit und Speicher nicht gut ist. Also bezog ich mich auf die Methode "Erstellen einer Liste von Zeichenketten → Verbinden mit Join".

Scheibe


text = "stressed"
text_reverse = text[::-1]
print text_reverse
#>>> desserts

Einfach mit Scheiben. String-Objekt [Startindex: Endindex: Schritt]

01. "Patatokukashi"

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

python


text = u"Patatoku Kashii"
text_concat = text[0] + text[2] + text[4] + text[6]
print text_concat
#>>>Pat Auto

Ich habe die Zeichenkette als Unicode angegeben.

python


text = u"Patatoku Kashii"
text_concat = text[::2]
print text_concat
#>>>Pat Auto

Ich verstehe, können Sie das gleiche mit Scheiben tun?

02. "Pat car" + "Tax" = "Patatokukasie"

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

python


text1 = u"Pat Auto"
text2 = u"Taxi"
text_concat = ""
m = len(text1)
n = len(text2)
for i in xrange(m):
    if i<n:
        text_concat += text1[i] + text2[i]
        if i == m-1:
            text_concat += text2[i+1:]
    else:
        text_concat += text1[i:]
        break

print text_concat
#>>>Patatoku Kashii

Schauen wir uns die beiden Saiten von Anfang an an. Dieses Problem ist kein direktes Problem. Betrachten Sie den Fall, in dem text1 und text2 nicht gleich lang sind (m! = N). Zu diesem Zeitpunkt, wenn man fertig ist, Der andere beschloss, die nachfolgenden Zeichenfolgen zu verketten.

03. Umfangsrate

Brechen Sie den Satz auf "Jetzt brauche ich einen Drink, natürlich alkoholisch, nach den schweren Vorlesungen über Quantenmechanik."

python


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

word_length = [len(x.strip(',.')) for x in sentence.split()]
print word_length
#>>> [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]

--Liste Einschlussnotation

Ich mag Python, weil es so intelligent einzeilig sein kann.

04. Elementsymbol

Brechen 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 auf. 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.

python


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

word_list = [x.strip(',.') for x in sentence.split()]
word_dict = dict()
specified = [1, 5, 6, 7, 8, 9, 15, 16, 19]
for i, word in enumerate(word_list):
    if i in [x-1 for x in specified]:
        word_dict[word[:1]] = i+1
    else:
        word_dict[word[:2]] = i+1

print word_dict
#>>> {'Be': 4, 'C': 6, 'B': 5, 'Ca': 20, 'F': 9, 'S': 16, 'H': 1, 'K': 19, 'Al': 13, 'Mi': 12, 'Ne': 10, 'O': 8, 'Li': 3, 'P': 15, 'Si': 14, 'Ar': 18, 'Na': 11, 'N': 7, 'Cl': 17, 'He': 2}
print word_dict['Be']
#>>> 4

Ich habe i + 1 in word_dict eingefügt, um es mit dem im Problem angegebenen "th" in Einklang zu bringen. Nun, ich habe es nach dem Lösen bemerkt, aber habe ich die "Ordnungszahl, dh die Anzahl der Protonen" erhalten? Ich vermisse "Suihe, Ribe, mein Spaß".

Ich frage mich, ob Magnesium "Mg" ist.

python


'Mi': 12
  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.

python


def n_gram(sentence_str, n, type):
    result = set()
    if type == 'word':
        words = [x.strip(',.') for x in sentence_str.split()]
    elif type == 'letter':
        words = sentence_str
    m = len(words)
    for i in xrange(m-n+1):
        result.add(tuple(words[i:i+n]))
    return result

#Wenn Sie auch Frequenzinformationen wünschen
from collections import defaultdict
def n_gram_freq(sentence_str, n, type):
    result = defaultdict(int)
    if type == 'word':
        words = [x.strip(',.') for x in sentence_str.split()]
    elif type == 'letter':
        words = sentence_str
    m = len(words)
    for i in xrange(m-n+1):
        result[tuple(words[i:i+n])] += 1
    return result


sentence_str = "I am an NLPer"
#sentence_list = ['I', 'am', 'an', 'NLPer']

print n_gram(sentence_str, 2, 'word')
#>>> set([('am', 'an'), ('an', 'NLPer'), ('I', 'am')])
print n_gram(sentence_str, 2, 'letter')
#>>> set([('N', 'L'), ('m', ' '), ('e', 'r'), ('a', 'n'), ('I', ' '), ('n', ' '), ('L', 'P'), (' ', 'N'), (' ', 'a'), ('a', 'm'), ('P', 'e')])


print n_gram_freq(sentence_str, 2, 'word')
#>>> defaultdict(<type 'int'>, {('am', 'an'): 1, ('an', 'NLPer'): 1, ('I', 'am'): 1})
print n_gram_freq(sentence_str, 2, 'letter')
#>>>defaultdict(<type 'int'>, {('N', 'L'): 1, ('m', ' '): 1, ('e', 'r'): 1, ('a', 'n'): 1, ('I', ' '): 1, ('n', ' '): 1, ('L', 'P'): 1, (' ', 'N'): 1, (' ', 'a'): 2, ('a', 'm'): 1, ('P', 'e'): 1})

Nehmen Sie eine Zeichenfolge als Argument. Ermöglicht die Auswahl des Wortes n-Gramm und des Zeichens n-Gramm mit einem anderen Argumenttyp.

06. Treffen

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.

python


str_x = "paraparaparadise"
str_y = "paragraph"

X = n_gram(str_x, 2, 'letter')
Y = n_gram(str_y, 2, 'letter')

print X.union(Y) #Summensatz. X.|Synonym für Y.
#>>>set([('g', 'r'), ('p', 'h'), ('p', 'a'), ('s', 'e'), ('a', 'p'), ('a', 'g'), ('a', 'd'), ('i', 's'), ('r', 'a'), ('a', 'r'), ('d', 'i')])

print X.intersection(Y) #Produktset. X.&Synonym für Y.
#>>>set([('a', 'p'), ('r', 'a'), ('p', 'a'), ('a', 'r')])

print X.difference(Y) #Differenz gesetzt. X.-Synonym für Y.
#>>>set([('a', 'd'), ('s', 'e'), ('d', 'i'), ('i', 's')])

tuple('se') in X
#>>> True
tuple('se') in Y
#>>> False

Verwenden Sie die in der vorherigen Frage definierte Funktion. Bei der Definition der Funktion wird das gegebene "se" in ein Tupel umgewandelt und die Bedingung beurteilt.

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.

python


from string import Template

def generate_sentence(x,y,z):
    t = Template("${x_tmpl}von Zeit${y_tmpl}Ist${z_tmpl}")
    return t.safe_substitute(x_tmpl=x, y_tmpl=y, z_tmpl=z)

def generate_sentence_incomplete(x,y,z):
    t = Template("${x_tmpl}von Zeit${y_tmpl}Ist${z_tmpl}")
    return t.safe_substitute(x_tmpl=x, y_tmpl=y)

x, y, z =12, "Temperatur", 22.4
print generate_sentence(x,y,z)
#>>>Die Temperatur um 12 Uhr ist 22.4
print generate_sentence_incomplete(x,y,z)
#>>>Die Temperatur um 12 Uhr${z_tmpl}

Da ich Template.safe_substitute () verwendet habe http://docs.python.jp/2/library/string.html#string.Template.safe_substitute

Wie replace (), aber anstatt eine KeyError-Ausnahme auszulösen, wird der ursprüngliche Platzhalter so eingefügt, wie er ist, wenn das Mapping oder kws keinen entsprechenden Platzhalter finden können.

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.

python



def cipher(input_str):
    result = ""
    for letter in input_str:
        #Wenn es in Kleinbuchstaben ist
        if letter.isalpha() and letter.islower():
            result += chr(219-ord(letter))
        else:
            result += letter
    return result

english_message = "This is a pen."

#Verschlüsselung
print cipher(english_message)
#>>> Tsrh rh z kvm.

#Entschlüsselung
print cipher(cipher(english_message))
#>>> This is a pen.

Ich kannte dieses Thema nicht, aber es scheint Atbash-Code zu heißen. http://www.mitsubishielectric.co.jp/security/learn/info/misty/stage1.html

Code wurde auch im Alten Testament verwendet. Einer von ihnen ist der hebräische Transliterationscode Atbash. Dieser Code wird erstellt, indem die Zeichen nummeriert und die Reihenfolge von Anfang an und die Reihenfolge von Ende an vertauscht werden. Wenn Sie die 26 Buchstaben des Alphabets verschlüsseln möchten, ändern Sie die Reihenfolge von A nach Z, B nach Y usw.

Deshalb können Ver- und Entschlüsselung mit derselben Funktion erreicht werden. (Sie können die ursprüngliche Zeichenfolge erhalten, indem Sie dieselbe Funktion zweimal anwenden.)

Klicken Sie hier, um die verwendeten integrierten Funktionen anzuzeigen.

Eingebaute Funktionen


str.isalpha()
str.islower()
ord()
chr()
unichr()

# http://docs.python.jp/2.6/library/functions.html#ord
# http://docs.python.jp/2.6/library/functions.html#chr
# http://docs.python.jp/2.6/library/functions.html#unichr
  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.

python


import random

def random_shuffled_str(input_str):
    input_list = list(input_str)
    random.shuffle(input_list)
    result = ''.join(input_list)
    return result

def typoglycemia(sentence):
    str_list = sentence.split()
    result_list = [x[0]+ random_shuffled_str(x[1:-1]) +x[-1] if len(x) > 4 else x for x in str_list]
    return ' '.join(result_list)

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

print typoglycemia(message)
#>>> I cunl'dot beveile that I cloud aallucty unsrndtead what I was rdaineg : the phaenmneol pweor of the huamn mind .

print typoglycemia(message)
#>>> I cu'dolnt bivelee that I cloud aculltay udetnnasrd what I was ridneag : the pheonaenml peowr of the hamun mind .

Wenn Sie else in der Einschlussnotation der Liste verwenden möchten

python


if len(x) > 4 else x

Ich werde es in diese Position bringen ... Und random.shuffle.

http://docs.python.jp/2/library/random.html

random.shuffle(x[, random]) Sequenz x durch direkte Modifikation mischen. Das optionale Argument random ist eine Funktion ohne Argumente, die eine zufällige Gleitkommazahl mit einem Bereich von [0.0, 1.0) zurückgeben. Standardmäßig ist diese Funktion random ().

Beachten Sie, dass selbst mit einer relativ kleinen Länge (x) die Folge von x größer ist als die Periode der meisten Zufallsgeneratoren. Dies bedeutet, dass die meisten Folgen nicht für lange Folgen erzeugt werden. Meint

Recommended Posts

Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 1)
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)
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)
[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 von Python
Nachdem ich 2015 100 Sprachverarbeitungsklopfen gemacht hatte, bekam ich viele grundlegende Python-Fähigkeiten, Kapitel 1
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
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
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 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
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 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
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)
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
Grundlagen der binärisierten Bildverarbeitung durch Python
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
Antworten und Eindrücke von 100 Sprachverarbeitungsklopfen - Teil 1
Sprachverarbeitung 100 Knocks-44: Visualisierung abhängiger Bäume
Antworten und Eindrücke von 100 Sprachverarbeitungsklopfen - Teil 2
100 Sprachverarbeitung Knock-26: Entfernen von hervorgehobenem Markup
100 Sprachverarbeitung Knock-71 (mit Stanford NLP): Stoppwort
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
Zeichnen mit Matrix-Reinventor von Python Image Processing-
[Programmierer-Neuling "100 Sprachverarbeitung klopfen 2020"] Lösen Sie Kapitel 1
Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit
Ich habe 0 Jahre Programmiererfahrung und fordere die Datenverarbeitung mit Python heraus