[PYTHON] 100 coups au traitement du langage naturel Chapitre 1 Mouvement préparatoire (seconde moitié)

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.

</ i> 06. Montage

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.

</ i> 07. Génération de déclaration par modèle

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.

</ i> 08. Cryptographie

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.

Recommended Posts