100 coups de traitement du langage avec Python 2015

Je vais faire "100 Language Processing Knock 2015" pour étudier les programmes et Python! http://www.cl.ecei.tohoku.ac.jp/nlp100/

Pour le moment, je pense à le mettre à jour un par un. (Peut-être que ce sera assez lent ...) Je vais le mettre à jour sur GitHub un par un.

règle

Tout d'abord, mettez le code que vous avez écrit vous-même. Après cela, je vais chercher et publier le style d'écriture que je pensais être meilleur.

Chapitre 1: Mouvement préparatoire

00. Ordre inverse des chaînes

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).

Mon code

Je pense qu'il y a un moyen court de l'écrire, Je ne pouvais pas y penser car j'étais trop inexpérimenté, alors j'ai décidé d'utiliser une méthode très boueuse ...

knock000.py


s = "stressed"

def reverse(s: str) -> str:
	list = []

	for char in s:
		list.insert(0, char)

	return "".join(list)

print(reverse(s))

Le code que j'ai recherché

python


s = "stressed"
print(s[::-1])

Il semble que je puisse l'écrire si brièvement. .. ..

Examen des tranches de chaîne

python


str = "I have a dream!"

#Str de base[la première:dernier]
str[0:6]
#=> 'I have'

#La spécification peut être omise (si omise, tout ou jusqu'à la fin?)
str[:10]
#=> 'I have a d'

str[3:]
#=> 'ave a dream!'

#Vous pouvez également spécifier le nombre d'étapes str[la première:dernier:Nombre d'étapes]
str[0:12:3]
#=> 'Ia d'

Alors

python


s[::-1]

Cela signifie "du début à la fin un par un de l'opposé" = ordre inverse.

01. «Patatokukashi»

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.

Mon code

Bien que la valeur numérique soit spécifiée directement

knock001.py


s = "Patatoku Kashii"
print(s[0] + s[2] + s[4] + s[6])

Tous sont pairs, donc si vous les tournez en boucle et qu'ils le sont, est-il correct de les écrire de la même manière? ??

Le code que j'ai recherché

Aucun cette fois

Post-scriptum: Je vais l'ajouter parce que vous l'avez souligné dans le commentaire. Comme avec 00., Vous pouvez spécifier le nombre d'étapes et écrire comme suit en tranches.

python


s = "Patatoku Kashii"
print(s[::2])

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

Récupérez la chaîne de caractères "Patatokukashi" en reliant alternativement les caractères "Pattocar" + "Tax" depuis le début.

Mon code

knock002.py


s1 = "Voiture Pat"
s2 = "Taxi"
s3 = ""

for i in range(len(s1)):
    s3 = s3 + s1[i] + s2[i]

print(s3)

J'ai l'impression que l'argument len (s1) de range n'est pas cool. Puisque la chaîne de caractères donnée a le même nombre de caractères, cela ne pose pas de problème.

Le code que j'ai recherché

Aucun cette fois (Je pense que cette méthode n'est pas bonne, donc je ne définirai cet élément que s'il y a quelque chose que j'ai vérifié.)

Post-scriptum: Il semble que vous puissiez utiliser la fonction zip à len (s1)

python


for char1, char2 in zip(s1, s2):
    s3 = s3 + char1 + char2

La fonction zip traite plusieurs arguments dans une boucle en même temps.

Addendum Addendum: Vous l'avez souligné dans les commentaires.

python


for char1, char2 in zip(s1, s2):
    s3 = s3 + char1 + char2

Si vous connectez les chaînes de caractères comme ci-dessus, cela sera lent car une nouvelle mémoire sera allouée à chaque fois que la boucle tournera. Il semble donc préférable de faire une liste de chaînes de caractères, puis de la frotter avec une jointure à la fin.

Ce que tu m'as appris ci-dessous

python


print(''.join([char1 + char2 for char1, char2 in zip(s1, s2)]))

03. Taux circonférentiel

Mon code

Décomposez la phrase «Maintenant j'ai besoin d'un verre, alcoolique bien sûr, après les lourdes conférences de mécanique quantique.» En mots, et créez une liste du nombre de caractères (alphabétiques) de chaque mot par ordre d'apparition.

python


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

words = s.split(" ")
char_count = []

for word in words:
    char_count.append(len(word))

print(char_count)

Post-scriptum: Vous l'avez souligné dans les commentaires. Il semble que vous puissiez écrire de manière concise si vous utilisez la notation d'inclusion de liste Et comme la fonction par défaut de la fonction de fractionnement est vide, il semble que vous n'ayez pas à spécifier le vide un par un. De plus, il semble que vous deviez supprimer, et. .. ..

Je vais lister ce que vous m'avez dit dans les commentaires ci-dessous Cependant, il semble que les spécifications par traduction aient changé dans python3.4, donc je l'ai réécrit comme suit

python


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

print([len(word.translate(word.maketrans({".":None,",":None}))) for word in s.split()])

Je ne peux pas bien l'écrire, donc une autre méthode consiste à spécifier une expression régulière et à la remplacer (supprimer cette fois).

python


import re

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

pat = re.compile('[.,]')
print([len(pat.sub('', word)) for word in s.split()])

04. Symbole d'élément

Casser 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." 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.

Mon code

python


s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."

s = s.replace(".", "")
words = s.split(" ")
words_index = {}

for i, word in enumerate(words):
    if i in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
        words_index[word[:1]] = i
    else:
        words_index[word[:2]] = i

print(words_index)

Post-scriptum: J'ai reçu un commentaire indiquant que c'était faux

La version modifiée suivante

python


s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."

s = s.replace(".", "")
words = s.split(" ")
words_index = {}

for i, word in enumerate(words):
    n = i + 1
    if n in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
        words_index[word[:1]] = n
    else:
        words_index[word[:2]] = n

print(words_index)

Après cela, l'affectation de for est redondante, donc la méthode d'écriture suivante donnée dans le commentaire est plus simple

python


for i, word in enumerate(words):
    n = i + 1
    l = 1 if n in (1, 5, 6, 7, 8, 9, 15, 16, 19) else 2
    words_index[word[:l]] = n

Recommended Posts

100 coups de traitement du langage avec Python 2015
100 traitements de langage avec Python
100 traitements de langage avec Python (chapitre 3)
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
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 Chapitre 1 en Python
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)
100 Language Processing Knock Chapitre 1 par Python
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (00 ~ 04)
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
Traitement d'image par Python 100 knock # 10 filtre médian
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 Language Processing Knock 2020 Chapitre 1
J'ai fait 100 traitements linguistiques Knock 2020 avec GiNZA v3.1 Chapitre 4
100 coups de traitement du langage amateur: 17
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
Python: traitement du langage naturel
100 Traitement du langage Knock-52: Stemming
100 Traitement du langage Knock Chapitre 1
100 coups de langue amateur: 07
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
Traitement d'image par Python 100 knock # 12 motion filter
3. Traitement du langage naturel par Python 1-1. Word N-gram
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
Traitement d'image avec Python
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
Traitement du langage 100 knocks-88: 10 mots à haute similitude
Démarrer avec Python avec 100 coups sur le traitement du langage
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
3. Traitement du langage naturel par Python 2-2. Réseau de co-occurrence [mecab-ipadic-NEologd]
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 14-16
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 07-09
Une personne inexpérimentée en Python tente de frapper 100 traitement du langage 10 ~ 13
100 traitement du langage knock-95 (en utilisant des pandas): Note avec WordSimilarity-353
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 05-06
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 00-04
Traitement d'image avec Python (partie 2)
100 traitement du langage Knock-51: découpage de mots
"Traitement Apple" avec OpenCV3 + Python3
100 Language Processing Knock-58: Extraction de Taple
100 Language Processing Knock-57: Analyse des dépendances
Traitement du signal acoustique avec Python (2)
Traitement du signal acoustique avec Python
100 traitement linguistique knock-50: coupure de phrase
Traitement d'image avec Python (partie 1)
Traitement d'image avec Python (3)
100 Language Processing Knock-25: Extraction de modèles
Traitement du langage 100 Knock-87: similitude des mots