models.py
3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# -*- coding: utf-8 -*-
from django.db.models import AutoField, BooleanField, CharField, \
FloatField, ForeignKey, Model, OneToOneField, \
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(max_length=400, blank=True, null=True)
description = TextField(blank=True, null=True)
domains = ManyToManyField('Domain', related_name='meanings')
def add_domains(self, dom_names):
for name in dom_names:
domain_obj, _ = Domain.objects.get_or_create(name=name)
self.domains.add(domain_obj)
def __unicode__(self):
return ' = '.join(['<%s>' % expr.text if expr.main_expression else expr.text
for expr in self.expressions.all()])
def get_or_create_meaning(plWN_synset, wikilink):
created = False
meaning = None
if plWN_synset:
try:
meaning = Meaning.objects.get(plWN_synset=plWN_synset)
except Meaning.DoesNotExist:
pass
if wikilink and meaning == None:
try:
meaning = Meaning.objects.get(wikilink=wikilink)
except Meaning.DoesNotExist:
pass
if meaning == None:
meaning = Meaning.objects.create(plWN_synset=plWN_synset, wikilink=wikilink)
created = True
return meaning, created
class Expression(Model):
id = AutoField(primary_key=True)
text = TextField()
base_text = TextField()
orth_text = TextField()
meaning = ForeignKey('Meaning', related_name='expressions')
score = FloatField()
NKJP_freq = PositiveIntegerField()
is_catchword = BooleanField(default=False)
main_expression = ForeignKey('Expression', related_name='mentions',
blank=True, null=True)
def lemmatized_form(self):
base_forms = [segment.base for segment in self.segments.order_by('position_in_expr')]
return u' '.join(base_forms)
def __unicode__(self):
return self.text
class SourceLink(Model):
expression = OneToOneField('Expression', related_name='link')
source = ForeignKey('Source', related_name='links')
exact_link = URLField(max_length=400, blank=True, null=True)
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)
class Meta:
ordering = ['name']
def __unicode__(self):
return self.name
class Segment(Model):
position_in_expr = PositiveIntegerField()
expression = ForeignKey('Expression', related_name='segments')
orth = CharField(max_length=64)
base = CharField(max_length=64)
ctag = CharField(max_length=8)
msd = CharField(max_length=64)
is_head = BooleanField(default=False)
has_nps = BooleanField(default=False)
def __unicode__(self):
return self.orth
class Domain(Model):
id = AutoField(primary_key=True)
name = CharField(max_length=128)
description = TextField(blank=True, null=True)
class Meta:
ordering = ['name']
def __unicode__(self):
return self.name