Il est nécessaire d'obtenir des synonymes avec Programme pour affaiblir le japonais, et à la suite de la recherche, j'ai trouvé que WordNet était nécessaire, j'ai donc recherché WordNet. Je l'ai vu.
Japanese WordNet est "un dictionnaire de concepts japonais dans lequel les concepts individuels sont regroupés en unités appelées" synsets ", et ils sont liés sémantiquement à d'autres synsets" (par site fourni). Je pense que l'utilisation principale est la recherche de synonymes. Une enquête est requise pour d'autres utilisations.
WordNet est disponible sur ici, et il semble y en avoir plusieurs types, mais ici, "* Wordnet japonais et WordNet anglais dans Jetez un œil à une base de données sqlite3 * ".
Les 11 tableaux suivants sont inclus dans WordNet.
Parmi ceux-ci, les tables minimales requises pour obtenir les synonymes d'un mot particulier étaient le mot, le synset et le sens. Cependant, comme il n'y a pas de relation entre les informations sémantiques et cela seul, le modèle de données extrait de ces tables après avoir inclus synset_def est le suivant.
Le mot mot i </ sub> appartient au concept synset j </ sub> et est une image qui les relie au sens de l'élément. En passant, en utilisant le mot "warm" comme exemple, le résultat de la sortie de synset et synset_def est le suivant.
Maintenant, je vais vous expliquer la procédure et le programme pour obtenir une liste de synonymes en utilisant WordNet. Le flux de traitement est le suivant.
La vue d'ensemble du code est ci-dessous.
def search_synonyms(lemma, lang="jpn"):
synonym_list = []
# 1.Obtenez l'identifiant d'un mot
wobj = get_word(lemma)
if wobj:
word = wobj[0]
# 2.Comprenez le synset auquel appartient le wordid
senses = get_senses(word, lang)
for s in senses:
# 3.Obtenir des mots appartenant à des synonymes comme synonymes
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}'Aucun synonyme n'a été trouvé.")
return synonym_list
Ci-après, nous décrirons chacun des processus 1 à 3.
Le traitement de la fonction `` get_word (lemma) '' pour obtenir le mot-id du mot cible est le suivant. De plus, ici, pas le wordid seul, mais tout l'objet Word est acquis. (Du point de vue de la lisibilité et de l'extensibilité.)
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]
Le traitement de la fonction `` `get_senses (word [, lang]) '' pour obtenir le sens du mot (id) est le suivant.
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]
La limitation de langue (`lang =" jpn "`
) peut être juste le traitement suivant, mais je l'ai incluse pour le moment.
Le traitement de la fonction
get_words_from_synset (synset, word [, lang])
pour obtenir le mot lui appartenant à partir de synset est le suivant.
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]
Le dernier `` wordid <> {word.wordid} '' est inclus pour exclure le mot cible lui-même. Je pense qu'il y a quelques modèles dans la façon d'écrire SQL.
Vous pouvez obtenir des synonymes avec seulement 1 à 3, mais si vous voulez voir à quel type de concept chaque synonyme est similaire, vous pouvez également obtenir `` synset_def ''.
SynsetDef = namedtuple('SynsetDef', 'synset lang defi sid')
#Comme def ne peut pas être utilisé comme mot réservé, il est défini sur defi.
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]
Je suis désolé qu'il n'y ait pas de nouvelles informations, mais j'espère qu'elles seront utiles même un peu. c'est tout.