Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)

Préface

J'ai écrit le code dans la suite de la dernière fois. J'ai raccourci la partie qui est facile à voir et qui peut être écrite aussi courte que possible. Veuillez signaler toute erreur ou amélioration.

(Une addition) Puisque vous avez indiqué comment écrire le code, j'ai ajouté après l'édition 05, 06 et 09.

  1. 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".

05.py


def word_ngram(seq, n):
    return ["-".join(seq.split()[i:i+n]) for i in range(len(seq.split())-n+1)]

def char_ngram(seq, n):
    return ["".join(seq[i:i+n]) for i in range(len(seq)-n+1)]

def main():
    seq = "I am an NLPer"
    word_2gram_list, char_2gram_list = word_ngram(seq, 2), char_ngram(seq, 2)
    print(word_2gram_list)
    print(char_2gram_list)

if __name__ == '__main__':
    main()
['I-am', 'am-an', 'an-NLPer']
['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er']

Le mot bi-gramme est affiché séparé par des tirets et le bi-gramme de caractère est affiché avec des espaces.

(Après modification ↓) Le word_ngram a été réécrit.

05.py


def word_ngram(seq, n):
    words = seq.split()
    return ["-".join(words[i:i+n]) for i in range(len(words)-n+1)]

def char_ngram(seq, n):
    return ["".join(seq[i:i+n]) for i in range(len(seq)-n+1)]

def main():
    seq = "I am an NLPer"
    word_2gram_list, char_2gram_list = word_ngram(seq, 2), char_ngram(seq, 2)
    print(word_2gram_list)
    print(char_2gram_list)

if __name__ == '__main__':
    main()

06. Réunion

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.

06.py


# coding:utf-8

def n_gram(seq, n):
    return ["".join(seq[i:i+n]) for i in range(len(seq)-n+1)]

def main():
    X, Y = set(n_gram("paraparaparadise", 2)), set(n_gram("paragraph", 2))
    print("X: " + str(X))
    print("Y: " + str(Y))
    print("Ensemble de somme: " + str(X.union(Y)))
    print("Ensemble de produits: " + str(X.intersection(Y)))
    print("Ensemble de différences: " + str(X.difference(Y)))
    print("X contient-il du se?: " + str("se" in X))
    print("Y inclut-il se?: " + str("se" in Y))

if __name__ == '__main__':
    main()
X: {'pa', 'ar', 'di', 'se', 'ad', 'ap', 'is', 'ra'}
Y: {'pa', 'ar', 'ph', 'ap', 'ag', 'gr', 'ra'}
Ensemble de somme: {'di', 'se', 'ap', 'ag', 'pa', 'ar', 'ph', 'ad', 'is', 'gr', 'ra'}
Ensemble de produits: {'ap', 'ar', 'ra', 'pa'}
Ensemble de différences: {'is', 'ad', 'di', 'se'}
X contient-il du se?: True
Y inclut-il se?: False

Pour n_gram, j'ai utilisé char_ngram de 05.py tel quel.

(Après modification ↓) La partie imprimée a été réécrite.

06.py


# coding:utf-8

def n_gram(seq, n):
    return ["".join(seq[i:i+n]) for i in range(len(seq)-n+1)]

def main():
    X, Y = set(n_gram("paraparaparadise", 2)), set(n_gram("paragraph", 2))
    print("X: ", X)
    print("Y: ", Y)
    print("Ensemble de somme: ", X | Y)
    print("Ensemble de produits: ", X & Y)
    print("Ensemble de différences: ", X - Y)
    print("X contient-il du se?: ", "se" in X)
    print("Y inclut-il se?: ", "se" in Y)

if __name__ == '__main__':
    main()

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.

07.py


# coding:utf-8

def ans(x, y, z):
    return '{}de temps{}Est{}'.format(x, y, z)

def main():
    x, y, z = 12, 'Température', 22.4
    print(ans(x, y, z))

if __name__ == '__main__':
    main()

Ce n'était pas si difficile. C'était un problème si je connaissais le format.

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. ・ S'il est en anglais inférieur, remplacez-le par le caractère (219 - code de caractère) ・ Les autres caractères sont affichés tels quels Utilisez cette fonction pour crypter / décrypter les messages en anglais.

