[PYTHON] [Maschinelles Lernen] Extrahieren Sie ähnliche Wörter mechanisch mit WordNet

Überblick über die Verarbeitung natürlicher Sprache

Bevor wir auf WordNet eingehen, wollen wir kurz auf die Verarbeitung natürlicher Sprache eingehen. Damit Maschinen Sätze in der Verarbeitung natürlicher Sprache verstehen können, sind hauptsächlich die folgenden schrittweisen Aufgaben der morphologischen Analyse, syntaktischen Analyse, semantischen Analyse und Kontextanalyse erforderlich.

Morphologische Analyse

Es ist eine Aufgabe, Textdaten in natürlicher Sprache ohne Informationsnotizen in Spalten mit morphologischen Elementen (Mindesteinheit, die in der Sprache eine Bedeutung hat) zu unterteilen und zu unterscheiden, basierend auf Informationen wie der Grammatik der Zielsprache und dem Teiltext von Wörtern, die Wörterbücher genannt werden.

Zum Beispiel ist die morphologische Analyse von "Warten auf Sie" wie folgt. morph.png

Referenz: Wikipedia

MeCab ist ein typisches morphologisches Analysewerkzeug.

Parsing

Wenn es sich um eine natürliche Sprache handelt, ist es ein Verfahren, sie in morphologische Elemente zu unterteilen und die Beziehung durch Zeichnen zu klären.

Wenn beispielsweise ein Satz "Beautiful Water Wheelhouse Maiden" vorkommt, können die folgenden zwei Syntaxen berücksichtigt werden.

b1.png

b2.png

Referenz: Wikipedia

Wir werden anhand der Informationen der umgebenden Morphologie analysieren, welche Art von Verbindung besteht. Cabocha ist ein typisches Analysewerkzeug.

Semantische Analyse

Es ist ein Verfahren, um der Maschine Wissen zu vermitteln. Zum Beispiel, wenn Sie den folgenden Satz haben:

"Der hohe Berg Fuji und das Meer sind wunderschön"

Es ist teuer für Menschen, aber es ist leicht zu erkennen, von welchem Wort es abhängt. Selbst wenn es einen "hohen Berg Fuji" gibt, kann intuitiv beurteilt werden, dass es kein "hohes Meer" gibt. Da die Maschine jedoch keine Kenntnisse hat, kann nicht beurteilt werden, dass die "hohe See" seltsam ist.

Was ist WordNet?

Eine Art Cissolus. Ein Synonymwörterbuch, das Wörter nach ihren übergeordneten / untergeordneten Beziehungen, Teil- / Gesamtbeziehungen, Synonymen und Synonymen klassifiziert und organisiert. Es ist eine Systematisierung der Beziehung zwischen den einzelnen Wörtern und wird in der oben genannten semantischen Analyse verwendet.

wordnet.png

Zum Beispiel sind im Fall von "On-Road-Bike" die übergeordneten Konzepte, die "On-Road-Bike" umfassen, "Motorrad" und "Fahrzeug", und die untergeordneten Konzepte sind "nackt" und "amerikanisch". Beachten Sie, dass "Roller" und "Offroad-Fahrrad", die parallel zu "Fahrrad" geschrieben sind, als ähnliche Begriffe angesehen werden können.

Verwenden

Diese sind bereits für den programmatischen Gebrauch organisiert und können unten heruntergeladen werden. Es wird auf SQLite veröffentlicht und kann mit SQL gelesen werden.

--Tabelle und Spaltenliste

