From 9251999bcd17a75fcb84621e5a9a110c9639bbfd Mon Sep 17 00:00:00 2001 From: dcz <dcz@ipipan.waw.pl> Date: Wed, 18 May 2022 12:58:55 +0200 Subject: [PATCH] unifier first models --- unifier/__init__.py | 0 unifier/models.py | 104 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 unifier/__init__.py create mode 100644 unifier/models.py diff --git a/unifier/__init__.py b/unifier/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unifier/models.py b/unifier/models.py new file mode 100644 index 0000000..7d717b4 --- /dev/null +++ b/unifier/models.py @@ -0,0 +1,104 @@ +from django.db import models + +from meanings.models import LexicalUnit, Synset + +class UnifiedLexicalUnitCluster(models.Model): + lexical_units = models.ManyToManyField(LexicalUnit, related_name='UnifiedLexicalUnitCluster') + + def __str__(self): + return '%s: %s' % (self.opinion, ' + '.join([str(arg) for arg in self.sorted_arguments()])) + +class UnifiedFrameStatus(models.Model): + status = models.CharField(max_length=20) + + def __str__(self): + return self.status + +class UnifiedFrame(models.Model): + unified_lexical_unit_cluster = models.ForeignKey(UnifiedLexicalUnitCluster, on_delete=models.PROTECT) + status = models.ForeignKey(UnifiedFrameStatus, on_delete=models.PROTECT) + arguments_count = models.PositiveIntegerField(null=False, default=0) + + def sorted_arguments(self): # TODO: zaimplementowac wlasciwe sortowanie + return Argument.objects.filter(frame=self) + + def __str__(self): + return '%s: %s' % (self.opinion, ' + '.join([str(arg) for arg in self.sorted_arguments()])) + + + + + +class Argument(models.Model): + role = models.ForeignKey('ArgumentRole', on_delete=models.PROTECT) + predefined = models.ManyToManyField('PredefinedSelectionalPreference') + synsets = models.ManyToManyField(Synset) + relations = models.ManyToManyField('RelationalSelectionalPreference') + frame = models.ForeignKey(Frame, related_name='arguments', on_delete=models.PROTECT) + preferences_count = models.PositiveIntegerField(null=False, default=0) + + def __str__(self): + return str(self.role) + + +class ArgumentRole(models.Model): + role = models.ForeignKey('SemanticRole', on_delete=models.PROTECT) + attribute = models.ForeignKey('RoleAttribute', null=True, on_delete=models.PROTECT) + + def __str__(self): + if self.attribute is None: + return str(self.role) + else: + return '{}, {}'.format(str(self.role), str(self.attribute)) + + +class SemanticRole(models.Model): + role = models.CharField(max_length=20) + color = models.CharField(max_length=11, null=True) + priority = models.PositiveIntegerField() + + class Meta: + ordering = ['priority'] + + def __str__(self): + return self.role + + +class RoleAttribute(models.Model): + attribute = models.CharField(max_length=20) + gradient = models.CharField(max_length=10, null=True) + priority = models.PositiveIntegerField() + + class Meta: + ordering = ['priority'] + + def __str__(self): + return self.attribute + + +class PredefinedSelectionalPreference(models.Model): + key = models.CharField(max_length=20, unique=True) + # name = TODO: wymaga lokalizacji + + def __str__(self): + return self.key + + +class RelationalSelectionalPreference(models.Model): + relation = models.ForeignKey('SelectionalPreferenceRelation', on_delete=models.PROTECT) + to = models.ForeignKey('Argument', on_delete=models.PROTECT) + + def __str__(self): + return '%s -> %s' % (self.relation, self.to) + + +class SelectionalPreferenceRelation(models.Model): + key = models.CharField(max_length=40, unique=True) + # name = TODO: wymaga lokalizacji + plwn_id = models.IntegerField(null=True) + + class Meta: + ordering = ['key'] + + def __str__(self): + return self.key -- GitLab