예제 #1
0
파일: logic.py 프로젝트: he1mdallr/the-tale
def update_words_usage_info():

    in_game_words = collections.Counter()
    on_review_words = collections.Counter()

    empty_dictionary = utg_dictionary.Dictionary()

    for template in prototypes.TemplatePrototype.from_query(
            prototypes.TemplatePrototype._db_all()):
        words = template.utg_template.get_undictionaried_words(
            externals=[v.value for v in template.key.variables],
            dictionary=empty_dictionary)
        if template.state.is_IN_GAME:
            in_game_words.update(words)

        if template.state.is_ON_REVIEW:
            on_review_words.update(words)

    for word in prototypes.WordPrototype.from_query(
            prototypes.WordPrototype._db_all()):
        word.update_used_in_status(used_in_ingame_templates=sum(
            (in_game_words.get(form, 0) for form in set(word.utg_word.forms)),
            0),
                                   used_in_onreview_templates=sum(
                                       (on_review_words.get(form, 0)
                                        for form in set(word.utg_word.forms)),
                                       0),
                                   force_update=True)
예제 #2
0
    properties=words.Properties(
        r.ANIMALITY.INANIMATE,
        r.GENDER.FEMININE))  # свойства: неодушевлённое, женский род

# описываем глагол для словаря
action_word = words.Word(
    type=r.WORD_TYPE.VERB,
    # описываем только нужны нам формы слова (порядок важен и определён в utg.data.WORDS_CACHES[r.WORD_TYPE.VERB])
    forms=[u'подарить', u'подарил', u'подарило', u'подарила', u'подарили'] +
    [u''] * (len(data.WORDS_CACHES[r.WORD_TYPE.VERB]) - 5),
    properties=words.Properties(r.ASPECT.PERFECTIVE, r.VOICE.DIRECT))
action_word.autofill_missed_forms(
)  # заполняем пропущенные формы на основе введённых (выбираются наиболее близкие)

# создаём словарь для использования в шаблонах
test_dictionary = dictionary.Dictionary(words=[coins_word, action_word])

# описываем внешние переменные
hero = words.WordForm(
    words.Word(type=r.WORD_TYPE.NOUN,
               forms=[
                   u'герой', u'героя', u'герою', u'героя', u'героем', u'герое',
                   u'герои', u'героев', u'героям', u'героев', u'героями',
                   u'героях', u'герои', u'героев', u'героям', u'героев',
                   u'героями', u'героях'
               ],
               properties=words.Properties(r.ANIMALITY.ANIMATE,
                                           r.GENDER.MASCULINE)))

npc = words.WordForm(
    words.Word(type=r.WORD_TYPE.NOUN,
예제 #3
0
                            u'игра', u'игры', u'игре', u'игру', u'игрой',
                            u'игре', u'игры', u'игр', u'играми', u'игры',
                            u'играми', u'играх', u'игры', u'игр', u'играм',
                            u'игры', u'играми', u'играх'
                        ],
                        properties=words.Properties(r.ANIMALITY.INANIMATE,
                                                    r.GENDER.FEMININE))

action_word = words.Word(
    type=r.WORD_TYPE.VERB,
    forms=[u'дать', u'дал', u'дало', u'дала', u'дали'] + [u''] *
    (len(data.WORDS_CACHES[r.WORD_TYPE.VERB]) - 5),
    properties=words.Properties(r.ASPECT.PERFECTIVE, r.VOICE.DIRECT))
action_word.autofill_missed_forms()

test_dictionary = dictionary.Dictionary(words=[games_word, action_word])

template = templates.Template()

template.parse(u'[Npc] [дал|npc] [hero|дт] [games] [игра|games|вн].',
               externals=('hero', 'npc', 'games'))

hero = words.WordForm(
    words.Word(type=r.WORD_TYPE.NOUN,
               forms=[
                   u'герой', u'героя', u'герою', u'героя', u'героем', u'герое',
                   u'герои', u'героев', u'героям', u'героев', u'героями',
                   u'героях', u'герои', u'героев', u'героям', u'героев',
                   u'героями', u'героях'
               ],
               properties=words.Properties(r.ANIMALITY.ANIMATE,
예제 #4
0
 def _construct_zero_item(self):
     return utg_dictionary.Dictionary()
예제 #5
0
    def test_full_usage(self):
        # описываем существительное для словаря
        coins_word = words.Word(
            type=r.WORD_TYPE.NOUN,
            forms=[
                'монета',
                'монеты',
                'монете',
                'монету',
                'монетой',
                'монете',  # единственнео число
                'монеты',
                'монет',
                'монетам',
                'монеты',
                'монетами',
                'монетах',  # множественное число
                'монеты',
                'монет',
                'монетам',
                'монеты',
                'монетами',
                'монетах'
            ],  # счётное число (заполнено для пример, может быть заполнено методом autofill_missed_forms)
            properties=words.Properties(
                r.ANIMALITY.INANIMATE,
                r.GENDER.FEMININE))  # свойства: неодушевлённое, женский род

        # описываем глагол для словаря
        action_word = words.Word(
            type=r.WORD_TYPE.VERB,
            # описываем только нужны нам формы слова (порядок важен и определён в utg.data.WORDS_CACHES[r.WORD_TYPE.VERB])
            forms=['подарить', 'подарил', 'подарило', 'подарила', 'подарили'] +
            [''] * (len(data.WORDS_CACHES[r.WORD_TYPE.VERB]) - 5),
            properties=words.Properties(r.ASPECT.PERFECTIVE, r.VOICE.DIRECT))
        action_word.autofill_missed_forms(
        )  # заполняем пропущенные формы на основе введённых (выбираются наиболее близкие)

        # создаём словарь для использования в шаблонах
        test_dictionary = dictionary.Dictionary(
            words=[coins_word, action_word])

        # создаём шаблон
        template = templates.Template()

        # externals — внешние переменные, не обязаны быть в словаре
        template.parse(
            '[Npc] [подарил|npc] [hero|дт] [coins] [монета|coins|вн].',
            externals=('hero', 'npc', 'coins'))

        # описываем внешние переменные
        hero = words.WordForm(
            words.Word(type=r.WORD_TYPE.NOUN,
                       forms=[
                           'герой', 'героя', 'герою', 'героя', 'героем',
                           'герое', 'герои', 'героев', 'героям', 'героев',
                           'героями', 'героях', 'герои', 'героев', 'героям',
                           'героев', 'героями', 'героях'
                       ],
                       properties=words.Properties(r.ANIMALITY.ANIMATE,
                                                   r.GENDER.MASCULINE)))

        npc = words.WordForm(
            words.Word(type=r.WORD_TYPE.NOUN,
                       forms=[
                           'русалка', 'русалки', 'русалке', 'русалку',
                           'русалкой', 'русалке', 'русалки', 'русалок',
                           'русалкам', 'русалок', 'русалками', 'русалках',
                           'русалки', 'русалок', 'русалкам', 'русалок',
                           'русалками', 'русалках'
                       ],
                       properties=words.Properties(r.ANIMALITY.ANIMATE,
                                                   r.GENDER.FEMININE)))

        # осуществляем подстановку
        result = template.substitute(externals={
            'hero':
            hero,
            'npc':
            npc,
            'coins':
            constructors.construct_integer(125)
        },
                                     dictionary=test_dictionary)

        self.assertEqual(result, 'Русалка подарила герою 125 монет.')