[Programmer newcomer "100 language processing knock 2020"] Résoudre le chapitre 2 [Première moitié: 10 ~ 15]

introduction

En me promenant sur le net, je suis soudainement tombé sur un site appelé "Language Processing 100 Knock 2020". Alors que je voulais toucher au traitement du langage naturel, la programmation était un nouveau venu pour un programmeur qui faisait un petit concours. Je suis un peu intéressé, alors je vais essayer. Au moment de la rédaction de cet article, seule la moitié du total est terminée, mais je vais l'écrire dans un sens commémoratif. J'arrêterai si mon cœur se brise. Veuillez deviner s'il n'y a pas d'article précédent.

Environnement et position

environnement

position

J'essaierai d'écrire un commentaire autant que possible, mais si vous êtes intéressé, je vous recommande de le vérifier.

Jusqu'à présent avec Dernière fois.

Résoudre le "Chapitre 2: Commandes UNIX"

La citation suivante est tirée de ici

popular-names.txt est un fichier qui stocke le «nom», le «sexe», le «nombre de personnes» et «l'année» d'un bébé né aux États-Unis dans un format délimité par des tabulations. Créez un programme qui effectue le traitement suivant et exécutez popular-names.txt en tant que fichier d'entrée. De plus, exécutez le même processus avec une commande UNIX et vérifiez le résultat de l'exécution du programme.

Ce n'est pas un problème de faire la même chose avec les commandes UNIX. (Est-ce que ça va)

10. Compter le nombre de lignes

Comptez le nombre de lignes. Utilisez la commande wc pour confirmation.

10.py


with open("popular-names.txt") as f:
    print(len(f.readlines()))

Terminal


2780

with open () as ~ ne vous oblige pas à utiliser close (), contrairement à l'utilisation de ʻopen () seul. Une fois le retrait terminé, il se fermera sans autorisation. readlines ()` est une fonction qui renvoie le fichier entier sous forme de liste séparée par des sauts de ligne.

11. Remplacez les onglets par des espaces

Remplacez chaque caractère de tabulation par un caractère d'espace. Utilisez la commande sed, la commande tr ou la commande expand pour confirmation.

11.py


from functools import reduce

with open("popular-names.txt") as f:
    print(reduce(lambda a, b: (a+b).replace("\t", " "), f.readlines()))

Terminal


Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
・
・

Code golf est toujours en cours ... (une perte d'effort). Le résultat est si long que ce n'est que le début. reduction () est une fonction d'ordre supérieur comme map (). Vous pouvez adapter la fonction à quelque chose d'itérable. C'est une fonction pratique pour trouver la somme.

12. Enregistrez la première colonne dans col1.txt et la deuxième colonne dans col2.txt

12.py


with open("popular-names.txt") as a,\
        open("col1.txt", mode="w") as b,\
        open("col2.txt", mode="w") as c:
    for l in a.readlines():
        x, y, *z = l.split("\t")
        b.write(x+"\n")
        c.write(y+"\n")

col1.txt


Mary
Anna
Emma
Elizabeth
・
・

col2.txt


F
F
F
F
・
・

Vous pouvez connecter plusieurs avec open (). Puisqu'il semblait long horizontalement, j'ai utilisé \ pour casser la ligne. Pour x, y, * z =, la première valeur de retour est dans x, la seconde dans y et le reste dans z. Tout ce que vous avez à faire est d'écrire ce dont vous avez besoin dans le fichier.

13. Fusionnez col1.txt et col2.txt

Combinez col1.txt et col2.txt créés dans> 12 pour créer un fichier texte dans lequel les première et deuxième colonnes du fichier d'origine sont séparées par des tabulations. Utilisez la commande coller pour confirmation.

13.py


with open("marge.txt", mode="w") as a,\
        open("col1.txt") as b,\
        open("col2.txt") as c:
    for x, y in zip(b.readlines(), c.readlines()):
        a.write(x[:-1]+" "+y)

marge.txt


Mary F
Anna F
Emma F
Elizabeth F
・
・

zip () est une fonction qui peut obtenir les éléments de plusieurs listes à la fois. Les deux éléments ont un saut de ligne à la fin, donc «x» supprime le dernier caractère.

(Je n'écris plus ...)

14. Sortie de N lignes depuis le début

Recevoir le nombre naturel N au moyen d'un argument de ligne de commande et n'afficher que les N premières lignes de l'entrée. Utilisez la commande head pour confirmation.

14.py


import sys
from functools import reduce

with open(sys.argv[2]) as f:
    S = f.readlines()
    print(reduce(lambda a, b: a+b, S[:min(len(S), int(sys.argv[1]))]),
          end="")

Non ... réduire () est pratique ... sys.argv contient la chaîne saisie sur la ligne de commande, y compris" filename.py ". Il vous permet d'utiliser des arguments de ligne de commande.

15. Sortez les N dernières lignes

Recevoir le nombre naturel N au moyen d'un argument de ligne de commande et n'afficher que les N dernières lignes de l'entrée. Utilisez la commande tail pour confirmation.

15.py


import sys
from functools import reduce

with open(sys.argv[2]) as f:
    S = f.readlines()
    print(reduce(lambda a, b: a+b, S[max(0, len(S)-int(sys.argv[1])):]),
          end="")

C'est une rediffusion de ce qui était la 14e question. J'utilise max () pour éviter le dépassement, car j'ai du mal à recevoir plus de demandes que le nombre de lignes dans le fichier.

en conclusion

Cette fois, je n'avais pas beaucoup de matériel (pas intéressant), mais comment était-ce? Le commentaire a probablement augmenté. Plus le est attaché, plus il est devenu un manuel, mais j'espère que ce sera l'une des réponses à 100 coups de langue. Il y a beaucoup d'articles à ce sujet, alors jetez un œil si vous êtes intéressé.

Rendez-vous dans le prochain article, Chapitre 2, Partie 2. Si vous avez des idées pour raccourcir le code, veuillez commenter.

Eh bien.

Recommended Posts

[Programmer newcomer "100 language processing knock 2020"] Résoudre le chapitre 2 [Première moitié: 10 ~ 15]
[Programmeur nouveau venu "100 language processing knock 2020"] Résoudre le chapitre 1
100 points de traitement du langage naturel Chapitre 2 Bases des commandes UNIX (première moitié)
100 Traitement du langage Knock Chapitre 1
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
100 traitements du langage naturel frappent Chapitre 4 Analyse morphologique (première moitié)
100 coups au traitement du langage naturel Chapitre 1 Mouvement préparatoire (première moitié)
100 traitements du langage naturel frappent Chapitre 3 Expressions régulières (première moitié)
100 points de traitement du langage naturel Chapitre 5 Analyse des dépendances (premier semestre)
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 traitements de langage avec Python
100 Language Processing Knock Chapitre 1 en Python
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 traitements de langage avec Python (chapitre 3)
100 Language Processing Knock 2020 Chapitre 6: Apprentissage automatique
100 Traitement du langage Knock Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 10: Traduction automatique (90-98)
100 Language Processing Knock 2020 Chapitre 5: Analyse des dépendances
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
100 Language Processing Knock 2020 Chapitre 8: Neural Net
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
100 Language Processing Knock 2020 Chapitre 1: Mouvement préparatoire
100 Language Processing Knock Chapitre 1 par Python
100 Language Processing Knock 2020 Chapitre 3: Expressions régulières
100 Language Processing Knock 2015 Chapitre 4 Analyse morphologique (30-39)
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 4
Réhabilitation des compétences Python et PNL à partir de "100 Language Processing Knock 2015" (Chapitre 2 premier semestre)
J'ai fait 100 traitements linguistiques Knock 2020 avec GiNZA v3.1 Chapitre 4
100 coups de traitement linguistique (2020): 28
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 10 à 14]
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
100 coups de traitement linguistique (2020): 38
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 15-19]
100 traitement de la langue frapper 00 ~ 02
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 coups de traitement du langage amateur: 17
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
100 Traitement du langage Knock-52: Stemming
100 coups de traitement du langage ~ Chapitre 1
100 coups de langue amateur: 07
Le traitement de 100 langues frappe le chapitre 2 (10 ~ 19)
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
100 traitements du langage naturel frappent Chapitre 3 Expressions régulières (seconde moitié)
100 traitements du langage naturel frappent Chapitre 6 Traitement de texte en anglais (seconde moitié)
Le traitement du langage naturel à 100 coups
Réhabilitation des compétences Python et PNL à partir de «Knock 100 Language Processing 2015» (chapitre 2 deuxième semestre)
100 coups de traitement du langage avec Python 2015
100 traitement du langage Knock-51: découpage de mots