Wortextraktionstool (6): Zusätzliche Beschreibung des Wortextraktionstools

In Fortsetzung des vorherigen Artikels sehen wir uns die zusätzliche Erklärung des Wortextraktionstools an.

Wortextraktionstool(5): Beschreibung des Quellcodes des Wortextraktionstools(2)

5. Zusätzliche Erklärung zum Wortextraktionstool

5.1. Warum OLE-Automatisierung verwenden?

OLE Aumation ist in Wikipedia wie folgt definiert.

In der Microsoft Windows-Anwendungsprogrammierung ist die OLE-Automatisierung (später einfach in Automation[1][2] umbenannt) ein von Microsoft entwickelter Interprozesskommunikationsmechanismus (IPC). Es basiert auf einer Teilmenge des Component Object Model (COM) und sollte über eine Skriptsprache (ursprünglich Visual Basic) verwendet werden, ist aber jetzt in mehreren Sprachen unter Windows verfügbar.

Quelle: https://en.wikipedia.org/wiki/OLE_Automation

In Python ist die OLE-Automatisierung mit dem win32com-Paket möglich. Sie können gewünschte Funktionen ausführen, indem Sie MS-Office-Anwendungen steuern.

OLE Automation using Python win32com package
OLE-Automatisierung mit Python win32com-Paket

OLE Aumation wurde aus den folgenden Gründen für das Wortextraktionstool verwendet.

  • Es gibt die folgenden dedizierten Pakete, die MS-Word und PowerPoint lesen und schreiben können, aber ich habe sie nicht absichtlich verwendet.
    • MS Word: python-docx, python-docx2txt
    • PowerPoint: python-pptx
    • Excel: openpyxl, xlsxwriter, pyxlsb
  • Die meisten Unternehmensumgebungen erzwingen die Installation von DRM-Software, sodass Dokumentdateien verschlüsselt werden.
  • Verschlüsselte Dateien können nicht gelesen werden, wenn ein dediziertes Paket verwendet wird.
  • Wenn Sie die OLE-Automatisierungsmethode mit dem Pywin32-Paket verwenden, können Sie die Datei über das Office-Programm lesen.
  • Bei der OLE-Automatisierung kann es zu Leistungseinbußen kommen, die Ergebnisse sind jedoch garantiert.

Informationen zu Python-Codes, die MS-Word, PowerPoint und Excel steuern, finden Sie im folgenden Artikel.

5.2. Bezogen auf die Codierung von Textdateien (nur UTF-8 wird unterstützt)

  • Die Kodierung der Eingabetextdatei ist darauf ausgelegt, nur UTF-8 zu unterstützen.
  • Wenn die Textdatei unter den Eingabedateien eine ANSI-Codierung ist, tritt der folgende Fehler auf, da es sich um cp949 und eine Nicht-Unicode-Codierung handelt.
    • UnicodeDecodeError: 'utf-8' Codec kann Byte 0xb4 an Position 5 nicht decodieren: ungültiges Startbyte
  • Wenn während der Ausführung ein ähnlicher Fehler auftritt, speichern Sie die Textdatei als UTF-8 und führen Sie sie erneut aus.

5.3. Gründe für die Verwendung von Multiprocessing

vorherigen Post "Wortextraktionstool(4): Beschreibung des Quellcodes des Wortextraktionstools(1)In “ wurde der Code mit Mehrfachverarbeitung erklärt.

4.2.3. Führen Sie get_file_text mit Mehrfachverarbeitung aus

4.2.4. Führen Sie get_word_list mit Mehrfachverarbeitung aus

Als dieses Tool zum ersten Mal erstellt wurde, waren sowohl die Textextraktion als auch die Wortextraktion eine Einzelverarbeitung. Beim ersten Einsatz in einem Projekt der Firma K Anfang 2021 dauerte es etwa 20 Stunden, um auf einem Laptop (CPU i5, 16GB Ram) Standard-Wortkandidaten aus etwa 160.000 Spaltenkommentaren zu extrahieren.

Nach mehreren Iterationen, einschließlich Tests, bestand die Notwendigkeit, die Ausführungszeit zu verkürzen. Als ich googelte, um Thread für die parallele Verarbeitung zu verwenden, entschied ich, dass Multi-Processing besser geeignet ist als Multi-Threading, da Python das Konzept von GIL (Global Interpreter Lock) hat.

Durch eine geringfügige Codeänderung wurde die Mehrfachverarbeitung sowohl auf die Textextraktion als auch auf die Wortextraktion angewendet, und ein Argument (multi_process_count) wurde erstellt, um den Grad der Parallelität während der Ausführung anzugeben.

Wenn multi_process_count auf 8 gesetzt und ausgeführt wurde, verkürzte sich die Aufgabe, die 20 Stunden dauerte, auf etwa 40 Minuten und war effektiv genug.


5.4. Hinweise zur Extraktion zusammengesetzter Wörter

Die Beschreibung von Substantiven, Posen und Morphen unter den Hauptfunktionen von Mecab ist wie folgt.

FunktionErläuterung
Substantive (Text)Analysiert den Text, extrahiert nur die Substantive und gibt eine Liste zurück
Pos(Text)Analysiert den Text und gibt eine Liste von Formen zurück (Morpheme, Wortarten, Tags)
Morphen (Text)Analysiert den Text, extrahiert nur die Morpheme und gibt eine Liste zurück

Das Ausführungsergebnis jeder Funktion ist das Beispiel der Eingabezeichenfolge unten.

* Eingabezeichenfolge: Benutzer definiert funktionale und nicht funktionale Anforderungen.

FunktionAusführungsergebnis
Substantive (Text)['Verwendung', 'Fähigkeiten', 'Anforderungen', 'Assets', 'Features', 'Anforderungen', 'Assets', 'Definitionen']
Pos(Text)[('enable', 'NNG'), ('character', 'XSN'), ('is', 'JX'), ('feature', 'NNG'), ('red', 'XSN') , ('Nachfrage', 'NNG'), ('Materie', 'NNG'), ('und', 'JC'), ('nicht', 'XPN'), ('Merkmal', 'NNG') ; , ('sollte', 'XSV+EF'), ('.', 'SF')]
Morphen (Text)['use', 'user', 'is', 'feature', 'nemesis', 'request', 'spec', 'and', 'non', 'feature', 'nemesis', 'request', ' egal', 'zu', 'definieren', 'sollte', '.']

* Eingabezeichenfolge: Datenstandardisierung ist ein wichtiger Bereich beim Aufbau von Datenarchitekturen.

FunktionAusführungsergebnis
Substantive (Text)['data', 'standards', 'data', 'architecture', 'build', 'critical', 'area']
Pos(Text)[('data', 'NNG'), ('standard', 'NNG'), ('Dienstag', 'XSN'), ('is', 'JX'), ('data', 'NNG') , ('architecture', 'NNG'), ('build', 'NNG'), ('of', 'JKG'), ('important', 'NNG'), ('one', 'XSA+ETM '), ('region', 'NNG'), ('this', 'VCP'), ('da', 'EF'), ('.', 'SF')]
Morphen (Text)['Daten', 'Standard', 'Feld', 'A', 'Daten', 'Architektur', 'Konstrukt', 'Von', 'Wichtig', 'Eins', 'Region', 'Dies', ' alle', '.']

Das Wortextraktionstool verwendet die Substantivfunktion nicht direkt, sondern extrahiert Wörter, indem es einen regulären Ausdruck auf das Ergebnis der pos-Funktion anwendet. Nachfolgend finden Sie eine Erläuterung des regulären Ausdrucksmusters.

Muster mit regulärem Ausdruck: '(NNP/|NNG/)+(XSN/)*|(XPN/)+(NNP/|NNG/)+(XSN/)*|(SL/)+'

  • Dieses Muster findet eines von drei Dingen:
    • (NNP/|NNG/)+(XSN/)*: 1 oder mehr (Eigenname oder Gattungsname) (erforderlich) + 0 oder mehr von Substantiven abgeleitete Suffixe (optional)
    • (XPN/)+(NNP/|NNG/)+(XSN/)*: 1 oder mehr Präfixe (erforderlich) + 1 oder mehr (Eigennamen oder gebräuchliche Substantive) (erforderlich) + 0 oder mehr von Substantiven abgeleitete Suffixe (optional) )
    • (SL/)+: Mindestens eine Fremdsprache (Pflichtfeld)

Beispiele für das Extrahieren von nur Substantiven durch Aufrufen von Substantiven (Text) und das Extrahieren zusätzlicher zusammengesetzter Wörter durch Anwenden regulärer Ausdrücke sind wie folgt:

