def main(): data_dir = pres.resource_filename('gramtool', 'data') parser = argparse.ArgumentParser() parser.add_argument('word', type=str, help="A lexeme from morphology database.") parser.add_argument('-d', '--data-dir', type=str, default=data_dir, help="Data directory.") parser.add_argument('-l', '--lang', type=str, default='lt', help="Two letter language code [default: lt].") parser.add_argument('-f', '--forms', action='store_true', default=False, help="Print all <word> forms.") parser.add_argument('--debug', action='store_true', default=False, help="Print debug information.") parser.add_argument('--case', type=str, default=None, help="Change case of given <word>.") args = parser.parse_args() if args.debug: logging.basicConfig(format="%(asctime)s %(levelname)s: %(message)s", level=logging.DEBUG) else: logging.basicConfig(format="%(asctime)s %(levelname)s: %(message)s", level=logging.INFO) try: gt = gramtool.GramTool(pathlib.Path(args.data_dir), args.lang) except UserSideError as e: print(e) return 1 change_form_kwargs = { 'case': args.case, } change_form_kwargs = {k: v for k, v in change_form_kwargs.items() if v} if change_form_kwargs: print(gramtool.change_form(args.word, **change_form_kwargs)) else: print_forms(gt.grammar, args.word) if args.forms: print_all_forms(gt.grammar, args.word)
def test_change_form(self): self.assertEqual(gramtool.change_form('Vilnius', case='genitive'), 'Vilniaus') self.assertEqual(gramtool.change_form('žmogus', case='locative'), 'žmoguje') self.assertEqual(gramtool.change_form('medis', case='accusative', number='plural'), 'medžius') self.assertEqual(gramtool.change_form('kairėje', case='nominative'), 'kairė') self.assertEqual(gramtool.change_form('šuo', case='accusative'), 'šunį') self.assertEqual(gramtool.change_form('pelėse', case='accusative'), 'peles') self.assertEqual(gramtool.change_form('krūmai', case='locative'), 'krūmuose')
import collections import argparse import itertools import gramtool from databot.commands import CommandsManager, Command from botlib.compositions import compositions, strjoin pattern_re = re.compile(r'({[^}]+})', re.UNICODE) norm_re = re.compile(r'\W+', re.UNICODE) FLAGS = { 'title': str.title, 'lemma': lambda v: (gramtool.get_lemma(v) or v), 'genitive': lambda v: (gramtool.change_form(v, case='genitive') or v), } def norm(value): return norm_re.sub(' ', value).strip().lower() class IndexFinder(object): def __init__(self, index, debug_info=None): self.index = index self.index = self.create_index(index) self.aliases, self.patterns = self.create_aliases(index, debug_info) def create_index(self, index):
def test_change_form(): gramtool.change_form('Vilnius', case='genitive') == 'Vilniaus' gramtool.change_form('žmogus', case='locative') == 'žmoguje' gramtool.change_form('medis', case='accusative', number='plural') == 'medžius' gramtool.change_form('kairėje', case='nominative') == 'kairė' gramtool.change_form('šuo', case='accusative') == 'šunį' gramtool.change_form('pelėse', case='accusative') == 'peles' gramtool.change_form('krūmai', case='locative') == 'krūmuose'