[PYTHON] Knock-70 mit 100 Sprachverarbeitung (unter Verwendung von Stanford NLP): Abrufen und Formatieren von Daten

Dies ist der 70. Rekord von 100 Language Processing Knock 2015. Im Grunde war es fast dasselbe wie "Amateur-Sprachverarbeitung 100 Klopfen", also habe ich es nicht in den Block gepostet, aber "Kapitel 8: Maschinelles Lernen" wurde ernst genommen und in gewissem Maße geändert, daher habe ich es veröffentlicht. Ich werde. Ich werde hauptsächlich [Stanford NLP] verwenden (https://stanfordnlp.github.io/stanfordnlp/).

Referenzlink

Verknüpfung Bemerkungen
070.Daten erhalten und gestalten.ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:70 Ich bin Ihnen immer zu Dank verpflichtet, wenn ich auf 100 Sprachverarbeitung klopfe
Erste Schritte mit Stanford NLP mit Python Der Unterschied zu Stanford Core NLP war leicht zu verstehen

Umgebung

Art Ausführung Inhalt
OS Ubuntu18.04.01 LTS Es läuft virtuell
pyenv 1.2.15 Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze
Python 3.6.9 python3 auf pyenv.6.Ich benutze 9
3.7 oder 3.Es gibt keinen tiefen Grund, keine 8er-Serie zu verwenden
Pakete werden mit venv verwaltet

Problem

Kapitel 8: Maschinelles Lernen

In diesem Kapitel [Satzpolaritätsdatensatz] von Movie Review Data, veröffentlicht von Bo Pang und Lillian Lee. v1.0](http://www.cs.cornell.edu/people/pabo/movie-review-data/rt-polaritydata.README.1.0.txt) wird verwendet, um den Satz positiv oder negativ zu machen. Arbeiten Sie an der Aufgabe (Polaritätsanalyse), um sie als (negativ) zu klassifizieren.

70. Daten erhalten und gestalten

Mit Richtige Antwortdaten der Polaritätsanalyse für Sätze korrigieren Sie die Antwortdaten wie folgt. Erstellen Sie (sentiment.txt).

  1. Fügen Sie die Zeichenfolge "+1" am Anfang jeder Zeile in rt-polarity.pos ein (Polaritätsbezeichnung "+1", gefolgt von einem Leerzeichen gefolgt von positivem Anweisungsinhalt).
  2. Fügen Sie die Zeichenfolge "-1" am Anfang jeder Zeile in rt-polarity.neg ein (Polaritätsbezeichnung "-1" gefolgt von einem Leerzeichen gefolgt von einer negativen Anweisung).
  3. Verketten Sie den Inhalt von 1 und 2 oben und ordnen Sie die Zeilen zufällig neu an

Überprüfen Sie nach dem Erstellen von> sentiment.txt die Anzahl der positiven Beispiele (positive Sätze) und die Anzahl der negativen Beispiele (negative Sätze).

Vorsichtsmaßnahmen für die zu lesende Datei

  1. Der Zeichencode scheint WINDOWS-1252 anstelle von UTF-8 zu sein (ich habe ihn nicht richtig bestätigt, aber "Amateur-Sprachverarbeitung 100 Schläge: 70" ) Und die gleiche Lesart)
  2. Es gibt Texte, die sowohl Umlaut als auch Englisch enthalten (Zeichen wie "Ü")
  3. Grundsätzlich werden alle Zeichen abgesenkt

Antworten

Antwort Prämisse

Die Ordnerstruktur ist im Jupyter Notebook-Verzeichnis wie folgt. Originaldaten wird entpackt und platziert.

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

Antwortprogramm [070. Abrufen und Formen von 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):
    #Unbestätigt, ob es von der Open-Funktion ohne Verwendung von Codecs gelesen werden kann()
    with codecs.open(fname, encoding='cp1252') as file:  #Die Codierung ist Windows-1252
        return ['{0} {1}'.format(prefix, line.strip()) for line in file]

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

#Negativ gelesen
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))

#Überprüfen Sie die Nummer
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))

Kommentar beantworten

Es ist im Grunde das Lesen und Schreiben von Dateien, also habe ich nicht viel getan, um es zu erwähnen. Ich verwende die "Codecs" -Bibliothek, um die Datei zu öffnen, aber dies ist nur eine Kopie des relevanten Teils von 100 Amateur-Sprachverarbeitungsklopfen: 70 Daher habe ich nicht überprüft, ob es mit der normalen "Öffnen" -Funktion möglich ist. Ich wollte die Codecs-Bibliothek jedoch in nachfolgenden Programmen nicht mehr verwenden, also habe ich sie in UTF-8 gespeichert. Trotzdem werden die Zeichen, die Umlaut enthalten, korrekt gespeichert.

Bei der Ausführung gibt die letzte Druckfunktion die Nummer wie unten gezeigt aus.

pos:5331, neg:5331

Recommended Posts

Knock-70 mit 100 Sprachverarbeitung (unter Verwendung von Stanford NLP): Abrufen und Formatieren von Daten
100 Sprachverarbeitung Knock-71 (mit Stanford NLP): Stoppwort
100 Sprachverarbeitung Knock-72 (unter Verwendung von Stanford NLP): Identitätsextraktion
100 Sprachverarbeitung Knock-20 (unter Verwendung von Pandas): Lesen von JSON-Daten
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
Sprachverarbeitung 100 Knocks-31 (mit Pandas): Verben
100 Sprachverarbeitung Knock-73 (mit Scikit-Learn): Lernen
100 Sprachverarbeitung Knock-74 (mit Scicit-Learn): Vorhersage
100 Sprachverarbeitung Knock-38 (mit Pandas): Histogramm
100 Sprachverarbeitung Knock-97 (mit Scicit-Learn): k-bedeutet Clustering
100 Sprachverarbeitung Knock-33 (mit Pandas): Sahen Nomen
100 Sprachverarbeitung Knock-91: Vorbereitung von Analogiedaten
100 Sprachverarbeitung Knock-35 (mit Pandas): Nomenklatur
100 Sprachverarbeitung Knock-39 (mit Pandas): Zipf-Gesetz
100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 1)
100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
100-Sprach-Verarbeitung Knock-79 (mit Scikit-Learn): Präzisions-Recall-Grafikzeichnung
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
100-Sprach-Verarbeitung Knock-98 (unter Verwendung von Pandas): Clustering nach Ward-Methode
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitung Knock Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock: Kapitel 2 UNIX-Befehlsgrundlagen (mit Pandas)
100 Sprachverarbeitung Knock-83 (mit Pandas): Messung der Wort- / Kontexthäufigkeit
100 Sprachverarbeitung Knock-30 (unter Verwendung von Pandas): Lesen der Ergebnisse der morphologischen Analyse
100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
Überblick über die Verarbeitung natürlicher Sprache und ihre Datenvorverarbeitung
Rehabilitation von Python- und NLP-Kenntnissen ab "Knock 100 Language Processing 2015" (Kapitel 2, zweite Hälfte)
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 2, erste Hälfte)
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-84 (mit Pandas): Erstellen einer Wortkontextmatrix
100 Sprachverarbeitung Knock-77 (mit Scicit-Learn): Messung der korrekten Antwortrate
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020