* Eingabezeichenfolge: Benutzer definiert funktionale und nicht funktionale Anforderungen.

FunktionAusführungsergebnis
Extrahieren Sie nur Substantive
Substantive (Text)
Gebrauch, Funktion, Bedürfnis, Materie, Funktion, Bedürfnis, Materie, Definition
Regulären Ausdruck anwendenVerwendung, Funktion, Bedarf, Anforderung, Funktion, Anforderung, Anforderung, Definition, Benutzer[Verbindung], funktional[Verbindung], Anforderung[Verbindung], nicht-funktionale[Verbindung], Anforderung[Verbindung]

* Eingabezeichenfolge: Datenstandardisierung ist ein wichtiger Bereich beim Aufbau von Datenarchitekturen.

FunktionAusführungsergebnis
Extrahieren Sie nur Substantive
Substantive (Text)
daten, standard, daten, architektur, bauen, wichtig, bereich
Regulären Ausdruck anwendenDaten, standard, daten, architektur, konstruktion, wichtig, domäne, datenstandardisierung [compound], datenarchitekturkonstruktion [compound]

Der Grund für das zusätzliche Extrahieren des zusammengesetzten Wortes besteht darin, Probleme zu verhindern, falls das zusammengesetzte Wort später hinzugefügt wird, indem überprüft wird, ob das zusammengesetzte Wort als Standard in der frühen Stufe des Aufbaus des Standardwortverzeichnisses registriert werden soll.

Wenn später ein zusammengesetztes Wort hinzugefügt wird, kann der physische Name des Standardbegriffs unter Verwendung der einzelnen Wörter, die das zusammengesetzte Wort bilden, geändert werden, und sogar der Tabellenname und der Spaltenname der Datenbank müssen möglicherweise unter Verwendung des Standardbegriffs geändert werden.

Selbstverständlich ist es aus langfristiger Sicht empfehlenswert, nur den physikalischen Namen des zukünftig zu erstellenden Standardterms zu ändern, ohne den physikalischen Namen des bereits erstellten Standardterms zu ändern.

Es ist keine einfache Entscheidung, den physikalischen Namen eines bereits erstellten Standardbegriffs zu ändern. Wenn die Entwicklung bereits im Gange ist, müssen Sie mit der Änderung des Quellcodes fortfahren, der auf die Spalte verweist, deren Name geändert wurde. Projekte, die zusätzliche Fristen erfordern und mehrere Interessengruppen einbeziehen, können der Rechenschaftspflicht unterliegen.

In Anbetracht der Tatsache, dass eine große Menge an Quellcodeänderungen große Auswirkungen auf das Projekt haben und ziemlich schwierig sein können, ist die Überprüfung zusammengesetzter Wörter in der Anfangsphase der Erstellung eines Standardwörterbuchs ein notwendiger Prozess.

Es gab keine Möglichkeit, zusammengesetzte Wortkandidaten zu identifizieren, während man die Auswirkungen kannte, und dieses Wortextraktionstool bietet eine geeignete Methode.

Es ist vielleicht nicht optimal, aber ich denke, dass es zum jetzigen Zeitpunkt als Alternative ausreichend ist.

5.5. Arten von morphologischen Analysatorwortarten

vorherigen Post Wortextraktionstool(5): Beschreibung des Quellcodes des Wortextraktionstools(2) von 4.4._get_word_list_function hatte folgenden Inhalt:

  • Zeile 64: Führe Wortart-Tagging des Morphem-Analyzers mit der pos-Funktion aus. Ich werde die Inhalte in Bezug auf die Wortartkennzeichnung trennen.
    • Die Wortart-Markierungsfunktion pos zerlegt die Eingabezeichenfolge in Wortarteneinheiten und gibt eine Zeichenfolge zurück, in der jede Einheit gekennzeichnet ist.
    • Wenn der Text beispielsweise „Benutzer definieren funktionale und nicht funktionale Anforderungen“ lautet, lautet das Ausführungsergebnis der pos-Funktion „[(‘use‘, ‚NNG‘), (‘character‘, ‚XSN‘), (‘ is', 'JX'), ('function', 'NNG'), ('enemy', 'XSN'), ('request', 'NNG'), ('spec', 'NNG' '), ( 'and', 'JC'), ('b', 'XPN'), ('feature', 'NNG'), ('enemies', 'XSN'), ('request', 'NNG'), ( 'Ding', 'NNG'), ('zu', 'JKO'), ('Definition', 'NNG'), ('sollte', 'XSV+EF'), ('.', 'SF') ]'.
    • Unter den im obigen Beispiel markierten Wortarten ist „NNG“ ein gebräuchliches Substantiv, „XSN“ ist ein von einem Substantiv abgeleitetes Suffix, „JX“ ist ein Hilfswort, „JC“ ist ein Bindewort, „XPN“ ist ein Präfix , „JKO“ ist ein objektiver Partikel, „XSV + EF“ ist ein von einem Verb abgeleitetes Suffix + Endung und „SF“ bedeutet einen Punkt/Fragezeichen/Ausrufezeichen.

