Ceci est le premier chapitre de Knock 100 Language Processing.
L'environnement est Windows 10, python 3.6.0. J'ai fait référence à ici.
Obtenez une chaîne avec les lettres «accentuées» inversées.
# coding: utf-8
target = "stressed"
new_target = target[::-1]
print(new_target)
desserts
la valeur par défaut est 0,8 lorsque le pas est positif, 8,0 lorsque le pas est négatif
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.
# coding: utf-8
word = "Patatoku Kashii"
new_word = word[::2]
print(new_word)
Voiture Pat
** N'oubliez pas. ** **
Récupérez la chaîne de caractères "Patatokukashi" en reliant alternativement les caractères "Pattocar" + "Taxi" depuis le début.
# cording utf-8
word1 = u"Voiture Pat"
word2 = u"Taxi"
mix_word = ""
for w1,w2 in zip (word1,word2):
mix_word += w1 + w2
print(mix_word)
Patatoku Kashii
--Zip pour s'adapter au plus long
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2)
print(list(zipped))
[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', None), ('5', None)]
--Définissez la valeur sur autre chose que None
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2,fillvalue = False )
print(list(zipped))
[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', False), ('5', False)]
--Si vous zippez à nouveau (), il reviendra à l'original.
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2,fillvalue = False )
zipped_list = list(zipped)
zizipped = zip(zipped_list[0],zipped_list[1],zipped_list[2],zipped_list[3],zipped_list[4])
print(list(zizipped))
[('1', '2', '3', '4', '5'), ('a', 'b', 'c', False, False)]
-Ver en utilisant *
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2,fillvalue = False )
zipped_list = list(zipped)
zizipped = zip(*zipped_list)
print(list(zizipped))
[('1', '2', '3', '4', '5'), ('a', 'b', 'c', False, False)]
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.
words = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = []
new_words = words.translate(str.maketrans("","",",."))
for word in new_words.split(' '):
word_length = len(word)
result.append(word_length)
print(result)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
strip supprime la chaîne spécifiée des deux extrémités.
str.translate(str.maketrans("","",".,"))
Les 1er → 2ème et 3ème facteurs sont les chaînes de caractères que vous souhaitez supprimer.
words = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = [len(word.strip(",.")) for word in words.split(" ")]
print(result)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
import re
words = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = [len(word) for word in (re.sub(r"[,.]","",words).split(" "))]
print(result)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
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.
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
words = [word.strip(',.') for word in sentence.split()]
dic = {word[0]:words.index(word) + 1 for word in words if words.index(word) in (0,4,5,6,7,8,14,15,18)}
dic.update({word[:2]:words.index(word) + 1 for word in words if words.index(word) not in (0,4,5,6,7,8,14,15,18)})
print(dic)
{'H': 1, 'B': 5, 'C': 6, 'N': 7, 'O': 8, 'F': 9, 'P': 15, 'S': 16, 'K': 19, 'He': 2, 'Li': 3, 'Be': 4, 'Ne': 10, 'Na': 11, 'Mi': 12, 'Al': 13, 'Si': 14, 'Cl': 17, 'Ar': 18, 'Ca': 20}
--Une autre solution 1
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
words = [word.strip(',.') for word in sentence.split()]
link = {}
for i,v in enumerate(words,1):
length = 1 if i in [1,5,6,7,8,9,15,16,19] else 2
link.update({v[:length]:i})
print(link)
{'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}
--Une autre solution 2
sentence ="Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
#Premier personnage(Ou 2 lettres)Et créez un dictionnaire qui associe l'index de ce mot
link = {w[:2-(i in (1,5,6,7,8,9,15,16,19))]:i for i,w in enumerate(sentence.split(),1)}
print(link)
{'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}
Utilisation de la valeur booléenne True = 1 False = 0
import re
sentence_string = "I am an NLPer"
sentence_list = sentence_string.split()
def n_gram(sequence,n):
u"""Caractère bi lorsqu'il est passé sous forme de chaîne-gram,Le mot bi lorsqu'il est passé sous forme de liste-Traité comme un gramme.
"""
result = []
if isinstance(sequence,str):
sequence = list(re.sub("[,. ]","",sequence))
for i in range(len(sequence)- n+1):
result.append('-'.join(sequence[i:i+n]))
return result
print(n_gram(sentence_string,2))
print(n_gram(sentence_list,2))
['I-a', 'a-m', 'm-a', 'a-n', 'n-N', 'N-L', 'L-P', 'P-e', 'e-r']
['I-am', 'am-an', 'an-NLPer']
import re
sentence_string = "I am an NLPer"
sentence_list = sentence_string.split()
def n_gram(sequence, n):
u"""Caractère bi lorsqu'il est passé sous forme de chaîne-gram,Le mot bi lorsqu'il est passé sous forme de liste-Traité comme un gramme.
"""
if isinstance(sequence, str):
sequence = list(re.sub("[,. ]", "", sequence))
return ['-'.join(sequence[i:i+n])
for i in range(len(sequence) - n + 1)]
print(n_gram(sentence_string, 2))
print(n_gram(sentence_list, 2))
Vous pouvez utiliser la notation d'inclusion. ..
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.
import re
X = "paraparaparadise"
Y = "paragraph"
def n_gram(sequence,n):
result = []
if isinstance(sequence,str):
sequence = list(re.sub("[,. ]","",sequence))
for i in range(len(sequence)- n+1):
result.append('-'.join(sequence[i:i+n]))
return result
X = (set(n_gram(X,2)))
Y = (set(n_gram(Y,2)))
print("X:",X)
print("Y:",Y)
print("Ensemble de somme:",X | Y)
print("Ensemble de produits:",X & Y)
print("Jeu de différences 1:",X - Y)
print("Jeu de différences 2:",Y - X)
if 's-e' in X:
print('se est inclus dans X')
if 's-e' in Y:
print('se est inclus dans Y')
X: {'a-d', 'a-r', 'r-a', 'i-s', 's-e', 'd-i', 'p-a', 'a-p'}
Y: {'a-r', 'r-a', 'p-h', 'g-r', 'a-g', 'p-a', 'a-p'}
Ensemble de somme: {'a-r', 'i-s', 'p-a', 'a-p', 'a-d', 'r-a', 'p-h', 'g-r ',' s-e ',' d-i ',' a-g '} Ensemble de produits: {'p-a', 'a-p', 'a-r', 'r-a'} Ensemble de différences 1: {'a-d', 'd-i', 's-e', 'i-s'} Jeu de différences 2: {'a-g', 'g-r', 'p-h'} se est inclus dans X
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.
def make_sentence(x,y,z):
print(u"{0}de temps{1}Est{2}".format(x,y,z))
make_sentence(x = 12,y = "Température",z = 22.4)
La température à 12h00 est de 22,4
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
import re
pat = re.compile(u"[a-z]")
def cipher(string):
return ''.join(chr(219-ord(c)) if pat.match(c) else c for c in string)
if __name__ == "__main__":
sentence = u"Hello world!"
ciphertext = cipher(sentence)
print(sentence)
print(ciphertext)
print(cipher(ciphertext))
re.compile('[a-z]')
Hello world!
Hvool dliow!
Hello world!
--Version d'expression régulière sans utilisation (de shiracamus)
def cipher(string):
return ''.join(chr(219 - ord(c)) if c.islower() else c for c in string)
if __name__ == "__main__":
sentence = u"Hello world!"
ciphertext = cipher(sentence)
print(sentence)
print(ciphertext)
print(cipher(ciphertext))
Vous pouvez utiliser str.islower (). str.islower () semble être «True» même s'il s'agit d'une chaîne de caractères qui n'est pas sensible à la casse.
chr(i) Renvoie une chaîne qui représente un caractère dont le point de code Unicode est l'entier i. Par exemple, chr (97) renvoie la chaîne «a» et chr (8364) renvoie la chaîne «€». Le contraire de ord ().
La plage valide d'arguments est comprise entre 0 et 1 114 111 (0 x 10FFFF en hexadécimal). ValueError est déclenché si i est hors de portée.
from random import shuffle
def change_order(sentence):
produced_word_list = []
word_list = sentence.split(' ')
for word in word_list:
if len(word) <= 4:
produced_word_list.append(word)
else:
middle = list(word[1:-1])
shuffle(middle)
produced_word = word[0] + ''.join(middle) + word[-1]
produced_word_list.append(produced_word)
return ' '.join(produced_word_list)
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print(change_order(sentence))
I cnud'olt bvieele that I cluod aucltaly uestradnnd what I was reading : the pnemonaehl power of the huamn mind .
--Une autre solution
import random
def change_order(sentence):
produced_word_list = []
word_list = sentence.split(' ')
for word in word_list:
if len(word) <= 4:
produced_word_list.append(word)
else:
middle_list = list(word[1:-1])
new_middle = ''
while len(middle_list) > 0:
rnd = random.randint(0,len(middle_list)-1)
new_middle += middle_list.pop(rnd)
new_word = word[0] + new_middle + word[-1]
produced_word_list.append(new_word)
return ' '.join(produced_word_list)
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print(change_order(sentence))
I cl'oundt beevile that I culod aauctlly unnetdarsd what I was rdeaing : the pneoenhaml peowr of the haumn mind .
import random
def change_order(sentence):
def produced_words():
word_list = sentence.split()
for word in word_list:
if len(word) <= 4:
yield word
else:
middle = list(word[1:-1])
random.shuffle(middle)
yield word[0] + ''.join(middle) + word[-1]
return ' '.join(produced_words())
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print(change_order(sentence))
Je n'étais seulement pas bon en générateurs, mais comme c'était un gros problème, Classes and Itterators - Plongez dans la version japonaise de Python 3 Itérateur Python J'ai essayé de comprendre en référence à. ..
Le générateur est
Est-il correct de reconnaître que l'instruction for contient les méthodes next ()
et ʻiter () et appelle les méthodes
iter,
nextdans la fonction de générateur (?)? .. L'objet itérateur a deux méthodes, La méthode
iter se renvoie elle-même et la méthode
next` renvoie l'élément suivant.
Note de Classes and Iterators-Dive into Python 3 Japanese Version
>>> import plural6
>>> r1 = plural6.LazyRules()
>>> r2 = plural6.LazyRules()
>>> r1.rules_filename ①
'plural6-rules.txt'
>>> r2.rules_filename
'plural6-rules.txt'
>>> r2.rules_filename = 'r2-override.txt' ②
>>> r2.rules_filename
'r2-override.txt'
>>> r1.rules_filename
'plural6-rules.txt'
>>> r2.__class__.rules_filename ③
'plural6-rules.txt'
>>> r2.__class__.rules_filename = 'papayawhip.txt' ④
>>> r1.rules_filename
'papayawhip.txt'
>>> r2.rules_filename ⑤
'r2-overridetxt'
(1) Chaque instance de cette classe hérite de l'attribut nom_fichier_règles dont la valeur est définie dans la classe. (2) La modification de la valeur d'attribut d'une instance n'affecte pas la valeur d'attribut des autres instances ... ③ …… Ne modifiez pas les attributs de classe. Vous pouvez faire référence aux attributs de classe (plutôt qu'aux attributs d'instances individuelles) en utilisant l'attribut spécial class pour accéder à la classe elle-même. (4) Lorsque l'attribut de classe est modifié, l'instance (r1 dans ce cas) qui hérite toujours de la valeur est affectée. ⑤ L'instance qui écrase l'attribut (r2 dans ce cas) n'est pas affectée.
Les instances individuelles et les instances de classe sont différentes.
sample1.py
class MyIterator(object):
def __init__(self, *numbers):
self._numbers = numbers
self._i = 0
def __iter__(self):
# next()Est implémenté par soi-même, donc il renvoie soi-même
return self
def next(self):
if self._i == len(self._numbers):
raise StopIteration()
value = self._numbers[self._i]
self._i += 1
return value
my_iterator = MyIterator(10, 20, 30)
for num in my_iterator:
print 'hello %d' % num
sample2.py
class Fib:
'''iterator that yields numbers in the Fibonacci sequence'''
def __init__(self, max):
self.max = max
def __iter__(self):
self.a = 0
self.b = 1
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
Pourquoi y a-t-il un cas où «next» est une méthode spéciale «next» et un cas où c'est une méthode normale «next» dans la classe?
Le __next__
dans la classe est appelé à partir de la méthode externenext
, tandis que le suivant
dans la classe est exécuté dans la classe (?)
Je ne comprends pas.
Recommended Posts