models.py 2.02 KB
# -*- coding: utf-8 -*-

from django.db.models import AutoField, BooleanField, CharField, \
                             FloatField, ForeignKey,  Model, \
                             PositiveIntegerField, TextField, URLField
from django.db.models.fields.related import ManyToManyField


class Meaning(Model):
    id = AutoField(primary_key=True)
    plWN_synset = PositiveIntegerField(blank=True, null=True)
    wikilink = URLField(blank=True, null=True)
    description = TextField(blank=True, null=True)
    category = ForeignKey('Category', related_name='meanings')

    def __unicode__(self):
        return ' = '.join(['<%s>' % expr.text if expr.main_expression else expr.text
                           for expr in self.expressions.all()])

    
class Expression(Model):
    id = AutoField(primary_key=True)
    text = TextField()
    meaning = ForeignKey('Meaning', related_name='expressions')
    sources = ManyToManyField('Source', related_name='expressions')
    score = FloatField()
    NKJP_freq = PositiveIntegerField()
    main_expression = ForeignKey('Expression', related_name='mentions',
                                 blank=True, null=True)

    def __unicode__(self):
        return self.text

    
class Source(Model):
    key = CharField(max_length=16, primary_key=True)
    name = CharField(max_length=32)
    description = TextField(blank=True, null=True)
    url = URLField(blank=True, null=True)

    def __unicode__(self):
        return self.name


class Segment(Model):
    position_in_expr = PositiveIntegerField()
    expression = ForeignKey('Expression', related_name='segments')
    orth = CharField(max_length=32)
    base = CharField(max_length=32)
    ctag = CharField(max_length=8)
    msd = CharField(max_length=32)
    is_head = BooleanField(default=False)

    def __unicode__(self):
        return self.orth


class Category(Model):
    key = CharField(max_length=16, primary_key=True)
    name = CharField(max_length=32)
    description = TextField(blank=True, null=True)

    def __unicode__(self):
        return self.name