diff --git a/semantics/phraseology_generator.py b/semantics/phraseology_generator.py new file mode 100644 index 0000000..5606726 --- /dev/null +++ b/semantics/phraseology_generator.py @@ -0,0 +1,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] +