Après avoir effectué 100 traitements de langage en 2015, j'ai acquis beaucoup de compétences de base en Python Chapitre 1

introduction

Maintenant, après avoir étudié Python, j'ai essayé Language Processing 100 Knock 2015. Essayez-le sans rien regarder au début, puis réessayez avec un meilleur style d'écriture (intelligent), en vous référant au style d'écriture de l'autre personne de 100 coups.

De meilleures références d'écriture sont listées à la fin.

Chapitre 1: Mouvement préparatoire

00. Ordre inverse des chaînes

Obtenez une chaîne dans laquelle les caractères de la chaîne «souligné» sont disposés à l'envers (de la fin au début).

code


input_str = 'stressed'
result = input_str[::-1]
print(result)

Résultat de sortie


desserts

Meilleur code

Si vous définissez une valeur négative pour le pas de tranche, il sera vu de la fin. Il est peu probable que cela change beaucoup plus que cela.

01. «Patatokukashi»

Retirez les 1er, 3ème, 5ème et 7ème caractères de la chaîne de caractères "Patatokukashi" et obtenez la chaîne de caractères concaténée.

code


input_str = 'Patatoku Kashii'
result = ''
for index, s in enumerate(input_str):
   if index % 2 == 0:
       result += s
print(result)

Résultat de sortie


Voiture Pat

Meilleur code

Cela convient également aux tranches.

code


input_str = 'Patatoku Kashii'
result = input_str[::2]
print(result)

02. "Patcar" + "Tax" = "Patatokukasie"

Obtenez la chaîne de caractères "Patatokukashi" en reliant alternativement les caractères "Pattocar" + "Tax" depuis le début.

code


p = 'Voiture Pat'
t = 'Taxi'
result = ''
for i in range(len(p)):
   result += p[i]
   result += t[i]
print(result)

Résultat de sortie


Patatoku Kashii

Meilleur code

Faites une liste de ['Patter', 'Toku', 'Kashi', 'ー ー'] et join ().

code


p = 'Voiture Pat'
t = 'Taxi'
result = ''.join([char1 + char2 for char1, char2 in zip(p, t)])
print(result)

03. Taux circonférentiel

Décomposez la phrase "Maintenant, j'ai besoin d'un verre, alcoolique bien sûr, après les lourdes conférences sur la mécanique quantique." En mots et créez une liste du nombre de caractères (alphabétiques) dans chaque mot par ordre d'apparition.

code


input_str = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []
input_str = input_str.replace(',', '').replace('.', '').split(' ')
for s in input_str:
   result.append(len(s))
print(result)

Résultat de sortie


[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]

Meilleur code

L'argument de split () n'a pas besoin d'être spécifié car il est `` '' 'par défaut.

code


input_str = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []
input_str = input_str.replace(',', '').replace('.', '').split()
for s in input_str:
   result.append(len(s))
print(result)

04. Symbole d'élément

Décomposez la phrase "Salut, il a menti parce que le bore ne pouvait pas oxyder le fluor. De nouvelles nations pourraient également signer une clause de sécurité de paix. Arthur King Can." Le premier mot est le premier caractère, les autres mots sont les deux premiers caractères, et le tableau associatif (type de dictionnaire ou type de carte) de la chaîne de caractères extraite à la position du mot (quel nombre de mots depuis le début) est créé. Créez-le.

code


input_str = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
single_ary = [1, 5, 6, 7, 8, 9, 15, 16, 19]
result = {}
input_str = input_str.replace('.', '').split(' ')
for index, s in enumerate(input_str):
    if index + 1 in single_ary:
        result[s[0]] = index
    else:
        result[s[0] + s[1]] = index
print(result)

Résultat de sortie


{'H': 0, 'He': 1, 'Li': 2, 'Be': 3, 'B': 4, 'C': 5, 'N': 6, 'O': 7, 'F': 8, 'Ne': 9, 'Na': 10, 'Mi': 11, 'Al': 12, 'Si': 13, 'P': 14, 'S': 15, 'Cl': 16, 'Ar': 17, 'K': 18, 'Ca': 19}

Meilleur code

Si l'instruction devient un opérateur ternaire. Il semble que le nom de la liste ne soit pas bon, alors je l'ai corrigé.

code


input_str = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
single_list = [1, 5, 6, 7, 8, 9, 15, 16, 19]
result = {}
input_str = input_str.split()
for index, s in enumerate(input_str):
    l = 1 if index + 1 in single_list else 2
    result[s[:l]] = index
print(result)
  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".

code


input_str = 'I am an NLPer'

def create_word_n_gram(input_str, num):
    str_list = input_str.split(' ')
    results = []
    for i in range(len(str_list) - num + 1):
        ngram = ''
        for j in range(num):
            ngram += str_list[j + i]
        results.append(ngram)
    return results

def create_char_n_gram(input_str, num):
    str_no_space = input_str.replace(' ', '')
    results = []
    for i in range(len(str_no_space) - num + 1):
        ngram = ''
        for j in range(num):
            ngram += str_no_space[j + i]
        results.append(ngram)
    return results

print(create_word_n_gram(input_str, 2))
print(create_char_n_gram(input_str, 2))

Résultat de sortie


['Iam', 'aman', 'anNLPer']
['Ia', 'am', 'ma', 'an', 'nN', 'NL', 'LP', 'Pe', 'er']

Meilleur code

Le caractère n-gramme comprend également des espaces. J'ai toujours mal compris. .. .. Correction du mot n-gramme car le format de sortie n'est pas correct.

code


input_str = 'I am an NLPer'

def create_word_n_gram(input_str, num):
    str_list = input_str.split(' ')
    results = []
    for i in range(len(str_list) - num + 1):
        results.append(str_list[i:i + num])
    return results

def create_char_n_gram(input_str, num):
    results = []
    for i in range(len(input_str) - num + 1):
        results.append(input_str[i:i + num])
    return results

print(create_word_n_gram(input_str, 2))
print(create_char_n_gram(input_str, 2))

Résultat de sortie


[['I', 'am'], ['am', 'an'], ['an', 'NLPer']]
['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er']

06. Réunion

Trouvez l'ensemble des bi-grammes de caractères contenus dans «paraparaparadise» et «paragraphe» comme X et Y, respectivement, et trouvez l'ensemble de somme, l'ensemble de produits et l'ensemble de différences de X et Y, respectivement. En outre, découvrez si le bi-gram'se'est inclus dans X et Y.

code


input_str_x = 'paraparaparadise'
input_str_y = 'paragraph'
word = 'se'

def create_char_n_gram(input_str, num):
    str_no_space = input_str.replace(' ', '')
    results = []
    for i in range(len(str_no_space) - num + 1):
        ngram = ''
        for j in range(num):
            ngram += str_no_space[j + i]
        results.append(ngram)
    return results

def calculate_union(list_x, list_y):
    list_union = list(set(list_x + list_y))
    return list_union

def calculate_intersection(list_x, list_y):
    list_sum = list_x + list_y
    list_intersection = [elem for elem in set(list_sum) if list_sum.count(elem) > 1]
    return list_intersection

def calculate_difference(list_x, list_y):
    list_intersection = calculate_intersection(list_x, list_y)
    list_sum = list_x + list_intersection
    list_difference = [elem for elem in set(list_sum) if list_sum.count(elem) == 1]
    return list_difference

def check_including_word(word_list, word):
    if word in word_list:
        return True
    else:
        return False

x = create_char_n_gram(input_str_x, 2)
y = create_char_n_gram(input_str_y, 2)

print(calculate_union(x, y))
print(calculate_intersection(x, y))
print(calculate_difference(x, y))
print(check_including_word(x, word))
print(check_including_word(y, word))

Résultat de sortie


['ar', 'ag', 'gr', 'is', 'ph', 'se', 'pa', 'di', 'ap', 'ad', 'ra']
['ar', 'pa', 'ap', 'ra']
['is', 'se', 'di', 'ad']
True
False

Meilleur code

Si vous le réglez sur set, vous pouvez effectuer des opérations de set. Je n'avais pas besoin d'une fonction ... La fonction de vérification est également assez redondante. Vous devriez le remarquer en écrivant.

code


input_str_x = 'paraparaparadise'
input_str_y = 'paragraph'
word = 'se'

def create_char_n_gram(input_str, num):
    results = []
    for i in range(len(input_str) - num + 1):
        results.append(input_str[i:i + num])
    return results

x = set(create_char_n_gram(input_str_x, 2))
y = set(create_char_n_gram(input_str_y, 2))

print(x | y)
print(x - y)
print(x & y)
print(word in x)
print(word in y)

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.

code


x = 12
y = 'Température'
z = 22.4

def create_str(x, y, z):
    return str(x) + 'de temps' + y + 'Est' + str(z)
    
print(create_str(x, y, z))

Résultat de sortie


La température à 12 heures est de 22.4

Meilleur code

Je pense qu'il existe différentes manières d'ajouter des chaînes de caractères, mais il semble qu'il n'y aura pas de changements majeurs.

08. Cryptographie

Implémentez le chiffrement de fonction qui convertit chaque caractère de la chaîne de caractères donnée selon 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.

code


input_str = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'

def cipher(input_str):
    result = list(map(lambda e: chr(219 - ord(e)) if e.islower() else e, input_str))
    return ''.join(result)

print(cipher(input_str))
print(cipher(cipher(input_str)))

