Traitement linguistique version 100 knock 2020 a été publié, je vais donc le résoudre à cette occasion. Puisqu'il s'agit d'une démarque de mon cahier jupyter, l'explication est moindre. J'ai également posté sur Qiita ce que je prévoyais de mettre en place sur mon blog et GitHub, en espérant que cela serait utile autant que possible. Je ne peux pas aider les enseignants qui peuvent fournir un matériel pédagogique aussi merveilleux.
Le chapitre 5 et au-delà sera ajouté dès qu'ils seront terminés.
(Corrigé le 15/04/2020) Révisé par @ hi-asano, l'auteur de "100 language processing knock 2020 version release! What has changed?" Fait. J'ajouterai la notation d'inclusion de 04 quand j'aurai le temps.
Obtenez une chaîne avec les caractères de la chaîne "souligné" disposés en sens inverse (de la fin au début).
def reverse_strings(s):
return s[::-1]
print(reverse_strings("stressed"))
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.
def extract_strings(s):
return s[::2]
print(extract_strings("Patatoku Kashii"))
Voiture Pat
Obtenez la chaîne de caractères "Patatokukashi" en reliant alternativement les caractères "Pattocar" + "Tax" depuis le début.
#Ne peut être utilisé qu'avec des chaînes de même longueur
def connect_strings(sone, stwo):
result = "".join(s1+s2 for s1,s2 in zip(sone, stwo))
return result
print(connect_strings("Voiture Pat", "Taxi"))
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."
Le résultat de sortie est le rapport de circonférence.
J'étais incapable de l'écrire proprement, mais j'avais l'intention de le rendre aussi court que possible en supprimant les virgules et les points avec des expressions régulières.
Le nombre de caractères est traité à l'aide de map
sans activer l'instruction for.
import re
def circumference(s):
splited = re.split('\s', re.sub(r'[,.]', '', s))
words_len = list(map(len, splited))
return words_len
sentence = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print(circumference(sentence))
[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. Les nouvelles nations pourraient également signer la clause de sécurité de paix. Arthur King peut." Le 19e mot est le premier caractère, et les autres mots sont les deux premiers caractères, et le tableau associatif (type 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) Créer
Vous devriez pouvoir écrire plus magnifiquement en utilisant la notation zip et inclusion. J'apprécierais que vous me disiez s'il y a un bon moyen. .. ..
def element_symbol(s, number):
out_dict = {}
splited = re.split('\s', s)
for i, w in enumerate(splited, start=1):
if i in number:
out_dict[w[:1]] = i
else :
out_dict[w[:2]] = i
return out_dict
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
only_first_number = [1, 5, 6, 7, 8, 9, 15, 16, 19]
print(element_symbol(sentence, only_first_number))
{'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}
05.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".
Selon le wiki, N-gramme est comme suit
Une méthode pour décomposer la cible de recherche par caractères au lieu de mots et trouver la fréquence d'occurrence comprenant les N-1 caractères suivants. Si la valeur de N est 1, on l'appelle "uni-gramme", si elle vaut 2, on l'appelle "bi-gramme", et si elle vaut 3, on l'appelle "tri-gramme".
~~ Cette fois, j'ai décidé d'implémenter le mot n-gramme et le caractère n-gramme comme fonctions séparées. ~~ Il pourrait être utilisé à des fins générales en séparant les chaînes de caractères données par split
et en les passant sous forme de liste.
def generate_ngram(sentence, N):
return [sentence[i:i+N] for i in range(len(sentence) - N + 1)]
input_text = "I am an NLPer"
print("Mot bi-gram : " + str(generate_ngram(input_text.split(' '), 2)))
print("Personnage bi-gram : " + str(generate_ngram(input_text, 2)))
Mots bi-gramme: [['I', 'am'], ['am', 'an'], ['an', 'NLPer']] Bi-gramme de caractères: ['I', 'a', 'am', 'm', 'a', 'an', 'n', 'N', 'NL', 'LP', 'Pe', 'euh']
Trouvez l'ensemble des bi-grammes de caractères contenus dans "paraparaparadise" et "paragraphe" comme X et Y, respectivement, et trouvez les ensembles de somme, de produit et de différence de X et Y, respectivement. En outre, découvrez si le bi-gram'se' est inclus dans X et Y.
X_text = "paraparaparadise"
Y_text = "paragraph"
X = set(generate_ngram(X_text, 2))
Y = set(generate_ngram(Y_text, 2))
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("Est-ce inclus dans X: " + str('se' in X))
print("Est-ce inclus dans Y: " + str('se' in Y))
Ensemble de somme: {'pa', 'di', 'ph', 'gr', 'is', 'ag', 'ra', 'ad', 'se', 'ap', 'ar'} Ensemble de produits: {'ap', 'pa', 'ra', 'ar'} Ensemble de différences: {'se', 'is', 'di', 'ad'} Est-ce inclus dans X: True Est-ce inclus dans Y: False
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.
Notez que f-string
ne peut pas être utilisé avant python 3.6. Inversement, f-string
n'est pas utilisé dans les articles précédents. Les informations de base sont ici.
def generate_temp(x, y, z):
return f"{x}de temps{y}Est{z}"
print(generate_temp(12, "Température", 22.4))
La température à 12h00 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. ・ S'il est en lettres minuscules, 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.
Il semble que vous puissiez obtenir le point de code Unicode du caractère avec la fonction intégrée ʻord () `, alors j'ai essayé de l'utiliser. Il est rapide à remplacer par une expression régulière car il vous suffit de convertir celle qui correspond aux minuscules.
def chipher(s):
result = ""
for character in s:
result += re.sub(r'[a-z]', chr(219 - ord(character)), character)
return result
sentence = "Hi, Thank you for reading my article!!"
print(chipher(sentence))
print(chipher(chipher(sentence)))
Hr, Tszmp blf uli ivzwrmt nb zigrxov!!
Hi, Thank you for reading my article!!
@ suzu6 a utilisé la formule lambda
pour le résoudre plus joliment. Au contraire, ce n'était pas très bon d'exécuter une boucle for
pour la remplacer par une expression régulière.
Dans l'exemple ci-dessous, m est Match Object et group (https://note.nkmk.me/python-re-match-object-span-group/) est utilisé pour obtenir la chaîne correspondante. )
Doit être utilisé. Obtenez toute la chaîne correspondante avec group (0)
def cipher(src):
return re.sub(r'[a-z]', lambda m: chr(219 - ord(m.group(0))), src)
text = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
#chiffrement
print(cipher(text))
Hr Hv Lrvw Bvxzfhv Blilm Clfow Nlg Ocrwrav Foflirmv. Nvd Nzgrlmh Mrtsg Aohl Srtm Pvzxv Svxfirgb Cozfhv. Aigsfi Krmt Czm.
09.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.
Je pense qu'il aurait été préférable de ne pas utiliser la notation d'inclusion de liste, mais comme c'était juste la bonne longueur pour la pratique, j'ai utilisé la notation d'inclusion de liste. Une phrase qui peut être lue d'une manière ou d'une autre est sortie.
import random
def mixing_word(sentence):
splited = sentence.split(" ")
randomed_list = [ s[0] + ''.join(random.sample(s[1:-1], len(s)-2)) + s[-1] if len(s) >= 4 else s for s in splited]
return " ".join(randomed_list)
input_text = "I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind."
mixing_word(input_text)
'I cndolu’t beveile taht I colud aulltacy unndtserad what I was raednig : the penhaneoml pwoer of the hmuan mdin.'
Je suis une personne biosourcée qui a appris la programmation par moi-même sans faire de professionnels de la compétition, alors j'apprécierais que vous me disiez quelque chose de mal.
Recommended Posts