http://www.cl.ecei.tohoku.ac.jp/nlp100/
Anfänger werden mit Python (3.x) ihr Bestes geben. Ich denke, es gibt viele ähnliche Artikel, aber als persönliches Memorandum. Wenn Sie Ratschläge oder Vorschläge haben, hinterlassen Sie bitte einen Kommentar!
Der Quellcode wird auch auf github veröffentlicht. https://github.com/hbkr/nlp100
Chapter1
000.py
s = "stressed"
print(s[::-1])
desserts
s [i: j: k]
bedeutet mit Schritt k eine Scheibe von s von i nach j, also geht s [:: -1]
vom Ende bis zum Anfang auf -1 zurück.
001.py
s = "Patatoku Kashii"
print(s[::2])
Pat Auto
Wie oben erläutert, können Sie s [:: 2]
verwenden, um eine Zeichenfolge zu extrahieren, indem Sie ein Zeichen vom Anfang bis zum Ende überspringen.
002.py
s = "".join(i+j for i, j in zip("Pat Auto", "Taxi"))
print(s)
Patatoku Kashii
Sie können mit zip
mehrere Sequenzobjekte gleichzeitig schleifen. sep.join (seq)
verkettet seq
mit sep
als Trennzeichen, um eine Zeichenfolge zu erstellen. Die Listeneinschlussnotation lautet "Join" mit leeren Zeichen.
003.py
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
count = [len(i.strip(",.")) for i in s.split()]
print(count)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
Verwenden Sie "str.split (sep)", um die Zeichenfolge in eine Liste mit "sep" als Trennzeichen aufzuteilen. Wenn kein Trennzeichen angegeben ist, wird es durch Leerzeichen, Tabulatoren, Zeilenvorschubzeichenfolgen usw. getrennt. Die Anzahl der Zeichen wird nach dem Löschen des vorhergehenden und des folgenden mit "len ()" gezählt. Mit "str.strip (",. ")".
004.py
s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
dic = {word[:2-(i in (1,5,6,7,8,9,15,16,19))]:i for i, word in enumerate(s.replace(".", "").split(), 1)}
print(dic)
{'He': 2, 'K': 19, 'S': 16, 'Ar': 18, 'Si': 14, 'O': 8, 'F': 9, 'P': 15, 'Na': 11, 'Cl': 17, 'B': 5, 'Ca': 20, 'Ne': 10, 'Be': 4, 'N': 7, 'C': 6, 'Mi': 12, 'Li': 3, 'H': 1, 'Al': 13}
Sie können sowohl den Elementindex als auch das Element mit enumerate (seq [, start = 0])
abrufen. Der Index wird wie er ist an den Operator "in" übergeben, um die Anzahl der zu erfassenden Zeichen anzupassen.
005.py
def n_gram(s, n): return {tuple(s[i:i+n]) for i in range(len(s)-n+1)}
s = "I am an NLPer"
print(n_gram(s, 2))
print(n_gram([t.strip(".,") for t in s.split()], 2))
{('m', ' '), ('n', ' '), ('e', 'r'), ('N', 'L'), (' ', 'N'), ('a', 'm'), ('a', 'n'), ('L', 'P'), ('I', ' '), (' ', 'a'), ('P', 'e')}
{('an', 'NLPer'), ('I', 'am'), ('am', 'an')}
Die N-Gramm-Methode ist eine Methode zum Indizieren von Sätzen mit N Zeichen als Stichwörter in der Reihenfolge der Zeichenfolgen. Die Funktion n_gram (s, n)
schneidet das übergebene Sequenzobjekt s
Element durch n
aus und gibt es als Set-Typ zurück. Bei der Rückgabe als Set-Typ werden die Elemente nicht dupliziert.
006.py
n_gram = lambda s, n: {tuple(s[i:i+n]) for i in range(len(s)-n+1)}
X = n_gram("paraparaparadise", 2)
Y = n_gram("paragraph", 2)
print("X: %s" % X)
print("Y: %s" % Y)
print("union: %s" % str(X|Y))
print("difference: %s" % str(X-Y))
print("intersection: %s" % str(X&Y))
if n_gram("se", 2) <= X: print("'se' is included in X.")
if n_gram("se", 2) <= Y: print("'se' is included in Y.")
X: {('a', 'd'), ('a', 'p'), ('i', 's'), ('s', 'e'), ('a', 'r'), ('p', 'a'), ('d', 'i'), ('r', 'a')}
Y: {('g', 'r'), ('p', 'h'), ('a', 'p'), ('a', 'r'), ('p', 'a'), ('r', 'a'), ('a', 'g')}
union: {('a', 'd'), ('g', 'r'), ('p', 'h'), ('a', 'p'), ('i', 's'), ('s', 'e'), ('a', 'r'), ('p', 'a'), ('d', 'i'), ('r', 'a'), ('a', 'g')}
difference: {('i', 's'), ('d', 'i'), ('a', 'd'), ('s', 'e')}
intersection: {('a', 'r'), ('p', 'a'), ('a', 'p'), ('r', 'a')}
'se' is included in X.
Ich werde das in 005.py erstellte n_gram
verwenden, aber diesmal habe ich versucht, den Ausdruck lambda
zu verwenden (da ich diesmal nicht gesagt habe, dass ich eine Funktion erstellen soll). "X | Y" ist die Summenmenge, "X-Y" ist die Differenzmenge und "X & Y" ist die Produktmenge.
007.py
def f(x, y, z): return "%s Zeit%s ist%s" % (x, y, z)
print(f(12, "Temperatur", 22.4))
Die Temperatur um 12 Uhr ist 22.4
"{1} bei {0} ist {2}" .format (x, y, z) "ist in Ordnung.
008.py
def cipher(s): return "".join(chr(219-ord(c)) if c.islower() else c for c in s)
s = "Hi He Lied Because Boron Could Not Oxidize Fluorine."
print(cipher(s))
print(cipher(cipher(s)))
Hr Hv Lrvw Bvxzfhv Blilm Clfow Nlg Ocrwrav Foflirmv.
Hi He Lied Because Boron Could Not Oxidize Fluorine.
Es scheint, dass "a" <= c <= "z" "anstelle von" islower "verwendet werden kann. Ist das schneller
009.py
from random import random
typo = lambda s: " ".join(t[0]+"".join(sorted(t[1:-1], key=lambda k:random()))+t[-1] if len(t) > 4 else t for t in s.split())
s = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print(typo(s))
I cdnlu'ot blieeve that I culod aclualty uetdnnsard what I was rdeniag : the pnneehmoal pwoer of the huamn mind .
Irgendwie wurde ich stur und tat mein Bestes in einer Zeile. Ich verwende sorted ()
, weil die Funktion shuffle ()
keinen Rückgabewert hat.
Recommended Posts