[PYTHON] Sprachverarbeitung 100 Knock-80 (ersetzt durch regulären Ausdruck): Korpusformatierung

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.

Referenzlink

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

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

Aufgabe

Kapitel 9: Vektorraummethode (I)

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.

80. Korpusformung

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.

Antworten

Antwortprogramm [080. Corpus Shaping.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/09.%E3%83%99%E3%82%AF%E3%83%88%E3 % 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (I) /080.%E3%82%B3%E3%83%BC%E3%83%91%E3 % 82% B9% E3% 81% AE% E6% 95% B4% E5% BD% A2.ipynb)

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)

Kommentar beantworten

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]+$')

Über \ 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

Sprachverarbeitung 100 Knock-80 (ersetzt durch regulären Ausdruck): Korpusformatierung
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitung klopfen 2020: Kapitel 3 (regulärer Ausdruck)
100 Sprachverarbeitung Knock 2020 Kapitel 3: Reguläre Ausdrücke
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit
100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
100 Sprachverarbeitung Klopfen Sie auf reguläre Ausdrücke, die Sie in Kapitel 3 gelernt haben
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 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
Regulärer Ausdruck im Pymongo
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-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
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
Manipulation regulärer Ausdrücke durch Python
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
Studieren Sie die Verarbeitung natürlicher Sprache mit Kikagaku
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
[Sprachverarbeitung 100 Schläge 2020] Kapitel 3: Reguläre Ausdrücke
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
100 Sprachverarbeitung Knock-55: Extraktion eindeutiger Ausdrücke
[Verarbeitung natürlicher Sprache] Vorverarbeitung mit Japanisch
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitung Knock-82 (Kontextwort): Kontextextraktion
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung