[PYTHON] 100 Traitement du langage Knock Chapitre 1

Je ne sais pas ce que je peux faire. (cf. Knock 100 language processing 2015)

00. Ordre inverse des chaînes

# coding: utf-8

s = "stressed"

print(s[::-1])

01. «Patatokukashi»

# coding: utf-8

s = "Patatoku Kashii"

print(s[::2])

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

# coding: utf-8

s1 = 'Voiture Pat'
s2 = 'Taxi'

s = ''.join([i+j for i, j in zip(s1, s2)])
print(s)

Vous pouvez créer un itérateur à partir de plusieurs itérables avec zip ().

Postscript

# coding: utf-8

s1 = 'Voiture Pat'
s2 = 'Taxi'

s = ''.join(i+j for i, j in zip(s1, s2))
print(s)

Il n'est pas nécessaire de créer une liste inutile en utilisant la notation d'inclusion du générateur.

03. Taux circonférentiel

# coding: utf-8
import re

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

#Excluez les virgules et les virgules, puis décomposez-les en une liste mot par mot
s = re.sub('[,.]', '', s)
s = s.split()

#Comptez le nombre de caractères et listez
result = []
for w in s:
    result.append(len(w))
    
print(result)

Postscript

# coding: utf-8
s = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'

#Après l'avoir décomposé en une liste mot par mot,.Exclure et compter le nombre de caractères
result = [len(w.rstrip(',.')) for w in s.split()]

print(result)

Le processus d'initialisation avec une liste vide et de rotation pour est réécrit avec la notation d'inclusion. rstrip () supprime le caractère spécifié de la droite. Les caractères peuvent être spécifiés ensemble.

04. Symbole d'élément

# coding: utf-8
s = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'.split()

target = [1, 5, 6, 7, 8, 9, 15, 16, 19]

result ={}

for i in range(len(s)):
    if i + 1 in target:
        result[i+1] = s[i][:1]
    else:
        result[i+1] = s[i][:2]
        
print(result)

Postscript

# coding: utf-8
s = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'

target = 1, 5, 6, 7, 8, 9, 15, 16, 19

result = [w[: 1 if i in target else 2] for i, w in enumerate(s.split(), 1)]

print(result)

Dans la partie de [: 1 if i in target else 2], je me demandais si else peut être utilisé dans la notation d'inclusion, mais c'est la tranche [: x] et l'opérateur ternaire ʻa if cond else b Une combinaison de `.

  1. n-gram
# coding: utf-8

def n_gram(n, s):
    result = []
    for i in range(0, len(s)-n+1):
        result.append(s[i:i+n])
    return result

print(n_gram(2, 'I am an NLPer'))

Postscript

# coding: utf-8

def n_gram(n, s):
    return [s[i:i+n] for i in range(0, len(s)-n+1)]

print(n_gram(2, 'I am an NLPer'))

C'est aussi «for» et «append» dans la liste initialisée, donc il peut être réécrit avec la notation d'inclusion. Je ne suis pas habitué à la notation d'inclusion, j'ai donc l'impression qu'il est difficile de l'écrire et de la réécrire.

06. Réunion

# coding: utf-8
#Ensemble de somme, ensemble de produits, ensemble de différence de deux bigrammes

def bi_gram(s):
    result = []
    for i in range(0, len(s)-1):
        result.append(s[i:i+2])
    return result
    
s1 = 'paraparaparadise'
s2 = 'paragraph'

X = set(bi_gram(s1))
Y = set(bi_gram(s2))
print("X = ", X)
print("Y = ", Y)
print("union: ", X | Y) # union
print("intersection: ", X & Y) # intersection
print("difference: ", X - Y) # difference

if "se" in X:
    print("X contain 'se'.")
else:
    print("X doesn't contain 'se'.")
    
if "se" in Y:
    print("Y contain 'se'.")
else:
    print("Y doesn't contain 'se'.")

07. Génération de déclaration par modèle

# coding: utf-8

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

x = 12
y = 'Température'
z = 22.4
print(gen_sentence(x, y, z))

08. Cryptographie

# coding: utf-8

def cipher(S):
    result = []
    for i in range(len(S)):
        if(S[i].islower()):
            result.append(chr(219 - ord(S[i])))
        else:
            result.append(S[i])
    return ''.join(result)
    
S = "abcDe"
print(cipher(S))
print(cipher(cipher(S)))

Convertit les caractères en valeurs entières du point de code Unicode avec ʻord () `. La fonction inverse est «chr ()».

Postscript

# coding: utf-8

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

S = "abcDe"
print(cipher(S))
print(cipher(cipher(S)))

Vous pouvez remplacer l'opérateur ternaire et la notation d'inclusion par des choses comme «ajouter» avec «pour» pendant le branchement conditionnel à la liste initialisée. Si vous savez que c'est une telle chose, il semble que vous puissiez le lire et l'écrire.

  1. Typoglycemia
# coding: utf-8

import numpy.random as rd

def gen_typo(S):
    if len(S) <= 4:
        return S
    else:
        idx = [0]
        idx.extend(rd.choice(range(1, len(S)-1), len(S)-2, replace=False))
        idx.append(len(S)-1)
        result = []
        for i in range(len(S)):
            result.append(S[idx[i]])
        return ''.join(result)

s = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
s = s.split()
print(' '.join([gen_typo(i) for i in s]))

Il existe différentes méthodes d'échantillonnage aléatoire, mais vous pouvez utiliser numpy.random.choice pour choisir entre l'extraction par restauration et l'extraction sans restauration.

Postscript

# coding: utf-8

import random

def gen_typo(S):
    return ' '.join(
        s 
        #Renvoie les mots d'une longueur inférieure à 4
        if len(s) <= 4 
        #Mélangez les mots de 5 ou plus, en laissant les première et deuxième lettres
        else s[0] + ''.join(random.sample(s[1:-1], len(s)-2)) + s[-1] 
        for s 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(gen_typo(S))

Ceci est également réécrit avec la notation d'inclusion et l'opérateur ternaire.

De plus, «random.sample (population, k)» restaure et extrait de façon aléatoire «k» éléments de «population» (séquence ou ensemble).

Recommended Posts

100 Language Processing Knock 2020 Chapitre 1
100 Traitement du langage Knock Chapitre 1
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
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 Chapitre 1 en Python
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 traitements de langage avec Python (chapitre 3)
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 Language Processing Knock 2020 Chapitre 8: Neural Net
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
100 Language Processing Knock 2020 Chapitre 1: Mouvement préparatoire
100 Language Processing Knock Chapitre 1 par Python
100 Language Processing Knock 2020 Chapitre 3: Expressions régulières
100 Language Processing Knock 2015 Chapitre 4 Analyse morphologique (30-39)
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 4
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 coups de traitement du langage amateur: 17
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
100 Traitement du langage Knock-52: Stemming
100 coups de traitement du langage ~ Chapitre 1
100 coups de langue amateur: 07
Le traitement de 100 langues frappe le chapitre 2 (10 ~ 19)
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
J'ai fait 100 traitements linguistiques Knock 2020 avec GiNZA v3.1 Chapitre 4
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
[Programmeur nouveau venu "100 language processing knock 2020"] Résoudre le chapitre 1
100 coups de traitement du langage avec Python 2015
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 Language Processing Knock-57: Analyse des dépendances
100 Commandes de traitement du langage Knock UNIX apprises au chapitre 2
100 Traitement du langage Knock Expressions régulières apprises au chapitre 3
100 traitement linguistique knock-50: coupure de phrase
100 Language Processing Knock-25: Extraction de modèles
Traitement du langage 100 Knock-87: similitude des mots
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")