http://www.cl.ecei.tohoku.ac.jp/nlp100/ A été renouvelé, et il semble que la version 2015 soit sortie.
J'ai essayé d'utiliser mon python préféré (série 2). Je sais qu'il y a beaucoup d'articles similaires, mais (et je vois) http://qiita.com/tanaka0325/items/08831b96b684d7ecb2f7 Il est également ouvert au public sous forme de mémo de votre progression + partage. Si vous avez des suggestions, merci.
Je veux continuer après le chapitre 2 ... "Réhabilitation" n'a de sens que si elle continue!
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).
Honnêtement
text = "stressed"
text_reverse = ""
n = len(text)
for i in xrange(n):
text_reverse += text[n-i-1]
print text_reverse
#>>> desserts
Allez de la fin au début honnêtement en utilisant des indices. Cela fonctionne également lorsque text = "".
édition révisée
text = "stressed"
n = len(text)
text_reverse_list = [text[n-i-1] for i in xrange(n)]
text_reverse = ''.join(text_reverse_list)
print text_reverse
#>>> desserts
Post-scriptum: Il semble que la connexion à une chaîne de caractères avec une boucle for ne soit pas bonne en termes de vitesse d'exécution et de mémoire. Donc, je me suis référé à la méthode de "création d'une liste de chaînes de caractères → connexion avec jointure".
tranche
text = "stressed"
text_reverse = text[::-1]
print text_reverse
#>>> desserts
Simple avec des tranches. Objet chaîne [Index de début: Index de fin: Étape]
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.
python
text = u"Patatoku Kashii"
text_concat = text[0] + text[2] + text[4] + text[6]
print text_concat
#>>>Voiture Pat
J'ai donné la chaîne de caractères comme unicode.
python
text = u"Patatoku Kashii"
text_concat = text[::2]
print text_concat
#>>>Voiture Pat
Je vois, pouvez-vous faire la même chose avec des tranches?
Récupérez la chaîne de caractères "Patatokukashi" en reliant alternativement les caractères "Pattocar" + "Tax" depuis le début.
python
text1 = u"Voiture Pat"
text2 = u"Taxi"
text_concat = ""
m = len(text1)
n = len(text2)
for i in xrange(m):
if i<n:
text_concat += text1[i] + text2[i]
if i == m-1:
text_concat += text2[i+1:]
else:
text_concat += text1[i:]
break
print text_concat
#>>>Patatoku Kashii
Regardons les deux chaînes depuis le début. Ce problème n'est pas un problème direct, Prenons le cas où text1 et text2 ne sont pas de la même longueur (m! = N). A ce moment, quand on a fini, L'autre a décidé de concaténer les chaînes suivantes.
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."
python
sentence = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
word_length = [len(x.strip(',.')) for x in sentence.split()]
print word_length
#>>> [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
J'aime le python parce qu'il peut être intelligemment en une seule ligne comme celui-ci.
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 la paix. Arthur King Can." 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.
python
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
word_list = [x.strip(',.') for x in sentence.split()]
word_dict = dict()
specified = [1, 5, 6, 7, 8, 9, 15, 16, 19]
for i, word in enumerate(word_list):
if i in [x-1 for x in specified]:
word_dict[word[:1]] = i+1
else:
word_dict[word[:2]] = i+1
print word_dict
#>>> {'Be': 4, 'C': 6, 'B': 5, 'Ca': 20, 'F': 9, 'S': 16, 'H': 1, 'K': 19, 'Al': 13, 'Mi': 12, 'Ne': 10, 'O': 8, 'Li': 3, 'P': 15, 'Si': 14, 'Ar': 18, 'Na': 11, 'N': 7, 'Cl': 17, 'He': 2}
print word_dict['Be']
#>>> 4
J'ai mis i + 1 dans word_dict pour le rendre cohérent avec le "th" donné dans le problème. Eh bien, j'ai remarqué après l'avoir résolu, mais ai-je obtenu le "numéro atomique, c'est-à-dire le nombre de protons"? "Suihe, Ribe, ma fune" me manque.
Je me demande si le magnésium est «Mg»?
python
'Mi': 12
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".
python
def n_gram(sentence_str, n, type):
result = set()
if type == 'word':
words = [x.strip(',.') for x in sentence_str.split()]
elif type == 'letter':
words = sentence_str
m = len(words)
for i in xrange(m-n+1):
result.add(tuple(words[i:i+n]))
return result
#Si vous souhaitez également des informations de fréquence
from collections import defaultdict
def n_gram_freq(sentence_str, n, type):
result = defaultdict(int)
if type == 'word':
words = [x.strip(',.') for x in sentence_str.split()]
elif type == 'letter':
words = sentence_str
m = len(words)
for i in xrange(m-n+1):
result[tuple(words[i:i+n])] += 1
return result
sentence_str = "I am an NLPer"
#sentence_list = ['I', 'am', 'an', 'NLPer']
print n_gram(sentence_str, 2, 'word')
#>>> set([('am', 'an'), ('an', 'NLPer'), ('I', 'am')])
print n_gram(sentence_str, 2, 'letter')
#>>> set([('N', 'L'), ('m', ' '), ('e', 'r'), ('a', 'n'), ('I', ' '), ('n', ' '), ('L', 'P'), (' ', 'N'), (' ', 'a'), ('a', 'm'), ('P', 'e')])
print n_gram_freq(sentence_str, 2, 'word')
#>>> defaultdict(<type 'int'>, {('am', 'an'): 1, ('an', 'NLPer'): 1, ('I', 'am'): 1})
print n_gram_freq(sentence_str, 2, 'letter')
#>>>defaultdict(<type 'int'>, {('N', 'L'): 1, ('m', ' '): 1, ('e', 'r'): 1, ('a', 'n'): 1, ('I', ' '): 1, ('n', ' '): 1, ('L', 'P'): 1, (' ', 'N'): 1, (' ', 'a'): 2, ('a', 'm'): 1, ('P', 'e'): 1})
Prenez une chaîne comme argument. Vous permet de sélectionner le mot n-gramme et le caractère n-gramme avec un autre type d'argument.
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.
python
str_x = "paraparaparadise"
str_y = "paragraph"
X = n_gram(str_x, 2, 'letter')
Y = n_gram(str_y, 2, 'letter')
print X.union(Y) #Ensemble de somme. X|Synonyme de Y
#>>>set([('g', 'r'), ('p', 'h'), ('p', 'a'), ('s', 'e'), ('a', 'p'), ('a', 'g'), ('a', 'd'), ('i', 's'), ('r', 'a'), ('a', 'r'), ('d', 'i')])
print X.intersection(Y) #Ensemble de produits. X&Synonyme de Y
#>>>set([('a', 'p'), ('r', 'a'), ('p', 'a'), ('a', 'r')])
print X.difference(Y) #Ensemble de différences. X-Synonyme de Y
#>>>set([('a', 'd'), ('s', 'e'), ('d', 'i'), ('i', 's')])
tuple('se') in X
#>>> True
tuple('se') in Y
#>>> False
Utilisez la fonction définie dans la question précédente. Dans la définition de la fonction, le «se» donné est converti en tuple et la condition est jugée.
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.
python
from string import Template
def generate_sentence(x,y,z):
t = Template("${x_tmpl}de temps${y_tmpl}Est${z_tmpl}")
return t.safe_substitute(x_tmpl=x, y_tmpl=y, z_tmpl=z)
def generate_sentence_incomplete(x,y,z):
t = Template("${x_tmpl}de temps${y_tmpl}Est${z_tmpl}")
return t.safe_substitute(x_tmpl=x, y_tmpl=y)
x, y, z =12, "Température", 22.4
print generate_sentence(x,y,z)
#>>>La température à 12 heures est de 22.4
print generate_sentence_incomplete(x,y,z)
#>>>La température à 12 heures${z_tmpl}
Depuis que j'ai utilisé Template.safe_substitute () http://docs.python.jp/2/library/string.html#string.Template.safe_substitute
Identique à substitute (), mais au lieu de lancer une exception KeyError, l'espace réservé d'origine est inclus tel quel si le mappage ou kws ne trouve pas d'espace réservé correspondant.
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 Afficher les autres caractères tels quels Utilisez cette fonction pour crypter / décrypter les messages en anglais.
python
def cipher(input_str):
result = ""
for letter in input_str:
#Si c'est en lettres minuscules
if letter.isalpha() and letter.islower():
result += chr(219-ord(letter))
else:
result += letter
return result
english_message = "This is a pen."
#chiffrement
print cipher(english_message)
#>>> Tsrh rh z kvm.
#Décryptage
print cipher(cipher(english_message))
#>>> This is a pen.
Je ne connaissais pas ce sujet, mais il semble s'appeler le code Atbash. http://www.mitsubishielectric.co.jp/security/learn/info/misty/stage1.html
Le code était également utilisé dans l'Ancien Testament. L'un d'eux est le code de translittération hébreu Atbash. Ce code est créé en numérotant les caractères et en échangeant l'ordre du début et l'ordre de la fin. Si vous souhaitez crypter les 26 lettres de l'alphabet, changez l'ordre de A à Z, B à Y, et ainsi de suite.
C'est pourquoi le cryptage et le décryptage peuvent être réalisés avec la même fonction. (Vous pouvez obtenir la chaîne d'origine en appliquant la même fonction deux fois).
Cliquez ici pour les fonctions intégrées utilisées.
Fonctions intégrées
str.isalpha()
str.islower()
ord()
chr()
unichr()
# http://docs.python.jp/2.6/library/functions.html#ord
# http://docs.python.jp/2.6/library/functions.html#chr
# http://docs.python.jp/2.6/library/functions.html#unichr
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.
python
import random
def random_shuffled_str(input_str):
input_list = list(input_str)
random.shuffle(input_list)
result = ''.join(input_list)
return result
def typoglycemia(sentence):
str_list = sentence.split()
result_list = [x[0]+ random_shuffled_str(x[1:-1]) +x[-1] if len(x) > 4 else x for x in str_list]
return ' '.join(result_list)
message = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print typoglycemia(message)
#>>> I cunl'dot beveile that I cloud aallucty unsrndtead what I was rdaineg : the phaenmneol pweor of the huamn mind .
print typoglycemia(message)
#>>> I cu'dolnt bivelee that I cloud aculltay udetnnasrd what I was ridneag : the pheonaenml peowr of the hamun mind .
Lorsque vous souhaitez utiliser else dans la notation d'inclusion de la liste
python
if len(x) > 4 else x
Je vais l'amener à cette position ... Et aléatoire.shuffle.
http://docs.python.jp/2/library/random.html
random.shuffle(x[, random]) Mélanger la séquence x par modification directe. L'argument optionnel random est une fonction qui n'a pas d'arguments qui renvoient un nombre à virgule flottante aléatoire avec une plage de [0.0, 1.0); par défaut, cette fonction est random ().
Notez que même avec un len (x) assez petit, la séquence de x sera plus grande que la période de la plupart des générateurs aléatoires; cela signifie que la plupart des séquences ne seront pas générées pour de longues séquences. Veux dire
Recommended Posts