http://www.cl.ecei.tohoku.ac.jp/nlp100/
Les débutants feront de leur mieux avec Python (3.x). Je pense qu'il existe de nombreux articles similaires, mais en tant que mémorandum personnel. Si vous avez des conseils ou des suggestions, laissez un commentaire!
Le code source est également publié sur github. https://github.com/hbkr/nlp100
Chapter1
000.py
s = "stressed"
print(s[::-1])
desserts
s [i: j: k]
signifie tranche de s de i à j avec le pas k, donc s [:: -1]
recule de -1 caractère de la fin au début.
001.py
s = "Patatoku Kashii"
print(s[::2])
Voiture Pat
Comme expliqué ci-dessus, vous pouvez utiliser s [:: 2]
pour extraire une chaîne de caractères en sautant un caractère du début à la fin.
002.py
s = "".join(i+j for i, j in zip("Voiture Pat", "Taxi"))
print(s)
Patatoku Kashii
Vous pouvez boucler plusieurs objets de séquence en même temps avec zip
. sep.join (seq)
concatène seq
avec sep
comme délimiteur pour créer une chaîne de caractères. La notation d'inclusion de liste est «join» avec des caractères vides.
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]
Utilisez str.split (sep)
pour diviser la chaîne en une liste avec sep
comme délimiteur. Si aucun délimiteur n'est spécifié, il sera séparé par des espaces, des tabulations, des chaînes de saut de ligne, etc. Le nombre de caractères est compté par len ()
après avoir supprimé le précédent et le suivant ,. Avec 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}
Vous pouvez obtenir à la fois l'index de l'élément et l'élément avec ʻenumerate (seq [, start = 0]) . L'index est passé tel quel à l'opérateur ʻin
pour ajuster le nombre de caractères à acquérir.
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')}
La méthode N-gram est une méthode d'indexation de phrases avec N caractères comme mots-clés dans l'ordre des chaînes de caractères. La fonction n_gram (s, n)
coupe l'élément s
de l'objet séquence passé de n
et le renvoie comme type d'ensemble. En retournant comme type d'ensemble, les éléments ne sont pas dupliqués.
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.
J'utiliserai le n_gram
créé dans 005.py, mais cette fois j'ai essayé d'utiliser l'expression lambda
(puisque je n'ai pas dit que je devrais créer une fonction cette fois). «X | Y» est l'ensemble de somme, «X-Y» est l'ensemble de différences et «X & Y» est l'ensemble de produits.
007.py
def f(x, y, z): return "%s temps%s est%s" % (x, y, z)
print(f(12, "Température", 22.4))
La température à 12 heures est de 22.4
" {1} à {0} est {2} ".format (x, y, z)
est bien.
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.
Il semble que «a» <= c <= «z» «peut être utilisé à la place de« est inférieur ». Est-ce plus rapide?
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 .
D'une certaine manière, je suis devenu têtu et j'ai fait de mon mieux en une seule ligne. J'utilise sorted ()
car la fonction shuffle ()
n'a pas de valeur de retour.
Recommended Posts