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.
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.
Referenz: Wikipedia
MeCab ist ein typisches morphologisches Analysewerkzeug.
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.
Referenz: Wikipedia
Wir werden anhand der Informationen der umgebenden Morphologie analysieren, welche Art von Verbindung besteht. Cabocha ist ein typisches Analysewerkzeug.
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.
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.
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.
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')
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)
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')
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