Un enregistrement de la résolution des problèmes dans la seconde moitié du chapitre 1.
05. n-gram
Créez une fonction qui crée un n-gramme à partir d'une séquence donnée (chaîne, liste, etc.). Utilisez cette fonction pour obtenir le mot bi-gramme et la lettre bi-gramme à partir de la phrase "Je suis un PNL".
# -*- 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'Liste des personnages bi-gram:'
print ngram(string.split(), 2)
print u'Chaîne bi-gram:'
print ngram(string, 2)
#=>Liste des personnages bi-gram:
#=> [['I', 'am'], ['am', 'an'], ['an', 'NLPer']]
#=>Chaîne bi-gram:
#=> ['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er']
Pour le bi-gramme de la chaîne de caractères, l'espace est également traité comme un caractère.
Trouvez l'ensemble des caractères bi-grammes contenus dans «paraparaparadise» et «paragraphe» comme X et Y, respectivement, et trouvez les ensembles somme, produit et différence de X et Y, respectivement. En outre, découvrez si le bi-gram'se'est inclus dans X et Y.
# -*- 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"Ensemble de somme:"
print list(set(X).union(set(Y)))
print u"Ensemble de produits:"
print list(set(X).intersection(set(Y)))
print u"Ensemble de différences:"
print list(set(X).difference(set(Y)))
print u'\'se\'Est inclus dans X?'
print "se" in X
print u'\'se\'Est inclus dans Y?'
print "se" in Y
#=>Ensemble de somme:
#=> ['ad', 'ag', 'di', 'is', 'ap', 'pa', 'ra', 'ph', 'ar', 'se', 'gr']
#=>Ensemble de produits:
#=> ['ap', 'pa', 'ar', 'ra']
#=>Ensemble de différences:
#=> ['is', 'ad', 'se', 'di']
#=> 'se'Est inclus dans X?
#=> True
#=> 'se'Est inclus dans Y?
#=> False
L'ensemble de somme, l'ensemble de produits et l'ensemble de différences de bi-gramme sont obtenus en utilisant la méthode d'ensemble.
Implémentez une fonction qui prend les arguments x, y, z et renvoie la chaîne "y at x is z". De plus, définissez x = 12, y = "température", z = 22,4 et vérifiez le résultat de l'exécution.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
def func(x, y, z):
return u"%s temps%s est%s" % (x, y, z)
x = 12
y = u"Température"
z = 22.4
print func(x, y, z)
#=>La température à 12 heures est de 22.4
Utilisez la spécification de format de l'instruction d'impression pour le modèle.
Implémentez la fonction de chiffrement qui convertit chaque caractère de la chaîne de caractères donnée avec les spécifications suivantes. Remplacer par (219 --character code) caractères si minuscules Afficher les autres caractères tels quels Utilisez cette fonction pour crypter / décrypter les messages en anglais.
# -*- 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'chiffrement:'
print cipher(string)
print u'Décryptage:'
print cipher(cipher(string))
#=>chiffrement:
#=> iv1
#=>Décryptage:
#=> re1
Utilisez la méthode islower pour déterminer s'il est en lettres minuscules. Il n'est pas nécessaire d'implémenter un composé spécial car il a la propriété qu'il sera restauré lorsque le composé chiffré sera à nouveau converti.
09. Typoglycemia
Créez un programme qui réorganise aléatoirement l'ordre des autres caractères, en laissant le premier et le dernier caractère de chaque mot pour la chaîne de mots séparés par des espaces. Cependant, les mots d'une longueur de 4 ou moins ne sont pas réorganisés. Donnez une phrase en anglais appropriée (par exemple, "Je ne pouvais pas croire que je pouvais réellement comprendre ce que je lisais: le pouvoir phénoménal de l'esprit humain.") Et vérifiez le résultat de l'exécution.
# -*- 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 .
L'intérieur de la chaîne est mélangé à l'aide de la méthode aléatoire. Bien sûr, le tri est aléatoire, donc la sortie est différente à chaque fois.