Il s'agit de l'enregistrement de la 96e "Extraction de vecteurs liés aux noms de pays" de Language Processing 100 Knock 2015. Seul le nom du pays est extrait de la version Gensim du mot vecteur enregistré dans Knock 90th. C'est techniquement facile, mais la partie liée au nom du pays est un peu gênante.
Lien | Remarques |
---|---|
096.Extraction de vecteurs liés aux noms de pays.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:96 | Je vous suis toujours redevable de 100 coups de traitement linguistique |
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 |
Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.
type | version |
---|---|
gensim | 3.8.1 |
numpy | 1.17.4 |
pandas | 0.25.3 |
Au chapitre 10, nous continuerons à travailler sur l'apprentissage des vecteurs de mots du chapitre précédent.
Extrayez uniquement le vecteur lié au nom du pays du résultat d'apprentissage de word2vec.
"Traitement linguistique 100 knock-81 (remplacement collectif): Traitement des noms de pays composés de mots composés" J'ai pensé à utiliser le fichier des noms de pays Cependant, le fichier n'a pas de nom de pays en un seul mot (tel que «Angleterre»). [Étape "4. Delete Single Name"](https://qiita.com/FukuharaYohei/items/67be619ce9dd33392fcd#4-%E5%8D%98%E4%B8%80%E5%90%8D%E5%89 C'est parce que je l'ai effacé avec% 8A% E9% 99% A4). Encore une fois, [Étape "4. Delete Single Name"](https://qiita.com/FukuharaYohei/items/67be619ce9dd33392fcd#4-%E5%8D%98%E4%B8%80%E5%90%8D%E5 J'ai ajouté le nom du pays supprimé dans% 89% 8A% E9% 99% A4) et l'ai utilisé.
import numpy as np
import pandas as pd
from gensim.models import Word2Vec
model = Word2Vec.load('./090.word2vec.model')
print(model)
index = []
vector = []
with open('./096.countries.txt') as file_in:
for line in file_in:
country = line.rstrip().replace(' ', '_')
try:
vector.append(model.wv[country].tolist())
index.append(country)
except KeyError:
pass
pd.DataFrame(vector, index=index).to_pickle('096.country_vector.zip')
J'ai lu le fichier ligne par ligne pour obtenir le vecteur de nom de pays et l'ajouter à la liste. L'espace est remplacé par un trait de soulignement dans "100 Language Processing Knock-81 (Batch Replacement): Traiter les noms de pays composés de mots composés" Parce que j'ai fait la même chose. Certains d'entre eux ne sont pas inclus dans le corpus et certains sont exclus car ils apparaissent moins fréquemment, donc nous utilisons ʻexcept Key Error` pour attraper l'erreur.
for line in file_in:
country = line.rstrip().replace(' ', '_')
try:
vector.append(model.wv[country].tolist())
index.append(country)
except KeyError:
pass
Après cela, placez le nom du pays comme index dans DataFrame et exportez-le sous forme de fichier. 238 pays sont produits. Le fichier original se trouvant dans 416 pays, un peu moins de 60% des vecteurs de mots existent.
pd.DataFrame(vector, index=index).to_pickle('096.country_vector.zip')