Avant d'aborder WordNet, abordons brièvement le traitement du langage naturel. Pour que les machines comprennent des phrases dans le traitement du langage naturel, les tâches suivantes, étape par étape, d'analyse morphologique, d'analyse syntaxique, d'analyse sémantique et d'analyse de contexte sont principalement nécessaires.
C'est une tâche de diviser et de discriminer des données textuelles en langage naturel sans notes d'information en colonnes d'éléments morphologiques (unité minimale qui a un sens dans la langue) sur la base d'informations telles que la grammaire de la langue cible et les paroles des mots appelés dictionnaires.
Par exemple, l'analyse morphologique de «En attente de vous» est la suivante.
Référence: wikipedia
MeCab est un outil d'analyse morphologique typique.
S'il s'agit d'un langage naturel, c'est une procédure à clarifier en le divisant en éléments morphologiques et en traçant la relation.
Par exemple, lorsqu'il y a une phrase "Beautiful Water Wheelhouse Maiden", les deux syntaxes suivantes peuvent être prises en compte.
Référence: wikipedia
Nous analyserons le type de connexion en fonction des informations de la morphologie environnante. Cabocha est un outil d'analyse typique.
C'est une procédure pour donner des connaissances à la machine. Par exemple, si vous avez la phrase suivante:
"Le mont Fuji et la mer sont magnifiques"
C'est cher pour les humains, mais il est facile de voir de quel mot cela dépend. Même s'il y a un «mont Fuji élevé», on peut intuitivement juger qu'il n'y a pas de «haute mer». Cependant, la machine n'ayant aucune connaissance, on ne peut pas juger que la "haute mer" est étrange.
Un type de cissolus. Un dictionnaire de synonymes qui classe et organise les mots en fonction de leurs relations supérieures / inférieures, des relations partielles / totales, des synonymes et des synonymes. Il s'agit d'une systématisation de la façon dont chaque mot est lié, et est utilisé dans l'analyse sémantique mentionnée ci-dessus.
Par exemple, dans le cas du «vélo de route», les concepts de niveau supérieur qui incluent «vélo de route» sont «moto» et «véhicule», et les concepts de niveau inférieur sont «nu» et «américain». Notez que "scouter" et "off-road bike", qui sont écrits en parallèle avec "bike", peuvent être considérés comme des termes similaires.
Ceux-ci sont déjà organisés pour une utilisation programmatique et peuvent être téléchargés ci-dessous. Il est publié sur sqlite et peut être lu en utilisant sql.
http://compling.hss.ntu.edu.sg/wnja/
liste des tables et des colonnes
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()
--Résultat 1
###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()
--Résultat 2 Afficher seulement une partie
(249100, 'jpn', 'Assiette creuse', None, 'n')
(249101, 'jpn', 'Étendue', None, 'v')
(249102, 'jpn', 'Astringent', None, 'n')
(249103, 'jpn', 'Affirmation', None, 'n')
(249104, 'jpn', 'Allborg', None, 'n')
(249105, 'jpn', 'Derrière le côté', None, 'n')
(249106, 'jpn', 'réparation', None, 'n')
(249107, 'jpn', 'Commodité', None, 'n')
(249108, 'jpn', 'Commodité', None, 'a')
(249109, 'jpn', 'Vilas', None, 'n')
(249110, 'jpn', 'Démodé', None, 'a')
(249111, 'jpn', 'Couper', None, 'n')
(249112, 'jpn', 'Couper', None, 'a')
(249113, 'jpn', 'Super texte', None, 'n')
(249114, 'jpn', 'Maladie sexuelle', None, 'n')
(249115, 'jpn', 'Encre Mayu', None, 'n')
(249116, 'jpn', 'ourlet', None, 'n')
(249117, 'jpn', 'Non intime', None, 'a')
(249118, 'jpn', 'Matériel scientifique', None, 'n')
(249119, 'jpn', 'Retour en arrière', None, 'v')
(249120, 'jpn', 'Répéter', None, 'v')
(249121, 'jpn', 'volonté', None, 'n')
import sqlite3
conn = sqlite3.connect("wnjpn.db")
def main(word):
print("")
print("")
print("##contribution: 【",word,"】")
print("")
#Vérifiez si le mot existe dans Wordnet
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
#Obtenez le concept
cur = conn.execute("select synset from sense where wordid='%s'" % word_id)
synsets = []
for row in cur:
synsets.append(row[0])
print(synsets)
#Affichage des mots contenus dans le concept
for synset in synsets:
cur1 = conn.execute("select name from synset where synset='%s'" % synset)
for row1 in cur1:
print("##concept: %s" %(row1[0]))
cur2 = conn.execute("select def from synset_def where (synset='%s' and lang='jpn')" % synset)
for row2 in cur2:
print("##sens: %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("Synonymes"+str(i+1)+": %s" % (row3_1[0]))
print()
if __name__=="__main__":
word="Voiture"
main(word)
--Résultat 3
##contribution:【 Voiture 】
['03791235-n', '02958343-n']
##concept: motor_vehicle
##sens:Véhicules à roues automotrices qui ne roulent pas sur des rails
Synonymes 1: motor_vehicle
Synonymes 2: automotive_vehicle
Synonymes 3:Véhicule à moteur
##concept: auto
##sens:Voiture à 4 roues
##sens:Habituellement propulsé par un moteur à combustion interne
Synonymes 1: auto
Synonymes 2: motorcar
Synonymes 3: machine
Synonymes 4: car
Synonymes 5: automobile
Synonymes 6:Quatre roues
Synonymes 7:Voiture
Synonymes 8:voiture
Synonymes 9:Voiture de voyageurs
Synonymes 10:Voiture
Synonymes 11:Voiture
Si vous entrez "automobile" comme flux d'extraction de mots similaires, suivez d'abord les concepts supérieurs d'automobiles "motor_vehicle" et "auto", et extrayez les mots en dessous pour extraire les mots qui sont en parallèle avec "automobile". Je le retire.
Recommended Posts