08.py


# coding:utf-8

def cipher(seq):
    return ''.join(chr(219-ord(i)) if i.islower() else i for i in seq)

def main():
  seq = 'Is the order a rabbit?'
  print("chiffrement: " + str(cipher(seq)))
  print("Décryptage: " + str(cipher(cipher(seq))))

if __name__ == '__main__':
    main()
chiffrement: Ih gsv liwvi z izyyrg?
Décryptage: Is the order a rabbit?

Avec islower (), on juge si tous les caractères qui sont sensibles à la casse sont inférieurs, et avec ord, le caractère → ascii, et avec le caractère chr, ascii →. Je ne pouvais pas penser à une phrase en anglais particulièrement bonne, alors j'ai décidé de la traiter de manière appropriée. ~~ J'aime les gens à l'intérieur de Cocoa ~~

  1. Typoglycemia

Créez un programme qui réorganise de manière aléatoire 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.

09.py


import random

def Typoglycemia(seq):
    return " ".join((x[0] + "".join(random.sample(x[1:-1], len(x[1:-1]))) + x[-1]) if len(x) > 4 else x for i,x in enumerate(seq.split()))

def main():
    s = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind."
    print(Typoglycemia(s))

if __name__ == '__main__':
    main()
I coludn't bevelie that I cuold aultalcy urnteasndd what I was riednag : the pmenneaohl peowr of the hamun mdni.

Les caractères autres que le début et la fin de la chaîne de caractères ont été réorganisés aléatoirement avec random.sample sans duplication.

(Après modification ↓) La typoglycémie a été réécrite.

09.py


import random

def Typoglycemia(seq):
    shuffle = lambda x: "".join(random.sample(x, len(x)))
    typo = lambda x: x[0] + shuffle(x[1:-1]) + x[-1]
    return " ".join(typo(x) if len(x) > 4 else x for x in seq.split())

def main():
    s = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind."
    print(Typoglycemia(s))

if __name__ == '__main__':
    main()

l'expression lambda est pratique. Je l'utiliserai quand il semblera utilisable dans le futur.


J'écrirai la suite quand j'en aurai envie.

Recommended Posts

Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (00 ~ 04)
100 coups de traitement du langage avec Python 2015
100 Language Processing Knock Chapitre 1 (Python)
J'ai essayé 100 traitements linguistiques Knock 2020
100 traitements de langage avec Python
100 coups de traitement linguistique (2020): 28
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 traitements de langage avec Python (chapitre 3)
100 coups de traitement linguistique (2020): 38
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
100 traitement de la langue frapper 00 ~ 02
100 Language Processing Knock Chapitre 1 par Python
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 4
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 Language Processing Knock 2020 Chapitre 1
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
Python: traitement du langage naturel
100 Traitement du langage Knock-52: Stemming
100 Traitement du langage Knock Chapitre 1
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation
100 coups de traitement du langage amateur: 97
100 traitements linguistiques Knock 2020 [00 ~ 59 réponse]
100 coups de traitement du langage amateur: 67
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 14-16
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 07-09
Une personne inexpérimentée en Python tente de frapper 100 traitement du langage 10 ~ 13
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 05-06
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 00-04
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 traitement linguistique knock-50: coupure de phrase
Traitement du langage 100 Knock-87: similitude des mots
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 coups de traitement du langage amateur: Résumé
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage
100 Language Processing Knock-55: extraction d'expressions uniques
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
100 Language Processing Knock: Chapitre 1 Mouvement préparatoire
100 Language Processing Knock 2020 Chapitre 6: Apprentissage automatique
100 Traitement du langage Knock Chapitre 4: Analyse morphologique
Traitement du langage 100 knock-86: affichage vectoriel Word
100 Language Processing Knock 2020 Chapitre 5: Analyse des dépendances
100 Language Processing Knock-28: Suppression du balisage MediaWiki
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
100 Language Processing Knock 2020 Chapitre 8: Neural Net
100 traitement du langage knock-59: analyse de la formule S
100 traitement du langage knock-31 (en utilisant des pandas): verbe
100 langues de traitement frappent 2020 "pour Google Colaboratory"