Es besteht die Notwendigkeit, Synonyme mit Programm zum Schwächen des Japanischen zu erhalten. Als Ergebnis der Suche stellte ich fest, dass WordNet erforderlich ist, und suchte nach WordNet. Ich sah es.
Das japanische WordNet ist "ein japanisches Konzeptwörterbuch, in dem einzelne Konzepte in Einheiten zusammengefasst werden, die als" Synsets "bezeichnet werden, und die semantisch mit anderen Synsets verknüpft sind" (von der bereitgestellten Site). Ich denke, die Hauptverwendung ist die Synonym-Suche. Für andere Zwecke ist eine Untersuchung erforderlich.
WordNet wird unter hier bereitgestellt, und es scheint verschiedene Typen zu geben, aber hier "* Japanese Wordnet und English WordNet in". Schauen Sie sich eine sqlite3-Datenbank an * ".
Die folgenden 11 Tabellen sind in WordNet enthalten.
Von diesen waren die Mindesttabellen, die erforderlich sind, um Synonyme für ein bestimmtes Wort zu erhalten, Wort, Synset und Sinn. Da es jedoch einsam ist, dass es keine Beziehung zwischen semantischer Information und dieser allein gibt, lautet das Datenmodell, das nach dem Einschließen von synset_def aus diesen Tabellen extrahiert wurde, wie folgt.
Das Wort Wort i </ sub> gehört zum Konzeptsynset j </ sub> und ist ein Bild, das sie mit dem Objektsinn verbindet. Am Beispiel des Wortes "warm" ist das Ergebnis der Ausgabe von synset und synset_def übrigens wie folgt.
Jetzt werde ich die Vorgehensweise und das Programm erläutern, um mithilfe von WordNet eine Liste von Synonymen zu erhalten. Der Verarbeitungsablauf ist wie folgt.
Das große Bild des Codes ist unten.
def search_synonyms(lemma, lang="jpn"):
synonym_list = []
# 1.Holen Sie sich die Wort-ID eines Wortes
wobj = get_word(lemma)
if wobj:
word = wobj[0]
# 2.Erhalten Sie den Sinn des Synsets, zu dem die Wort-ID gehört
senses = get_senses(word, lang)
for s in senses:
# 3.Holen Sie sich Wörter, die zu Synset gehören, als Synonyme
synonyms = get_words_from_synset(s.synset, word, lang)
for syn in synonyms:
if syn.lemma not in synonym_list:
synonym_list.append(syn.lemma)
else:
print(f"'{lemma}'Es wurden keine Synonyme für gefunden.")
return synonym_list
Im Folgenden werden wir jeden der Prozesse 1 bis 3 beschreiben.
Die Verarbeitung der Funktion `get_word (lemma)`
zum Abrufen der Wort-ID des Zielworts ist wie folgt.
Außerdem wird hier nicht nur die Wort-ID, sondern das gesamte Word-Objekt erfasst. (Unter dem Gesichtspunkt der Lesbarkeit und Erweiterbarkeit.)
Word = namedtuple('Word', 'wordid lang lemma pron pos')
def get_word(lemma):
cur = conn.execute("select * from word where lemma=?", (lemma,))
return [Word(*row) for row in cur]
Die Verarbeitung der Funktion `get_senses (word [, lang])`
, um den Sinn von word (id) zu erhalten, ist wie folgt.
Sense = namedtuple('Sense', 'synset wordid lang rank lexid freq src')
def get_senses(word, lang):
cur = conn.execute("select * from sense where wordid=? and lang=?", (word.wordid, lang))
return [Sense(*row) for row in cur]
Die Sprachbeschränkung (`lang =" jpn "`
) kann nur die folgende Verarbeitung sein, aber ich habe sie vorerst aufgenommen.
Die Verarbeitung der Funktion `get_words_from_synset (synset, word [, lang])`
zum Abrufen des dazugehörigen Wortes von synset erfolgt wie folgt.
def get_words_from_synset(synset, word):
cur = conn.execute("select * from word where wordid in (select wordid from sense where synset=? and lang=?) and wordid<>?;", (synset, lang, word.wordid))
return [Word(*row) for row in cur]
Die letzte `wordid <> {word.wordid}`
ist enthalten, um das Zielwort selbst auszuschließen. Ich denke, es gibt einige Muster beim Schreiben von SQL.
Sie könnten Synonyme mit nur 1 bis 3 erhalten, aber wenn Sie sehen möchten, welcher Art von Konzept jedes Synonym ähnelt, können Sie auch `` `synset_def``` erhalten.
SynsetDef = namedtuple('SynsetDef', 'synset lang defi sid')
#Da def nicht als reserviertes Wort verwendet werden kann, wird es auf defi gesetzt.
def get_synset_def_from_synset(synset, lang):
cur = conn.execute("select * from synset_def where synset=? and lang=?", (synset, lang))
return [SynsetDef(*row) for row in cur]
Es tut mir leid, dass es keine neuen Informationen gibt, aber ich hoffe, dass sie auch nur ein wenig hilfreich sein werden. das ist alles.