pos_def ('pos', lang', def')
link_def ('link', lang','def')
synset_def ('synset', 'lang', 'def', sid')
synset_ex ('synset', 'lang', 'def', 'sid')
synset ('synset', 'pos', 'name', 'src')
synlink ('synset1', synset2', 'link', 'src')
ancestor ('synset1', 'synset2', 'hops')
sense ('synset' ,'wordid','lang', 'rank', 'lexid','freq','src')
word ('wordid','lang', 'lemma', 'pron', 'pos')
variant ('varid','wordid','lang', 'lemma','vartype')
xlink ('synset', 'resource','xref', 'misc', 'confidence')

column.png

Programm

Bestätigung 1: Bestätigen Sie die Spalten jeder Tabelle

import sqlite3
conn = sqlite3.connect("wnjpn.db")

def chk_table():
    print("")
    print("###word table info")
    cur = conn.execute("select count(*) from word")
    for row in cur:
        print("word num:" +str(row[0]))

    cur = conn.execute("select name from sqlite_master where type='table'")
    for row in cur:
        print("=======================================")
        print(row[0])
        cur = conn.execute("PRAGMA TABLE_INFO("+row[0]+")")
        for row in cur:
            print(row)

if __name__=="__main__":
    chk_table()

###word table info
word num:249121
=======================================
pos_def
(0, 'pos', 'text', 0, None, 0)
(1, 'lang', 'text', 0, None, 0)
(2, 'def', 'text', 0, None, 0)
=======================================
link_def
(0, 'link', 'text', 0, None, 0)
(1, 'lang', 'text', 0, None, 0)
(2, 'def', 'text', 0, None, 0)
=======================================
synset_def
(0, 'synset', 'text', 0, None, 0)
(1, 'lang', 'text', 0, None, 0)
(2, 'def', 'text', 0, None, 0)
(3, 'sid', 'text', 0, None, 0)
=======================================
synset_ex
(0, 'synset', 'text', 0, None, 0)
(1, 'lang', 'text', 0, None, 0)
(2, 'def', 'text', 0, None, 0)
(3, 'sid', 'text', 0, None, 0)
=======================================
synset
(0, 'synset', 'text', 0, None, 0)
(1, 'pos', 'text', 0, None, 0)
(2, 'name', 'text', 0, None, 0)
(3, 'src', 'text', 0, None, 0)
=======================================
synlink
(0, 'synset1', 'text', 0, None, 0)
(1, 'synset2', 'text', 0, None, 0)
(2, 'link', 'text', 0, None, 0)
(3, 'src', 'text', 0, None, 0)
=======================================
ancestor
(0, 'synset1', 'text', 0, None, 0)
(1, 'synset2', 'text', 0, None, 0)
(2, 'hops', 'int', 0, None, 0)
=======================================
sense
(0, 'synset', 'text', 0, None, 0)
(1, 'wordid', 'integer', 0, None, 0)
(2, 'lang', 'text', 0, None, 0)
(3, 'rank', 'text', 0, None, 0)
(4, 'lexid', 'integer', 0, None, 0)
(5, 'freq', 'integer', 0, None, 0)
(6, 'src', 'text', 0, None, 0)
=======================================
word
(0, 'wordid', 'integer', 0, None, 1)
(1, 'lang', 'text', 0, None, 0)
(2, 'lemma', 'text', 0, None, 0)
(3, 'pron', 'text', 0, None, 0)
(4, 'pos', 'text', 0, None, 0)
=======================================
variant
(0, 'varid', 'integer', 0, None, 1)
(1, 'wordid', 'integer', 0, None, 0)
(2, 'lang', 'text', 0, None, 0)
(3, 'lemma', 'text', 0, None, 0)
(4, 'vartype', 'text', 0, None, 0)
=======================================
xlink
(0, 'synset', 'text', 0, None, 0)
(1, 'resource', 'text', 0, None, 0)
(2, 'xref', 'text', 0, None, 0)
(3, 'misc', 'text', 0, None, 0)
(4, 'confidence', 'text', 0, None, 0)

Bestätigung 2: Bestätigen Sie das registrierte Wort (Japanisch)

import sqlite3
conn = sqlite3.connect("wnjpn.db")


def chk_word():
    #cur = conn.execute("select * from word limit 240000")
    cur = conn.execute("select * from word  where lang='jpn' limit 240000")
    for row in cur:
        print(row)

if __name__=="__main__":
    chk_word()

(249100, 'jpn', 'Suppenteller', None, 'n')
(249101, 'jpn', 'Strecken', None, 'v')
(249102, 'jpn', 'Adstringierend', None, 'n')
(249103, 'jpn', 'Bejahung', None, 'n')
(249104, 'jpn', 'Allborg', None, 'n')
(249105, 'jpn', 'Hinter der Seite', None, 'n')
(249106, 'jpn', 'Reparatur', None, 'n')
(249107, 'jpn', 'Bequemlichkeit', None, 'n')
(249108, 'jpn', 'Bequemlichkeit', None, 'a')
(249109, 'jpn', 'Vilas', None, 'n')
(249110, 'jpn', 'Altmodisch', None, 'a')
(249111, 'jpn', 'Abgeschnitten', None, 'n')
(249112, 'jpn', 'Abgeschnitten', None, 'a')
(249113, 'jpn', 'Super Text', None, 'n')
(249114, 'jpn', 'Sexuelle Krankheit', None, 'n')
(249115, 'jpn', 'Mayu-Tinte', None, 'n')
(249116, 'jpn', 'Saum', None, 'n')
(249117, 'jpn', 'Nicht intim', None, 'a')
(249118, 'jpn', 'Wissenschaftliche Ausrüstung', None, 'n')
(249119, 'jpn', 'Backtrack', None, 'v')
(249120, 'jpn', 'Wiederholen', None, 'v')
(249121, 'jpn', 'werden', None, 'n')

Bestätigung 3: Synonyme extrahieren

import sqlite3
conn = sqlite3.connect("wnjpn.db")


def main(word):
    print("")
    print("")
    print("##Eingang: 【",word,"】")
    print("")


    #Überprüfen Sie, ob das Wort in Wordnet vorhanden ist
    cur = conn.execute("select wordid from word where lemma='%s'" % word)
    word_id = 99999999
    for row in cur:
        word_id = row[0]
    if word_id==99999999:
        print("「%s」is not exist" % word)
        return

    #Holen Sie sich das Konzept
    cur = conn.execute("select synset from sense where wordid='%s'" % word_id)
    synsets = []
    for row in cur:
        synsets.append(row[0])
    print(synsets)

    #Anzeige der im Konzept enthaltenen Wörter
    for synset in synsets:
        cur1 = conn.execute("select name from synset where synset='%s'" % synset)
        for row1 in cur1:
            print("##Konzept: %s" %(row1[0]))
        cur2 = conn.execute("select def from synset_def where (synset='%s' and lang='jpn')" % synset)
        for row2 in cur2:
            print("##Bedeutung: %s" %(row2[0]))

        cur3 = conn.execute("select wordid from sense where (synset='%s' and wordid!=%s)" % (synset,word_id))
        for i,row3 in enumerate(cur3):
            target_word_id = row3[0]
            cur3_1 = conn.execute("select lemma from word where wordid=%s" % target_word_id)
            for row3_1 in cur3_1:
                print("Synonyme"+str(i+1)+": %s" % (row3_1[0]))

        print()

if __name__=="__main__":
    word="Wagen"
    main(word)

##Eingang:【 Wagen 】

['03791235-n', '02958343-n']
##Konzept: motor_vehicle
##Bedeutung:Fahrzeuge mit selbstfahrenden Rädern, die nicht auf Schienen fahren
Synonyme 1: motor_vehicle
Synonyme 2: automotive_vehicle
Synonyme 3:Kraftfahrzeug

##Konzept: auto
##Bedeutung:4-Rad Auto
##Bedeutung:Wird normalerweise von einem Verbrennungsmotor angetrieben
Synonyme 1: auto
Synonyme 2: motorcar
Synonyme 3: machine
Synonyme 4: car
Synonyme 5: automobile
Synonyme 6:Allrad
Synonyme 7:Automobil
Synonyme 8:Wagen
Synonyme 9:Personenkraftwagen
Synonyme 10:Automobil
Synonyme 11:Automobil

Wenn Sie "automobile" als Ablauf einer ähnlichen Wortextraktion eingeben, folgen Sie zunächst den übergeordneten Konzepten der Automobile "motor_vehicle" und "auto" und extrahieren Sie die Wörter darunter, um die Wörter zu extrahieren, die parallel zu "automobile" sind. Ich nehme es raus.

Recommended Posts

[Maschinelles Lernen] Extrahieren Sie ähnliche Wörter mechanisch mit WordNet
Anwendungsentwicklung mit Azure Machine Learning
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
[Maschinelles Lernen] FX-Vorhersage unter Verwendung des Entscheidungsbaums
Maschinelles Lernen
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung
Aktienkursprognose mit maschinellem Lernen (Return Edition)
[Maschinelles Lernen] Regressionsanalyse mit Scicit Learn
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
Kausales Denken mit maschinellem Lernen (Organisation von Methoden des kausalen Denkens)
Klassifikation des maschinellen Lernens
Beispiel für maschinelles Lernen
Was ich über KI / maschinelles Lernen mit Python gelernt habe (1)
Erstellen Sie maschinelle Lernprojekte mit explosiver Geschwindigkeit mithilfe von Vorlagen
Was ich über KI / maschinelles Lernen mit Python gelernt habe (3)
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Tech-Circle Beginnen wir mit der Anwendungsentwicklung durch maschinelles Lernen (Selbststudium)
Versuchen Sie, hochfrequente Wörter mit NLTK (Python) zu extrahieren.
[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
Was ich über KI / maschinelles Lernen mit Python gelernt habe (2)
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren