Dies ist die Aufzeichnung der 80. "Corpus Shaping" von Language Processing 100 Knock 2015. Schließlich haben wir Kapitel 9, "Vector Space Method (I)" erreicht. Diesmal ist es einfach, da es sich lediglich um das Ersetzen von Zeichen mithilfe regulärer Ausdrücke im Vorverarbeitungssystem handelt.
Verknüpfung | Bemerkungen |
---|---|
080.Korpusformung.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:80 | Ich bin Ihnen immer zu Dank verpflichtet, wenn ich auf 100 Sprachverarbeitung klopfe |
100 Sprachverarbeitung klopfen 2015 Version(80~82) | Kapitel 9 war hilfreich |
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 |
enwiki-20150112-400-r10-105752.txt.bz2 Ist der Text von 105.752 Artikeln zufällig 1/10 aus den Artikeln ausgewählt, die zum 12. Januar 2015 aus etwa 400 Wörtern oder mehr der englischen Wikipedia-Artikel bestehen und im bzip2-Format komprimiert sind. Gibt es. Mit diesem Text als Korpus möchte ich einen Vektor (verteilten Ausdruck) lernen, der die Bedeutung eines Wortes ausdrückt. In der ersten Hälfte von Kapitel 9 wird der Prozess des Lernens des Wortvektors implementiert, indem er in mehrere Prozesse unterteilt wird, indem die Hauptkomponentenanalyse auf die aus dem Korpus erstellte Matrix für das gleichzeitige Auftreten von Wortkontexten angewendet wird. In der zweiten Hälfte von Kapitel 9 wird der durch Lernen erhaltene Wortvektor (300 Dimensionen) verwendet, um die Ähnlichkeit von Wörtern zu berechnen und zu analysieren (analog).
Beachten Sie, dass bei gehorsamer Implementierung von Problem 83 eine große Menge (ca. 7 GB) Hauptspeicher erforderlich ist. Wenn Ihnen der Speicher ausgeht, erstellen Sie einen Prozess oder ein 1/100 Stichproben-Korpus enwiki-20150112-400-r100-10576.txt.bz2. Verwenden Sie /nlp100/data/enwiki-20150112-400-r100-10576.txt.bz2).
Diesmal * 1/100 Stichprobenkorpus enwiki-20150112-400-r100-10576.txt.bz2 400-r100-10576.txt.bz2) ”* wird verwendet.
Die einfachste Möglichkeit, einen Satz in eine Wortfolge umzuwandeln, besteht darin, ihn in Wörter mit Leerzeichen zu unterteilen. Bei dieser Methode werden jedoch Symbole wie Punkte und Klammern am Ende von Sätzen in das Wort aufgenommen. Führen Sie daher nach dem Teilen des Texts in jeder Zeile des Korpus in eine Liste von Token mit Leerzeichen die folgende Verarbeitung für jedes Token durch, um das Symbol aus dem Wort zu entfernen.
- Die folgenden Zeichen, die am Anfang und Ende des Tokens erscheinen, wurden entfernt:.,!?;: () [] '" -Löschen Sie Token, die leere Zeichenfolgen sind
Verketten Sie nach dem Anwenden des obigen Prozesses die Token mit Leerzeichen und speichern Sie sie in einer Datei.
100 Klopfen vergangener Sprachverarbeitung "100 Klopfen Sprachverarbeitung-71 (unter Verwendung von Stanford NLP): Stoppwort" ist.
import bz2
import re
#Regulärer Ausdruck zum Entfernen von Anfangs- und Endsymbolen(Der Zeilenvorschubcode am Ende)
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):
#Mit Rohlingen zerlegen, vordere und hintere Symbole entfernen
tokens = []
tokens.extend([reg_sym.sub('', chunk) for chunk in line.split(' ') if len(reg_sym.sub('', chunk)) > 0])
#Leerzeilen sind nicht anwendbar
if tokens:
#Dateiausgabe
print(*tokens, sep=' ', end='\n', file=out_file)
#3 Zeilen werden auch an die Konsole ausgegeben
if i < 3:
print(i, line, tokens)
Der Vorgang ist in ca. 1 Minute abgeschlossen. Ich bekomme dieses Ergebnis auf der Konsole.
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']
Die Datei wird direkt geöffnet und mit dem Paket bz2 komprimiert. Außerdem sind die Lesedatei und die Schreibdatei gleichzeitig geöffnet.
with bz2.open('./enwiki-20150112-400-r100-10576.txt.bz2', 'rt') as data_file, \
open('./080.corpus.txt', mode='w') as out_file:
Dies ist der reguläre Ausdruck zum Entfernen von Hauptsymbolen. Es ist eine kurze Erklärung.
Reguläre Ausdrücke | Bedeutung |
---|---|
^ | führen |
[] | Bedeutet Gruppierung[] Alle in eingeschlossenen Zeichen |
.,!?;:()[]'" | Das zu entfernende Symbol. Gleich am Anfang und am Ende.\ Flucht |
+ | führen/Gilt auch, wenn am Ende aufeinanderfolgende Symbole stehen |
\n | Zeilenvorschubcode(Nur am Ende) |
Vertikale Leiste | Summensatz(Oder) |
$ | Ende |
reg_sym = re.compile(r'^[.,!?;:\(\)\[\]\'"]+|[.,!?;:\(\)\[\]\'"\n]+$')
\ xa0
Ich dachte, dass es später nicht durch das Symbol gelöscht wurde, aber als ich mir den Inhalt genau ansah, gab es einen Teil, der "\ xa0" enthielt. Ich habe \ xa0
verlassen.
Zum Beispiel war es in der Datei, in der "Jedoch B. nutans" geschrieben wurde, und ich dachte, "der Punkt am Ende von" B. "wurde nicht entfernt", aber intern war es "B. \ xa0 nutans". Es scheint ein Wort in "B. nutans" zu sein.
Ich habe es beim Lesen des Artikels "[Python3] Was ist zu tun, wenn Sie beim Schaben auf [\ xa0] stoßen" bemerkt.
Recommended Posts