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 | 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 |
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 |
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é.
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.
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)
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]+$')
\ 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