Ejemplo n.º 1
0
 def addPossibleWordSensesToDBs(self, *dbs):
     '''
     Adds to the databases dbs all possible word senses (and fuzzy meanings)
     based on their part of speech.
     '''
     wordnet = WordNet()
     for db in dbs:
         word2senses = defaultdict(list)
         logger.info(db.mln.domains['concept'])
         for res in db.query('has_pos(?word,?pos)'):
             word_const = res['?word']
             pos = POS_MAP.get(res['?pos'], None)
             if pos is None:
                 continue
             word = word_const.split('-')[0]
             for i, synset in enumerate(wordnet.synsets(word, pos)):
                 sense_id = '%s-%.2d' % (word_const, i + 1)
                 word2senses[word_const].append(sense_id)
                 for concept in db.mln.domains['concept']:
                     sim = wordnet.semilarity(synset, concept)
                     db << ('is_a(%s,%s)' % (sense_id, concept), sim)
         for word in word2senses:
             for word2, senses in word2senses.iteritems():
                 if word2 == word:
                     continue
                 else:
                     for s in senses:
                         db << ('!has_sense(%s,%s)' % (word, s))
Ejemplo n.º 2
0
 def addFuzzyEvidenceToDBs(self, *dbs):
     '''
     Adds to the databases dbs all fuzzy 'is_a' relationships
     for all senses contained in the DB and in the MLN.
     (has side effects on the original one)
     '''
     mln_domains = dbs[0].domains
     domains_full = mergedom(mln_domains, *[db.domains for db in dbs])
     concepts = domains_full['concept']
     wordnet = WordNet()
     for db in dbs:
         for res in db.query('is_a(?sense, ?concept)'):
             sense = res['?sense']
             concept = res['?concept']
             for c in concepts:
                 similarity = wordnet.semilarity(concept, c)
                 logger.info('{} ~ {} = {:.2f}'.format(
                     concept, c, similarity))
                 db << ('is_a({},{})'.format(sense, c), similarity)
     return dbs