[PYTHON] 100 langage de traitement knock-70 (en utilisant Stanford NLP): Obtention et formatage des données

Il s'agit du 70e enregistrement de 100 Language Processing Knock 2015. Fondamentalement, c'était presque la même chose que "Traitement du langage amateur 100 coups", donc je ne l'ai pas posté dans le bloc, mais Concernant "Chapter 8: Machine Learning", je l'ai posté parce que j'y ai sérieusement travaillé et que je l'ai changé dans une certaine mesure. Je vais. J'utiliserai principalement Stanford NLP.

Lien de référence

Lien Remarques
070.Obtention et mise en forme des données.ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:70 Je vous suis toujours redevable de 100 coups de traitement linguistique
Premiers pas avec Stanford NLP avec Python Il était facile de comprendre la différence avec la PNL de Stanford Core

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

problème

Chapitre 8: Machine Learning

Dans ce chapitre, [jeu de données de polarité des phrases] de Movie Review Data publié par Bo Pang et Lillian Lee. v1.0](http://www.cs.cornell.edu/people/pabo/movie-review-data/rt-polaritydata.README.1.0.txt) est utilisé pour rendre la phrase positive ou négative. Travaillez sur la tâche (analyse de polarité) à classer comme (négative).

70. Obtention et mise en forme des données

En utilisant Corriger les données de réponse de l'analyse de polarité pour les phrases, corrigez les données de réponse comme suit. Créez (sentiment.txt).

  1. Ajoutez la chaîne "+1" au début de chaque ligne dans rt-polarity.pos (étiquette de polarité "+1" suivie d'un espace suivi du contenu de l'instruction positive)
  2. Ajoutez la chaîne "-1" au début de chaque ligne dans rt-polarity.neg (étiquette de polarité "-1" suivie d'un espace suivi d'une déclaration négative)
  3. Concaténez le contenu de 1 et 2 ci-dessus et triez les lignes au hasard

Après avoir créé> sentiment.txt, vérifiez le nombre d'exemples positifs (phrases positives) et le nombre d'exemples négatifs (phrases négatives).

Précautions pour le fichier à lire

  1. Le code de caractère semble être WINDOWS-1252 au lieu de UTF-8 (je ne l'ai pas confirmé correctement, mais "Traitement du langage amateur 100 coups: 70" ) Et la même lecture)
  2. Certains textes incluent Umlaut ainsi que l'anglais (caractères comme "Ü")
  3. Fondamentalement, tous les caractères sont abaissés

Répondre

Réponse prémisse

La structure des dossiers est la suivante dans le répertoire Jupyter Notebook. Données originales sont décompressées et placées.

└── rt-polaritydata
    ├── rt-polarity.neg
    └── rt-polarity.pos

Programme de réponse [070. Obtention et mise en forme de data.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/08.%E6%A9%9F%E6%A2%B0%E5%AD%A6 % E7% BF% 92 / 070.% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 81% AE% E5% 85% A5% E6% 89% 8B% E3% 83% BB% E6% 95% B4% E5% BD% A2.ipynb)

import codecs
import random

FNAME_SMT = 'sentiment.txt'
pos_prefix = '+1'
neg_prefix = '-1'

result = []

def read_file(fname, prefix):
    #Non confirmé s'il peut être lu par la fonction ouverte sans utiliser de codecs()
    with codecs.open(fname, encoding='cp1252') as file:  #L'encodage est Windows-1252
        return ['{0} {1}'.format(prefix, line.strip()) for line in file]

#Lecture positive
result.extend(read_file('./rt-polaritydata/rt-polarity.pos', pos_prefix))

#Lecture négative
result.extend(read_file('./rt-polaritydata/rt-polarity.neg', neg_prefix))

random.shuffle(result)

with open(FNAME_SMT, 'w') as file_out:
    file_out.write('\n'.join(result))

#Vérifiez le numéro
cnt_pos = 0
cnt_neg = 0
with open(FNAME_SMT) as file:
    for line in file:
        if line.startswith(pos_prefix):
            cnt_pos += 1
        elif line.startswith(neg_prefix):
            cnt_neg += 1

print('pos:{}, neg:{}'.format(cnt_pos, cnt_neg))

Répondre au commentaire

C'est essentiellement la lecture et l'écriture de fichiers, donc je n'ai pas fait grand-chose pour le mentionner. J'utilise la bibliothèque codecs pour ouvrir le fichier, mais ce n'est qu'une copie de la partie pertinente de 100 coups de traitement de langue amateur: 70 Par conséquent, je n'ai pas vérifié si cela est possible avec la fonction normale «ouvrir». Cependant, je ne voulais pas utiliser à nouveau la bibliothèque codecs dans les programmes suivants, je l'ai donc sauvegardée en UTF-8. Même ainsi, les caractères contenant Umlaut sont enregistrés correctement.

Une fois exécutée, la dernière fonction print affichera le numéro comme indiqué ci-dessous.

pos:5331, neg:5331

Recommended Posts

100 langage de traitement knock-70 (en utilisant Stanford NLP): Obtention et formatage des données
100 Language Processing Knock-71 (en utilisant Stanford NLP): Stopword
100 traitement du langage knock-72 (en utilisant Stanford NLP): Extraction d'identité
100 langage de traitement knock-20 (à l'aide de pandas): lecture de données JSON
100 langage traitement knock-92 (utilisant Gensim): application aux données d'analogie
100 traitement du langage knock-31 (en utilisant des pandas): verbe
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
100 traitement du langage knock-74 (en utilisant scicit-learn): prédiction
100 traitement du langage knock-38 (en utilisant des pandas): histogramme
100 traitement du langage knock-97 (en utilisant scicit-learn): clustering k-means
100 Language Processing Knock-33 (en utilisant des pandas): nom sahen
100 traitement du langage knock-91: Préparation des données d'analogie
100 traitement du langage knock-35 (utilisant des pandas): concaténation de nomenclature
100 Language Processing Knock-39 (en utilisant des pandas): la loi de Zipf
100 traitement de langage knock-34 (utilisant des pandas): "B of A"
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
Réhabilitation des compétences Python et PNL à partir de "100 Language Processing Knock 2015" (Chapitre 1)
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
100 langage de traitement knock-79 (en utilisant scikit-learn): dessin de graphe avec rappel de précision
100 Language Processing Knock-32 (utilisant des pandas): Prototype de verbe
Traitement de 100 langues knock-98 (en utilisant des pandas): Clustering par méthode Ward
100 traitement du langage knock-75 (en utilisant scicit-learn): poids de l'identité
100 traitement du langage knock-99 (à l'aide de pandas): visualisation par t-SNE
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 traitements linguistiques Knock 2020 [00 ~ 69 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
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 Language Processing Knock: Chapitre 2 Principes de base des commandes UNIX (à l'aide de pandas)
100 Language Processing Knock-83 (en utilisant des pandas): Mesure de la fréquence des mots / contextes
100 Language Processing Knock-30 (en utilisant des pandas): lecture des résultats de l'analyse morphologique
100 traitement de langage knock-94 (en utilisant Gensim): calcul de similarité avec WordSimilarity-353
Vue d'ensemble du traitement du langage naturel et de son prétraitement des données
Réhabilitation des compétences Python et PNL à partir de «Knock 100 Language Processing 2015» (chapitre 2 deuxième semestre)
Réhabilitation des compétences Python et PNL à partir de "100 Language Processing Knock 2015" (Chapitre 2 premier semestre)
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 Language Processing Knock-84 (en utilisant des pandas): Création d'une matrice de contexte de mots
100 traitements linguistiques knock-77 (en utilisant scicit-learn): mesure du taux de réponse
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
J'ai essayé 100 traitements linguistiques Knock 2020