Von Mecab bereitgestellte Wortart-Tags sind im folgenden Dokument organisiert.

https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=589544265

Auszüge aus dem oben genannten Dokument sind unten zusammengefasst.

Substanzielle BedeutungHauptkategorie (5 Wörter + andere)Sejong Wortarten-Tagsmecab-en-dic Wortarten-Tag
SchildErläuterungSchildErläuterung
substantivisches MorphemCheonNNGgängiges SubstantivNNGgängiges Substantiv
NNPEigennameNNPEigenname
NNBabhängiges SubstantivNNBabhängiges Substantiv
NNBCSubstantiv, das eine Einheit bezeichnet
NRErmittlungNRErmittlung
NPPronomenNPPronomen
VerbVVVerbVVVerb
VAAdjektivVAAdjektiv
VXHilfsverbVXHilfsverb
VCPpositiver SpezifiziererVCPpositiver Spezifizierer
VCNnegativer BezeichnerVCNnegativer Bezeichner
ModifikatorMMDetektivMMDetektiv
Maggemeinsames AdverbMaggemeinsames Adverb
MAJKonjunktion AdverbMAJKonjunktion Adverb
eigenständige SpracheICZwischenrufICZwischenruf
formales Morphemrelatives WortJKSnominative UntersuchungJKSnominative Untersuchung
JKCFernuntersuchungJKCFernuntersuchung
JKGErmittlungen im SargfallJKGErmittlungen im Sargfall
JKOObjekt UntersuchungJKOObjekt Untersuchung
JKBsekundäre BranduntersuchungJKBsekundäre Branduntersuchung
JKVVokative UntersuchungJKVVokative Untersuchung
JKQZitat-CheckJKQZitat-Check
JXHilfs-JXHilfs-
JCVerbindungsuntersuchungJCVerbindungsuntersuchung
frisches Pferd mütterlicherseitsEPfrisches Pferd mütterlicherseitsEPfrisches Pferd mütterlicherseits
WortendeEFendgültiges EndeEFendgültiges Ende
EGverbindendes EndeEGverbindendes Ende
ETNEndung der SubstantivformETNEndung der Substantivform
ETMröhrenförmiges formbares Ende ETMröhrenförmiges formbares Ende
PräfixXPNKettenpräfixXPNKettenpräfix
SuffixXSNSubstantivableitungssuffixXSNSubstantivableitungssuffix
XSVVerbableitungssuffixXSVVerbableitungssuffix
XSAAdjektivableitungssuffixXSAAdjektivableitungssuffix
 WurzelXRWurzelXRWurzel
ZeichenSFPunkt, Fragezeichen, AusrufezeichenSFPunkt, Fragezeichen, Ausrufezeichen
SEEllipseSEEllipse
SSzitieren,Klammer,gepunktete LinieEinmaliges Anmeldenoffene Klammer (, [
SSCschließende Klammer ), ]
SPausruhen,Mittelpunkt,Doppelpunkt,SchrägstrichSCSeparator , · / :
SOBindestrich(Welle,versteckt,fehlen)SY 
SWAndere Symbole (logische mathematische Symbole,Währungszeichen)
außer koreanischSLFremdspracheSLFremdsprache
Schchinesisches SchriftzeichenSchchinesisches Schriftzeichen
SNAnzahlSNAnzahl

Damit ist der Artikel über das Wortextraktionstool abgeschlossen. Wenn ich eine Funktion hinzufüge oder verbessere, werde ich einen separaten Artikel schreiben.


<< Liste verwandter Artikel >>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch