[PYTHON] Traitement du langage 100 knock-80 (remplacé par une expression régulière): formatage du corpus

Il s'agit de l'enregistrement du 80e «Corpus shaping» de Language processing 100 knock 2015. Enfin, nous sommes arrivés au chapitre 9, "Méthode de l'espace vectoriel (I)". Cette fois, c'est facile car il ne s'agit que d'un remplacement de caractères à l'aide d'expressions régulières dans le système de prétraitement.

Lien de référence

Lien Remarques
080.Mise en forme du corpus.ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:80 Je vous suis toujours redevable de 100 coups de traitement linguistique
100 langues de traitement knock version 2015(80~82) Le chapitre 9 a été utile

environnement

type version Contenu
OS Ubuntu18.04.01 LTS Il fonctionne virtuellement
pyenv 1.2.15 J'utilise pyenv car j'utilise parfois plusieurs environnements Python
Python 3.6.9 python3 sur pyenv.6.J'utilise 9
3.7 ou 3.Il n'y a aucune raison profonde de ne pas utiliser la série 8
Les packages sont gérés à l'aide de venv

Tâche

Chapitre 9: Méthode de l'espace vectoriel (I)

enwiki-20150112-400-r10-105752.txt.bz2 Le texte de 105 752 articles est-il échantillonné au hasard au 1/10 des articles composés d'environ 400 mots ou plus parmi les articles de Wikipedia anglais au 12 janvier 2015, compressé au format bzip2. y a-t-il. En utilisant ce texte comme corpus, je souhaite apprendre un vecteur (expression distribuée) qui exprime le sens d'un mot. Dans la première moitié du chapitre 9, le processus d'apprentissage du vecteur de mot est mis en œuvre en le divisant en plusieurs processus en appliquant l'analyse en composantes principales à la matrice de cooccurrence de contexte de mot créée à partir du corpus. Dans la seconde moitié du chapitre 9, le vecteur de mots (300 dimensions) obtenu par apprentissage est utilisé pour calculer la similitude des mots et analyser (analogique).

Notez que si le problème 83 est implémenté de manière obéissante, une grande quantité (environ 7 Go) de stockage principal sera nécessaire. Si vous manquez de mémoire, créez un processus ou un corpus d'échantillonnage 1/100 enwiki-20150112-400-r100-10576.txt.bz2 Utilisez /nlp100/data/enwiki-20150112-400-r100-10576.txt.bz2).

Cette fois * "Corpus d'échantillonnage 1/100 [enwiki-20150112-400-r100-10576.txt.bz2](http://www.cl.ecei.tohoku.ac.jp/nlp100/data/enwiki-20150112-" 400-r100-10576.txt.bz2) ”* est utilisé.

80. Mise en forme du corpus

Le moyen le plus simple de convertir une phrase en chaîne de mots est de la séparer en mots avec des caractères vides. Cependant, avec cette méthode, des symboles tels que des points et des parenthèses à la fin des phrases sont inclus dans le mot. Par conséquent, après avoir divisé le texte de chaque ligne du corpus en une liste de jetons avec des caractères vides, effectuez le traitement suivant sur chaque jeton pour supprimer le symbole du mot.

-Suppression des caractères suivants qui apparaissent au début et à la fin du jeton:.,!?;: () [] '" -Supprimer les jetons qui sont des chaînes vides

Après avoir appliqué le processus ci-dessus, concaténez les jetons avec des espaces et enregistrez-les dans un fichier.

100 coups de traitement de langue passé "100 coups de traitement de langue-71 (en utilisant Stanford NLP): Stopword" est.

Répondre

Programme de réponse [080. Corpus shaping.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/09.%E3%83%99%E3%82%AF%E3%83%88%E3 % 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (I) /080.%E3%82%B3%E3%83%BC%E3%83%91%E3 % 82% B9% E3% 81% AE% E6% 95% B4% E5% BD% A2.ipynb)

import bz2
import re

#Expression régulière pour la suppression des symboles de début et de fin(Le code de saut de ligne à la fin)
reg_sym = re.compile(r'^[.,!?;:\(\)\[\]\'"]+|[.,!?;:\(\)\[\]\'"\n]+$')

with bz2.open('./enwiki-20150112-400-r100-10576.txt.bz2', 'rt') as data_file, \
         open('./080.corpus.txt', mode='w') as out_file:
    for i, line in enumerate(data_file):

        #Démonter avec des blancs, retirer les symboles avant et arrière
        tokens = []
        tokens.extend([reg_sym.sub('', chunk) for chunk in line.split(' ') if len(reg_sym.sub('', chunk)) > 0])
        
        #Les lignes vides ne s'appliquent pas
        if tokens:
            #Sortie de fichier
            print(*tokens, sep=' ', end='\n', file=out_file)
        
        #3 lignes également sorties vers la console
        if i < 3:
            print(i, line, tokens)

Répondre au commentaire

Le processus sera terminé dans environ 1 minute. J'obtiens ce résultat sur la console.

0 Anarchism
 ['Anarchism']
1 
 []
2 Anarchism is a political philosophy that advocates stateless societies often defined as self-governed voluntary institutions, but that several authors have defined as more specific institutions based on non-hierarchical free associations. Anarchism holds the state to be undesirable, unnecessary, or harmful. While anti-statism is central, anarchism entails opposing authority or hierarchical organisation in the conduct of human relations, including, but not limited to, the state system.
 ['Anarchism', 'is', 'a', 'political', 'philosophy', 'that', 'advocates', 'stateless', 'societies', 'often', 'defined', 'as', 'self-governed', 'voluntary', 'institutions', 'but', 'that', 'several', 'authors', 'have', 'defined', 'as', 'more', 'specific', 'institutions', 'based', 'on', 'non-hierarchical', 'free', 'associations', 'Anarchism', 'holds', 'the', 'state', 'to', 'be', 'undesirable', 'unnecessary', 'or', 'harmful', 'While', 'anti-statism', 'is', 'central', 'anarchism', 'entails', 'opposing', 'authority', 'or', 'hierarchical', 'organisation', 'in', 'the', 'conduct', 'of', 'human', 'relations', 'including', 'but', 'not', 'limited', 'to', 'the', 'state', 'system']

Le fichier est directement ouvert, compressé à l'aide du package bz2. En outre, le fichier de lecture et le fichier d'écriture sont ouverts en même temps.

with bz2.open('./enwiki-20150112-400-r100-10576.txt.bz2', 'rt') as data_file, \
         open('./080.corpus.txt', mode='w') as out_file:

Il s'agit de la principale expression régulière de suppression de symbole. C'est une brève explication.

Expressions régulières sens
^ conduire
[] Regroupement des moyens[]L'un des caractères inclus dans
.,!?;:()[]'" Le symbole à supprimer. Idem au début et à la fin.\Échapper
+ conduire/Applicable également s'il y a des symboles consécutifs à la fin
\n Code de saut de ligne(Seulement à la fin)
Barre verticale Ensemble de somme(Ou)
$ fin
reg_sym = re.compile(r'^[.,!?;:\(\)\[\]\'"]+|[.,!?;:\(\)\[\]\'"\n]+$')

À propos de \ xa0

Je pensais qu'il n'avait pas été effacé par le symbole plus tard, mais quand j'ai regardé de près le contenu, il y avait une partie contenant \ xa0. J'ai laissé \ xa0. Par exemple, c'était dans le fichier où j'ai écrit «Cependant B. nutans», et j'ai pensé que «le point à la fin de« B. »n'était pas supprimé», mais en interne c'était «B. \ xa0 nutans». Il semble que "B. nutans" soit un mot. J'ai remarqué en regardant l'article "[Python3] Que faire si vous rencontrez [\ xa0] pendant le scraping"

Recommended Posts

Traitement du langage 100 knock-80 (remplacé par une expression régulière): formatage du corpus
100 coups de traitement du langage avec Python 2015
100 traitements de langage avec Python
100 traitements de langage avec Python (chapitre 3)
100 Language Processing Knock 2020: Chapitre 3 (expression régulière)
100 Language Processing Knock 2020 Chapitre 3: Expressions régulières
J'ai fait 100 traitements linguistiques Knock 2020 avec GiNZA v3.1 Chapitre 4
100 coups de traitement linguistique (2020): 28
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
100 traitement de la langue frapper 00 ~ 02
Traitement du langage 100 knocks-88: 10 mots à haute similitude
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
100 Traitement du langage Knock Expressions régulières apprises au chapitre 3
100 traitement du langage knock-95 (en utilisant des pandas): Note avec WordSimilarity-353
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 Language Processing Knock 2020 Chapitre 1
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 Traitement du langage Knock Chapitre 1
Expression régulière en pymongo
100 coups de langue amateur: 07
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
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 traitement de langage knock-94 (en utilisant Gensim): calcul de similarité avec WordSimilarity-353
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 Language Processing Knock-57: Analyse des dépendances
100 traitement linguistique knock-50: coupure de phrase
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
100 Language Processing Knock-25: Extraction de modèles
Traitement du langage 100 Knock-87: similitude des mots
Manipulation d'expressions régulières par Python
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 coups de traitement du langage amateur: Résumé
Étudiez le traitement du langage naturel avec Kikagaku
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
[Traitement du langage 100 coups 2020] Chapitre 3: Expressions régulières
100 Language Processing Knock Chapitre 1 en Python
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage
100 Language Processing Knock-55: extraction d'expressions uniques
[Traitement du langage naturel] Prétraitement avec le japonais
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
100 Language Processing Knock: Chapitre 1 Mouvement préparatoire