Résultat de sortie


Nld I mvvw z wirmp, zoxlslorx lu xlfihv, zugvi gsv svzeb ovxgfivh rmeloermt jfzmgfn nvxszmrxh.
Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.

Meilleur code

Il est peu probable que cela change beaucoup plus que cela. Correctement, "décrypter" au lieu de "décrypter". J'ai pensé, mais maintenant il semble que le "décryptage" soit aussi couramment utilisé ...

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

code


import random
input_str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."

def create_typoglycemia(input_str):
    input_str_list = input_str.split(' ')
    result = []
    for word in input_str_list:
        length = len(word)
        if length > 4:
            first_char = word[0]
            last_char = word[length - 1]
            random_str = ''.join(random.sample(list(word[1:length - 1]), length - 2))
            result.append(word[0] + random_str + word[length - 1])
        else:
            result.append(word)
    return ' '.join(result)

print(create_typoglycemia(input_str))

Résultat de sortie


I cunldo't biveele that I culod aclatluy urdseanntd what I was rdineag : the pehaneomnl pewor of the huamn mind .

Meilleur code

Supprimez les variables qui ne sont utilisées qu'une seule fois même si elles sont définies, et les variables qui ne sont pas utilisées du tout même si elles sont définies.

code


import random
input_str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."

def create_typoglycemia(input_str):
    result = []
    for word in input_str.split(' '):
        length = len(word)
        if length > 4:
            random_str = ''.join(random.sample(word[1:length - 1], length - 2))
            result.append(word[0] + random_str + word[length - 1])
        else:
            result.append(word)
    return ' '.join(result)

print(create_typoglycemia(input_str))

en conclusion

Je vais résumer l'article de 100 language processing knock 2015 (Python) posté sur Qiita à titre de référence.

Recommended Posts

Après avoir effectué 100 traitements de langage en 2015, j'ai acquis beaucoup de compétences de base en Python Chapitre 1
Réhabilitation des compétences Python et PNL à partir de "100 Language Processing Knock 2015" (Chapitre 1)
100 Language Processing Knock Chapitre 2 (Python)
Réhabilitation des compétences Python et PNL à partir de «Knock 100 Language Processing 2015» (chapitre 2 deuxième semestre)
Réhabilitation des compétences Python et PNL à partir de "100 Language Processing Knock 2015" (Chapitre 2 premier semestre)
100 traitements de langage avec Python
100 Language Processing Knock Chapitre 1 en Python
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 traitements de langage avec Python (chapitre 3)
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
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 Language Processing Knock 2020 Chapitre 1
100 Traitement du langage Knock Chapitre 1
100 Language Processing Knock 2020 Chapitre 2
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
100 coups de traitement du langage avec Python 2015
J'ai essayé 100 traitements linguistiques Knock 2020
Je veux démarrer beaucoup de processus à partir de python
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
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 10 à 14]
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
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
100 Language Processing Knock 2020 Chapitre 10: Traduction automatique (90-98)
100 Language Processing Knock 2020 Chapitre 5: Analyse des dépendances
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
100 traitement du langage knock-59: analyse de la formule S
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)
J'écrirai une explication détaillée à mort en résolvant 100 traitements de langage naturel Knock 2020 avec Python
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 15-19]
100 Language Processing Knock 2020 Chapitre 1: Mouvement préparatoire
100 Language Processing Knock 2020 Chapitre 3: Expressions régulières
100 Language Processing Knock 2015 Chapitre 4 Analyse morphologique (30-39)
J'ai fait beaucoup de recherches sur la façon dont Python est exécuté
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (00 ~ 04)
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
J'ai fait une sorte d'outil de traitement d'image simple en langage Go.
Un rappel de ce que je suis resté coincé lors du démarrage d'Atcoder avec python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
J'ai fait 100 traitements linguistiques Knock 2020 avec GiNZA v3.1 Chapitre 4
100 traitement du langage knock-91: Préparation des données d'analogie
Traitement du langage 100 knocks-44: Visualisation des arbres dépendants
100 Language Processing Knock-26: suppression du balisage accentué
Connectez beaucoup de Python ou et et
J'ai essayé un langage fonctionnel avec Python
[Programmeur nouveau venu "100 language processing knock 2020"] Résoudre le chapitre 1
L'histoire du traitement A du blackjack (python)
Après avoir étudié Python3, j'ai créé un Slackbot
100 traitement de langage knock-34 (utilisant des pandas): "B of A"
J'ai essayé de résoudre la version 2020 de 100 problèmes de traitement du langage [Chapitre 3: Expressions régulières 20 à 24]
J'ai essayé de résoudre la version 2020 de 100 coups de traitement de langue [Chapitre 1: Mouvement préparatoire 00-04]