Dies ist der 71. Datensatz von 100 Language Processing Knock 2015.
Dieses Mal verwende ich das nltk
-Paket und das stanfordNLP
-Paket, um Stoppwörter auszuschließen. Ich werde. Ein einfaches Stoppwortwörterbuch wird aus dem nltk
-Paket bezogen, und Symbole werden auch nach einem Teil des Wortes beurteilt.
Bis jetzt habe ich es nicht in den Block gepostet, da es im Grunde dasselbe war wie "Amateur-Sprachverarbeitung 100 Klopfen". , "Kapitel 8: Maschinelles Lernen" wurde ernst genommen und teilweise geändert. Ich werde posten. Ich verwende hauptsächlich Stanford NLP.
Verknüpfung | Bemerkungen |
---|---|
071_1.Stoppwort(Vorbereitung).ipynb | Antwortprogramm(Vorbereitung編)GitHub-Link |
071_2.Stoppwort(Lauf).ipynb | Antwortprogramm(Lauf編)GitHub-Link |
100 Klicks Amateur-Sprachverarbeitung:71 | 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 |
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 |
In der obigen Umgebung verwende ich die folgenden zusätzlichen Python-Pakete. Einfach mit normalem Pip installieren.
Art | Ausführung |
---|---|
nltk | 3.4.5 |
stanfordnlp | 0.2.0 |
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.
Erstellen Sie eine entsprechende Liste der englischen Stoppwörter (Stoppliste). Implementieren Sie außerdem eine Funktion, die true zurückgibt, wenn das als Argument angegebene Wort (Zeichenfolge) in der Stoppliste enthalten ist, andernfalls false. Schreiben Sie außerdem einen Test für diese Funktion.
** "Passend" **?
Ich fragte mich, was ich mit dem ** "angemessenen" ** der Aufgabe anfangen sollte. Aus diesem Grund habe ich mich entschlossen, das im nltk
-Paket definierte Stoppwort und die Informationen zum Teiltext des morphologischen Analyseergebnisses zu verwenden, um die Authentizität zu beurteilen.
Zuallererst gibt es Vorbereitung. Dies unterscheidet sich von der Ausführung der Antwort und muss nach der Installation des Pakets nur einmal ausgeführt werden. Laden Sie die Liste der Stoppwörter für das ntlk-Paket herunter. Dies erfolgt zuerst, getrennt von "pip install".
import nltk
#Stoppwort herunterladen
nltk.download('stopwords')
#Stoppen Sie die Wortbestätigung
print(nltk.corpus.stopwords.words('english'))
Laden Sie auch das englische Modell des Stanford NLP-Pakets herunter. Bitte beachten Sie, dass es ungefähr 250 MB ist. Dies erfolgt auch zunächst getrennt von "pip install".
import stanfordnlp
stanfordnlp.download('en')
stanfordnlp.Pipeline()
import re
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer as PS
import stanfordnlp
#Definiert als Taple für Geschwindigkeit
STOP_WORDS = set(stopwords.words('english'))
ps = PS()
#Scheint mit Universal POS-Tags kompatibel zu sein
# https://universaldependencies.org/u/pos/
EXC_POS = {'PUNCT', #Interpunktion
'X', #Andere
'SYM', #Symbol
'PART', #Partikel('s etc.)
'CCONJ', #Verbindung(und soweiter und sofort.)
'AUX', #Hilfsverb(würde etc.)
'PRON', #Gleichbedeutend
'SCONJ', #Untergeordneter Konnektiv(ob etc.)
'ADP', #Konjunkt(in etc.)
'NUM'} #Nummer
#Es war langsam, alle Standardprozessoren anzugeben, also beschränken Sie sich auf das Minimum
# https://stanfordnlp.github.io/stanfordnlp/processors.html
nlp = stanfordnlp.Pipeline(processors='tokenize,pos,lemma')
reg_sym = re.compile(r'^[!-/:-@[-`{-~]|[!-/:-@[-`{-~]$')
reg_dit = re.compile('[0-9]')
#Entfernen von führenden und nachfolgenden Symbolen
def remove_symbols(lemma):
return reg_sym.sub('', lemma)
#Beenden Sie die Beurteilung der Wortauthentizität
def is_stopword(word):
lemma = remove_symbols(word.lemma)
return True if lemma in STOP_WORDS \
or lemma == '' \
or word.upos in EXC_POS \
or len(lemma) == 1 \
or reg_dit.search(lemma)\
else False
#Beurteilen Sie 3 Sätze als Gerichtsverfahren
with open('./sentiment.txt') as file:
for i, line in enumerate(file):
#Die ersten 3 Zeichen geben nur negativ / positiv an. Führen Sie daher keine nlp-Verarbeitung durch(Mach es so schnell wie möglich)
doc = nlp(line[3:])
print(i, line)
for sentence in doc.sentences:
for word in sentence.words:
print(word.text, word.upos, remove_symbols(word.lemma), ps.stem(remove_symbols(word.lemma)), is_stopword(word))
if i == 2:
break
Dieses Mal wird nicht nur ein einfacher Stoppwortausschluss, sondern auch eine morphologische Analyse durchgeführt, um Hilfswörter auszuschließen. Zuerst erhalten wir das Stoppwort im Tapple-Format.
#Definiert als Taple für Geschwindigkeit
STOP_WORDS = set(stopwords.words('english'))
Dies sind die Inhalte des Stoppworts.
['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', "you're", "you've", "you'll", "you'd", 'your', 'yours', 'yourself', 'yourselves', 'he', 'him', 'his', 'himself', 'she', "she's", 'her', 'hers', 'herself', 'it', "it's", 'its', 'itself', 'they', 'them', 'their', 'theirs', 'themselves', 'what', 'which', 'who', 'whom', 'this', 'that', "that'll", 'these', 'those', 'am', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'having', 'do', 'does', 'did', 'doing', 'a', 'an', 'the', 'and', 'but', 'if', 'or', 'because', 'as', 'until', 'while', 'of', 'at', 'by', 'for', 'with', 'about', 'against', 'between', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'to', 'from', 'up', 'down', 'in', 'out', 'on', 'off', 'over', 'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both', 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 's', 't', 'can', 'will', 'just', 'don', "don't", 'should', "should've", 'now', 'd', 'll', 'm', 'o', 're', 've', 'y', 'ain', 'aren', "aren't", 'couldn', "couldn't", 'didn', "didn't", 'doesn', "doesn't", 'hadn', "hadn't", 'hasn', "hasn't", 'haven', "haven't", 'isn', "isn't", 'ma', 'mightn', "mightn't", 'mustn', "mustn't", 'needn', "needn't", 'shan', "shan't", 'shouldn', "shouldn't", 'wasn', "wasn't", 'weren', "weren't", 'won', "won't", 'wouldn', "wouldn't"]
Darüber hinaus haben wir die folgenden Definitionen als nicht verwendete Teilwörter. Ich habe die Ergebnisse später gesehen und sie haben stetig zugenommen. Was mich an diesem Prozess glücklich macht, ist, dass zum Beispiel "Gefällt mir" in "Ich mag diesen Film" nicht dazu gehört, Wörter als Verb zu stoppen, sondern es ist wie "Er ist wie mein Held". In diesem Fall wird "like" als ADP (Conjunct) ausgeschlossen. Die hier aufgeführten Typen ähneln denen, die als Universal POS-Registerkarten definiert sind.
#Scheint mit Universal POS-Tags kompatibel zu sein
# https://universaldependencies.org/u/pos/
EXC_POS = {'PUNCT', #Interpunktion
'X', #Andere
'SYM', #Symbol
'PART', #Partikel('s etc.)
'CCONJ', #Verbindung(und soweiter und sofort.)
'AUX', #Hilfsverb(würde etc.)
'PRON', #Gleichbedeutend
'SCONJ', #Untergeordneter Konnektiv(ob etc.)
'ADP', #Konjunkt(in etc.)
'NUM'} #Nummer
Kompilieren Sie den regulären Ausdruck, der später verwendet werden soll. Die erste Zeile ist ein regulärer Ausdruck, der von Anfang bis Ende nach Symbolen halber Breite sucht. Die zweite Zeile ist ein regulärer Ausdruck, der nach Zahlen sucht.
reg_sym = re.compile(r'^[!-/:-@[-`{-~]|[!-/:-@[-`{-~]$')
reg_dit = re.compile('[0-9]')
Eine Funktion, die Symbole halber Breite vom Anfang und Ende entfernt. Wenn beispielsweise ein Zeichen wie "-a" vorhanden ist, wird das erste Zeichen entfernt.
#Entfernen von führenden und nachfolgenden Symbolen
def remove_symbols(lemma):
return reg_sym.sub('', lemma)
Die wesentliche Funktion ist die folgende Definition. lemma
wird als lemma bezeichnet und in das im Wörterbuch definierte Format konvertiert, wie in Lemmatisation gezeigt (z. B. besser-> gut).
In den folgenden Fällen wird es als Stoppwort beurteilt.
#Beenden Sie die Beurteilung der Wortauthentizität
def is_stopword(word):
lemma = remove_symbols(word.lemma)
return True if lemma in STOP_WORDS \
or lemma == '' \
or word.upos in EXC_POS \
or len(lemma) == 1 \
or reg_dit.search(lemma)\
else False
Danach wird die Datei gelesen und das Stoppwort beurteilt. Da stanfordnlp langsam ist, haben wir die ersten drei Buchstaben ausgeschlossen, um negativ / positiv anzuzeigen, um es so schnell wie möglich zu machen.
Dieses Mal versuche ich nur die ersten drei Sätze auszuführen.
Schließlich wird es in einer Stammform mit ps.stem
ausgegeben. Dies soll dazu führen, dass die drei Wörter an der Haftung haften, beispielsweise als anhaftend. Im folgenden Teil des maschinellen Lernens denke ich, dass dieses Formular besser ist und verwende es.
with open('./sentiment.txt') as file:
for i, line in enumerate(file):
#Die ersten 3 Zeichen geben nur negativ / positiv an. Führen Sie daher keine nlp-Verarbeitung durch(Mach es so schnell wie möglich)
doc = nlp(line[3:])
print(i, line)
for sentence in doc.sentences:
for word in sentence.words:
print(word.text, word.upos, remove_symbols(word.lemma), ps.stem(remove_symbols(word.lemma)), is_stopword(word))
if i == 2:
break
Das Ausführungsergebnis sieht so aus.
0 +1 a chick flick for guys .
a DET a a True
chick NOUN chick chick False
flick NOUN flick flick False
for ADP for for True
guys NOUN guy guy False
. PUNCT True
1 +1 an impressive if flawed effort that indicates real talent .
an DET a a True
impressive ADJ impressive impress False
if SCONJ if if True
flawed VERB flaw flaw False
effort NOUN effort effort False
that PRON that that True
indicates VERB indicate indic False
real ADJ real real False
talent NOUN talent talent False
. PUNCT True
2 +1 displaying about equal amounts of naiveté , passion and talent , beneath clouds establishes sen as a filmmaker of considerable potential .
displaying VERB displaying display False
about ADP about about True
equal ADJ equal equal False
amounts NOUN amount amount False
of ADP of of True
naiveté NOUN naiveté naiveté False
, PUNCT True
passion NOUN passion passion False
and CCONJ and and True
talent NOUN talent talent False
, PUNCT True
beneath ADP beneath beneath True
clouds NOUN cloud cloud False
establishes VERB establish establish False
sen NOUN sen sen False
as ADP as as True
a DET a a True
filmmaker NOUN filmmaker filmmak False
of ADP of of True
considerable ADJ considerable consider False
potential NOUN potential potenti False
. PUNCT True