An error occurred while loading the file. Please try again.
-
Kasia Krasnowska authored
* added local filtering * added missing control heuristics and reporting for compar etc. * udpated phrase descriptions * switched to new Morfeusz homonym identifiers
ca00bbcc
Meanings.py 4.24 KiB
#! /usr/bin/python
# -*- coding: utf-8 -*-
from meanings.models import LexicalUnit, Synset
from connections.models import POS
class Meaning:
def __init__(self, id, name, variant, luid, gloss, sid):
self._id = id
self._name = name
self._variant = variant
self._luid = luid
self._gloss = gloss
self._sid = sid
@classmethod
def fromTree(cls, meaning_tree):
id = meaning_tree._attrs['xml:id']
name = meaning_tree._children[0]._children[0]._content
variant = meaning_tree._children[1]._children[0]._content
luid = int(meaning_tree._children[2]._children[0]._attrs['value'])
if len(meaning_tree._children) == 4:
gloss = ""
sid = int(meaning_tree._children[3]._children[0]._attrs['value'])
elif len(meaning_tree._children) == 5:
gloss = meaning_tree._children[3]._children[0]._content
sid = int(meaning_tree._children[4]._children[0]._attrs['value'])
else:
raise UnknownError
return cls(id, name, variant, luid, gloss, sid)
def getId(self):
return self._id
def save(self, pos):
synset = Synset(id=self._sid)
synset.save()
unit = LexicalUnit(entry=None,
base=self._name,
sense=self._variant,
pos=pos,
synset=synset,
text_rep=str(self))
unit.save()
def assign_entry(self, entry):
#print('ASSIGNING ENTRY FOR:', self._name, self._variant, type(self._luid))
luid = self._luid if self._luid > 0 else None
#for unit in LexicalUnit.objects.filter(base=self._name, sense=self._variant, luid=luid):
# print(unit, unit.pos, unit.luid)
unit = LexicalUnit.objects.get(base=self._name, sense=self._variant, luid=luid)
unit.entry = entry
unit.gloss = self._gloss
unit.save()
def store(self, entry, frame):
#print(self._name, self._variant, self._luid)
luid = self._luid if self._luid > 0 else None
units = LexicalUnit.objects.filter(base=self._name, sense=self._variant, luid=luid)
if len(units) == 0:
synset = Synset(id=self._sid)
synset.save()
print('******', self._name, self._variant, entry.pos.tag)
unit = LexicalUnit(entry=None, #entry=entry, KK: LUs should be assigned to entry at Entry level
base=self._name,
sense=self._variant,
pos=entry.pos.tag,
synset=synset,
text_rep=str(self))
unit.save()
1/0
else:
try:
assert(len(units) == 1)
except:
print(entry)
for unit in units:
print(unit, '*', unit.pos, '*', unit.luid)
raise
unit = units[0]
# KK: LUs should be assigned to entry at Entry level
#unit.entry = entry
#unit.save()
frame.lexical_units.add(unit)
def get(self):
units = LexicalUnit.objects.filter(base=self._name, sense=self._variant)
if len(units) == 0:
print(self)
raise UnknownError()
else:
return units[0]
def __unicode__(self):
return '\'' + self._name + '\'-' + self._variant
def __str__(self):
return self._name + '-' + self._variant
class Meanings:
def __init__(self, meanings):
self._meanings = meanings
@classmethod
def fromTree(cls, meanings_tree):
meanings = {}
for subtree in meanings_tree._children[0]._children[0]._children:
meaning = Meaning.fromTree(subtree)
meanings[meaning.getId()] = meaning
return cls(meanings)
def getMeanings(self):
return self._meanings
def locate(self, meaning_id):
if meaning_id in self._meanings:
return self._meanings[meaning_id]
else:
return None
def __str__(self):
return '[' + ','.join([str(meaning) for meaning in self._meanings.values()]) + ']'