["Chapitre 1: Mouvement préparatoire"](http: //www.cl.ecei.) Of Language Processing 100 Knock 2015 Il s'agit d'un enregistrement de tohoku.ac.jp/nlp100/#ch1). C'est un examen de ce que j'ai fait il y a plus d'un an. En regardant à nouveau le code à ce moment-là, il y a de nombreuses corrections, et il semble que c'est ma propre croissance. Je pense que la quantité de code a été réduite à environ la moitié de celle du programme que j'avais fait à l'époque. Et maintenant que j'ai une certaine expérience de Python, c'est un ** bon tutoriel pour apprendre Python et le traitement du langage **. Par rapport à la seconde moitié, un coup est plus léger, ce qui est exactement ce que mérite le nom de «mouvement préparatoire».
type | version | Contenu |
---|---|---|
OS | Ubuntu18.04.01 LTS | Il fonctionne virtuellement |
pyenv | 1.2.15 | J'utilise pyenv car j'utilise parfois plusieurs environnements Python |
Python | 3.6.9 | python3 sur pyenv.6.J'utilise 9 3.7 ou 3.Il n'y a aucune raison profonde de ne pas utiliser la série 8 Les packages sont gérés à l'aide de venv |
Passez en revue certains sujets avancés des langages de programmation tout en travaillant sur des sujets traitant du texte et des chaînes.
Chaîne, Unicode, Type de liste, Type de dictionnaire, Type collectif, Itérateur, Tranche, Aléatoire
Récupère une chaîne dans laquelle les caractères de la chaîne "accentués" sont disposés à l'envers (de la fin au début).
Spécifiez les tranches avec [start: stop: step]
et définissez-les sur des nombres négatifs pour inverser l'ordre.
python:000.Ordre inverse des chaînes.ipynb
print('stressed'[::-1])
Résultat de sortie du terminal
desserts
Retirez les 1er, 3e, 5e et 7e caractères de la chaîne de caractères "Patatokukashi" et récupérez la chaîne de caractères concaténée.
Spécifiez la tranche avec [start: stop: step]
et sortez le 8ème caractère depuis le début par pas de 2 caractères.
python:001.«Patatoku Cassie».ipynb
print('Patatoku Kashii'[0:7:2])
Résultat de sortie du terminal
Voiture Pat
Récupérez la chaîne de caractères "Patatokukashi" en reliant alternativement les caractères "Pattocar" + "Tax" depuis le début.
Utilisez la fonction zip
pour boucler les deux mots" voiture de patrouille "et" taxi "et les lister comme['pata', 'toku', 'kashi', 'ー'] ʻen notation d'inclusion. Sortie en connectant la liste avec la fonction
join. Je comprends la fonction
zip` dans ma tête, mais c'est une sorte de commande que je n'ai pas expérimentée dans le langage, il est donc difficile de trouver l'idée de l'utiliser.
python:002."Pat car" + "Tax" = "Patatokukashi".ipynb
result = [char1+char2 for char1, char2 in zip('Voiture Pat', 'Taxi')]
print(''.join(result))
Résultat de sortie du terminal
Patatoku Kashii
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."
Utilisez la fonction split
pour diviser l'espace. C'est un gars très utile dans le traitement de l'anglais. La fonction strip
supprime les virgules et les points à la fin des mots.
python:003.Pi.ipynb
sentence = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
for word in sentence.split():
print(len(word.strip(',.')), word.strip(',.'))
Le nombre de caractères est le rapport de circonférence, n'est-ce pas?
Résultat de sortie du terminal
3 Now
1 I
4 need
1 a
5 drink
9 alcoholic
2 of
6 course
5 after
3 the
5 heavy
8 lectures
9 involving
7 quantum
9 mechanics
Décomposez la phrase "Salut, il a menti parce que le bore ne pouvait pas oxyder le fluor. Les nouvelles nations pourraient également signer la clause de sécurité de paix. Arthur King Can." En mots 1, 5, 6, 7, 8, 9, 15, 16, Le 19e mot est le premier caractère et les autres mots sont les deux premiers caractères. Créer.
J'utilise le type de dictionnaire inclus (j'ai eu du mal à ne pas savoir comment le combiner avec l'instruction if).
Le dictionnaire est trié de sorte que la sortie soit dans l'ordre des symboles d'élément.
Enfin, j'ai utilisé pprint
pour la sortie parce que je voulais casser chaque élément.
python:004.Symbole d'élément.ipynb
from pprint import pprint
sentence = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
word_list = sentence.split()
result = ({word[0] if i in {1, 5, 6, 7, 8, 9, 15, 16, 19} else word[:2]: i for i, word in enumerate(word_list, 1)})
pprint(sorted(result.items(), key=lambda x:x[1]))
Résultat de sortie du terminal
[('H', 1),
('He', 2),
('Li', 3),
('Be', 4),
('B', 5),
('C', 6),
('N', 7),
('O', 8),
('F', 9),
('Ne', 10),
('Na', 11),
('Mi', 12),
('Al', 13),
('Si', 14),
('P', 15),
('S', 16),
('Cl', 17),
('Ar', 18),
('K', 19),
('Ca', 20)]
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".
S'agit-il d'utiliser «range» in »for» comme nouvel élément technique?
python:005.n-gram.ipynb
def generate_ngram(sentence):
#Liste en divisant par des blancs
words = sentence.split()
#Suppression du blanc
chars = sentence.replace(' ','')
#Mot bi-génération de gramme
bigram_word = [words[i-1] + ' ' + words[i] for i in range(len(words)) if i > 0]
#Personnage bi-génération de gramme
bigram_char = [chars[i-1] + chars[i] for i in range(len(chars)) if i > 0]
return bigram_word, bigram_char
print(generate_ngram('I am an NLPer'))
Résultat de sortie du terminal
(['I am', 'am an', 'an NLPer'], ['Ia', 'am', 'ma', 'an', 'nN', 'NL', 'LP', 'Pe', 'er'])
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.
En Python, il y a quelque chose qui s'appelle set
, et il semble que vous puissiez facilement trouver l'ensemble de somme, l'ensemble de produits et l'ensemble de différences.
python:006.ensemble.ipynb
def generate_ngram(sentense):
#Suppression du blanc
chars = sentense.replace(' ','')
#Personnage bi-génération de gramme
bigram_char = [chars[i-1] + chars[i] for i in range(len(chars)) if i > 0]
return bigram_char
bigram_x = set(generate_ngram('paraparaparadise'))
bigram_y = set(generate_ngram('paragraph'))
#Ensemble de somme
print(bigram_x.union(bigram_y))
#Ensemble de produits
print(bigram_x.intersection(bigram_y))
#Ensemble de différences
print(bigram_x.difference(bigram_y))
search_word = {'se'}
print(search_word.intersection(bigram_x))
print(search_word.intersection(bigram_y))
Résultat de sortie du terminal
{'ag', 'ap', 'se', 'ra', 'is', 'pa', 'ad', 'ph', 'di', 'ar', 'gr'}
{'pa', 'ar', 'ap', 'ra'}
{'ad', 'se', 'di', 'is'}
{'se'}
set()
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.
Les caractères ont été combinés avec «+». {} Au moment de '{} peut être {}'. Format (x, y, z)
.
python:007.Génération de déclaration par modèle.ipynb
def create_sentence(x,y,z):
return str(x) + 'de temps' + str(y) + 'Est' + str(z)
print(create_sentence(12, 'Température', 22.4))
Résultat de sortie du terminal
La température à 12 heures est de 22.4
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 --Les autres caractères sont affichés tels quels
Utilisez cette fonction pour crypter / décrypter les messages en anglais.
«219 --Character code» semble vouloir dire quelque chose comme ça.
Le code de caractère de a est 97, et si 219 --97 = 122 est défini dans ce cryptage, le code de caractère devient 122, qui est z.
Le code de caractère de z est 122, et si 219 --122 = 97 est défini dans ce cryptage, le code de caractère 97 est a.
En d'autres termes, il s'agit d'un cryptage qui remplace les lettres romaines inférieures de a à z dans l'ordre inverse de z à a.
Utilisez la fonction intégrée chr
pour contrôler le code de caractère.
Je me demandais s'il fallait utiliser la notation d'inclusion, mais je l'ai arrêtée car il semble gênant d'avoir join
en dernier.
python:008.Cryptogramme.ipynb
def cipher(sentence):
result = ''
for char in sentence:
if char.islower():
result += chr(219-ord(char))
else:
result += char
return result
print(cipher('I Am An Idiot'))
Résultat de sortie du terminal
I An Am Iwrlg
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.
C'est un phénomène que certains mots d'une phrase peuvent être lus correctement même si l'ordre autre que la première et la dernière lettre est changé.
Je vois, vous pouvez le lire d'une manière ou d'une autre. Les caractères sont réorganisés à l'aide de la fonction «shuffle» du paquet «random».
python:009.Typoglycemia.ipynb
from random import shuffle
def typoglycemia(word):
mid_chars = list(word[1:-1])
shuffle(mid_chars)
return word[0] + ''.join(mid_chars) + word[-1]
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
' '.join([word if len(word) <= 4 else typoglycemia(word) for word in sentence.split(' ')])
Résultat de sortie du terminal
"I cul'dnot beilvee that I culod altualcy udnnrseatd what I was riadeng : the paemhnenol peowr of the hmuan mind ."
Recommended Posts