phraseology_generator.py
2.51 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
# -*- coding: utf-8 -*-
from dictionary.models import sort_arguments, sort_positions, sortatributes
from settings import MORFEUSZ2
def lexicalisation(argument):
b = argument.type
if b == 'fixed':
return get_words(sortatributes(argument)[-1])
attributes = sortatributes(argument)
lexicalisation_type = attributes[0].values.all()[0].argument.type
lexicalisation_parameters = sortatributes(attributes[0].values.all()[0].argument)
if lexicalisation_type == 'xp': # xp(...)[np/prepnp], ...
lexicalisation_type = lexicalisation_parameters[0].values.all()[0].argument.type
lexicalisation_parameters = sortatributes(lexicalisation_parameters[0].values.all()[0].argument)
if lexicalisation_type == 'np': # np(case), number, nouns, atr
nps = get_nps(get_case(lexicalisation_parameters[0]), get_number(attributes[1]), get_words(attributes[2]), attributes[3])
return nps
elif lexicalisation_type == 'prepnp': #prepnp(prep, case), number, nouns, atr
prepnps = get_prepnps(get_preposition(lexicalisation_parameters[0]), get_case(lexicalisation_parameters[1]), get_number(attributes[1]), get_words(attributes[2]), attributes[3])
return prepnps
else:
return []
return []
def get_preposition(attribute):
return attribute.values.all()[0].parameter.type.name
def get_words(attribute):
words = [word.text[1:-1] for word in attribute.values.all()]
return words
def get_case(attribute):
case = attribute.values.all()[0].parameter.type.name
if case == u'str':
case = u'acc'
return case
def get_number(attribute):
number = attribute.values.all()[0].parameter.type.name
return number
def get_nps(case, number, nouns, _atr):
result = []
for noun in nouns:
options = [(interp.orth, interp.getTag(MORFEUSZ2)) for interp in MORFEUSZ2.generate(noun.encode('utf8'))]
if case != u'_':
filtered = []
for option in options:
(orth, tag) = option
if case in tag:
filtered.append(option)
options = filtered
if number != u'_':
filtered = []
for option in options:
(orth, tag) = option
if number in tag:
filtered.append(option)
options = filtered
return [orth for orth, _ in options]
def get_prepnps(prep, case, number, nouns, _atr):
# ala["ma"] = kot
nps = get_nps(case, number, nouns, _atr)
return [prep + ' ' + np for np in nps]