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)
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,
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,
def _construct_zero_item(self): return utg_dictionary.Dictionary()
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 монет.')