Ejemplo n.º 1
0
    def test_resolve(self):
        word = topic([ieml('wa.')])
        p = path('r0')
        elems = resolve(word, p)
        self.assertSetEqual(elems, {ieml('wa.')})

        worda = topic([ieml('wu.')])
        wordm = topic([ieml('we.')])

        s = fact([(word, worda, wordm)])
        p = path('sa:r')
        elems = resolve(s, p)
        self.assertSetEqual(elems, {ieml('wu.')})

        p = path('sa0+s0+sm0')
        elems = resolve(s, p)
        self.assertSetEqual(elems, {word, wordm, worda})

        t = text([s, word])
        p = path('t')
        elems = resolve(t, p)
        self.assertSetEqual(elems, {s, word})
        p = path('t1')
        elems = resolve(t, p)
        self.assertSetEqual(elems, {s})
Ejemplo n.º 2
0
    def test_resolve(self):
        word = Word(Morpheme([ieml('wa.')]))
        p = path('r0')
        elems = resolve(word, p)
        self.assertSetEqual(elems, {ieml('wa.')})

        worda = Word(Morpheme([ieml('wu.')]))
        wordm = Word(Morpheme([ieml('we.')]))

        s = Sentence([Clause(word, worda, wordm)])
        p = path('sa:r')
        elems = resolve(s, p)
        self.assertSetEqual(elems, {Morpheme([ieml('wu.')])})

        p = path('sa0+s0+sm0')
        elems = resolve(s, p)
        self.assertSetEqual(elems, {word, wordm, worda})

        t = Text([s, word])
        p = path('t')
        elems = resolve(t, p)
        self.assertSetEqual(elems, {s, word})
        p = path('t1')
        elems = resolve(t, p)
        self.assertSetEqual(elems, {s})
Ejemplo n.º 3
0
    def test_translation(self):
        w = ieml(
            "[([M:M:.a.-]+[n.-S:.U:.-'S:.-'B:.-',M:.-',M:.-',_])*([E:U:T:.]+[E:.U:.wa.-])]"
        )
        t = Template(w, ['r0', 'r1'])
        translations = t.get_translations(
            {
                'fr': 'Ces meilleurs "$0" de "$1"',
                'en': 'These best "$0" of "$1"'
            }, {
                'r0': '$0',
                'r1': '$1'
            })

        self.assertEqual(len(translations), len(list(t)))
        all_fr = set(t['fr'] for t in translations.values())
        self.assertIn(
            'Ces meilleurs "scribe" de "Europe nord-centrale | Danemark, Suède, Norvège"',
            all_fr)
        self.assertIn(
            'Ces meilleurs "interprète" de "Europe médiane est | Roumanie, Moldavie, Ukraine"',
            all_fr)

        w = ieml(
            "[([M:M:.a.-]+[n.-S:.U:.-'S:.-'B:.-',M:.-',M:.-',_])*([E:U:T:.]+[E:.U:.wa.-])]"
        )
        t = Template(w, ['r0', 'r1'])
        translations_2 = t.get_translations({
            'fr': 'Ces meilleurs "r0" de "r1"',
            'en': 'These best "r0" of "r1"'
        })
        self.assertDictEqual(translations, translations_2)
Ejemplo n.º 4
0
    def test_translation(self):
        w = ieml("[([M:M:.a.-]+[n.-S:.U:.-'S:.-'B:.-',M:.-',M:.-',_])*([E:U:T:.]+[E:.U:.wa.-])]")
        t = Template(w, ['r0', 'r1'])
        translations = t.get_translations({'fr': 'Ces meilleurs "$0" de "$1"', 'en': 'These best "$0" of "$1"'}, {'r0': '$0', 'r1': '$1'})

        self.assertEqual(len(translations), len(list(t)))
        all_fr = set(t['fr'] for t in translations.values())
        self.assertIn('Ces meilleurs "scribe" de "Europe nord-centrale | Danemark, Suède, Norvège"', all_fr)
        self.assertIn('Ces meilleurs "interprète" de "Europe médiane est | Roumanie, Moldavie, Ukraine"', all_fr)

        w = ieml("[([M:M:.a.-]+[n.-S:.U:.-'S:.-'B:.-',M:.-',M:.-',_])*([E:U:T:.]+[E:.U:.wa.-])]")
        t = Template(w, ['r0', 'r1'])
        translations_2 = t.get_translations({'fr': 'Ces meilleurs "r0" de "r1"', 'en': 'These best "r0" of "r1"'})
        self.assertDictEqual(translations, translations_2)
Ejemplo n.º 5
0
def replace_paths(u, rules):
    k = [(p, t) for p, t in {
        **usl(u).paths,
        **{path(p): ieml(t)
           for p, t in rules.items()}
    }.items()]
    return usl(k)
Ejemplo n.º 6
0
def resolve_ieml_object(paths, elements=None):
    global _errors, _context_stack
    _errors = []
    _context_stack = []

    if isinstance(paths, dict):
        paths = list(paths.items())

    if elements is None:
        result = _resolve_ctx('', [(d, ieml(e)) for p, e in paths for d in path(p).develop])
    else:
        result = _resolve_ctx('', [(d, ieml(e)) for e, p in zip(elements, paths) for d in path(p).develop])

    if _errors:
        raise IEMLObjectResolutionError(_errors)

    return result
Ejemplo n.º 7
0
def resolve_ieml_object(paths, elements=None):
    global _errors, _context_stack
    _errors = []
    _context_stack = []

    if isinstance(paths, dict):
        paths = list(paths.items())

    if elements is None:
        result = _resolve_ctx('', [(d, ieml(e)) for p, e in paths
                                   for d in path(p).develop])
    else:
        result = _resolve_ctx('', [(d, ieml(e))
                                   for e, p in zip(elements, paths)
                                   for d in path(p).develop])

    if _errors:
        raise IEMLObjectResolutionError(_errors)

    return result
    def test_text_translation(self):
        update = {
            'terms': {
                "n.-S:.U:.-'T:.-'T:.-',M:.-',S:.-',_": "n.-S:.U:.-'T:.-'T:.-',S:.-',M:.-',_"
            }
        }

        v = create_dictionary_version(update=update)
        p = ieml("/[([([n.-S:.U:.-'T:.-'T:.-',M:.-',S:.-',_])]*[([wa.])]*[([we.])])]/")
        p.set_dictionary_version(v)

        self.assertEqual(str(p), "/[([([n.-S:.U:.-'T:.-'T:.-',S:.-',M:.-',_])]*[([wa.])]*[([we.])])]/")
    def test_word_translation(self):
        update = {
            'terms': {
                "n.-S:.U:.-'T:.-'T:.-',M:.-',S:.-',_": "n.-S:.U:.-'T:.-'T:.-',S:.-',M:.-',_"
            }
        }

        v = create_dictionary_version(update=update)
        p = ieml("[([n.-S:.U:.-'T:.-'T:.-',M:.-',S:.-',_])]")
        p.set_dictionary_version(v)

        self.assertEqual(str(p), "[([n.-S:.U:.-'T:.-'T:.-',S:.-',M:.-',_])]")
Ejemplo n.º 10
0
def usl(arg):
    if isinstance(arg, Usl):
        return arg
    if isinstance(arg, IEMLSyntax):
        if isinstance(arg, Term):
            return Usl(Word(root=Morpheme([arg])))
        return Usl(arg)
    if isinstance(arg, str):
        return USLParser().parse(arg)

    if isinstance(arg, dict):
        # map path -> Ieml_object
        return Usl(resolve_ieml_object(arg))

    try:
        rules = [(a, b) for a, b in arg]
    except TypeError:
        pass
    else:
        rules = [(path(a), ieml(b)) for a, b in rules]
        return Usl(resolve_ieml_object(rules))

    raise ValueError("Invalid argument to create an usl object.")
Ejemplo n.º 11
0
 def test_replace(self):
     u = usl(Word(Morpheme([ieml('[M:]')])))
     u2 = replace_paths(u, {'r0': '[S:]'})
     self.assertEqual(u2, usl(Word(Morpheme([ieml('[S:]')]))))
Ejemplo n.º 12
0
    def test_rules(self):
        rules0 = [(path('r0'), ieml('wa.'))]
        obj = resolve_ieml_object(*zip(*rules0))
        self.assertEqual(obj, topic([ieml('wa.')]))

        rules1 = [(path('r1'), ieml('wa.')), (path('r'), ieml('I:')),
                  (path('f0'), ieml('we.'))]
        obj = resolve_ieml_object(*zip(*rules1))
        word1 = topic([ieml('I:'), ieml('wa.')], [ieml('we.')])
        self.assertEqual(obj, word1)

        self.assertEqual(resolve_ieml_object(enumerate_paths(obj)), obj)

        r = RandomPoolIEMLObjectGenerator(level=Text)
        t = r.text()
        self.assertEqual(t, resolve_ieml_object(enumerate_paths(t)))

        rules = [(path('r1'), ieml('wa.')), (path('r'), ieml('I:')),
                 (path('f0'), ieml('we.'))]
        obj = resolve_ieml_object(*zip(*rules))
        self.assertEqual(obj, topic([ieml('I:'), ieml('wa.')], [ieml('we.')]))
Ejemplo n.º 13
0
 def test_create_word(self):
     a = Word(Morpheme([ieml('[wa.]'), ieml('[we.]')]))
     b = Word(Morpheme(reversed([ieml('[wa.]'), ieml('[we.]')])))
     self.assertEqual(a, b)
     self.assertEqual(str(a), str(b))
Ejemplo n.º 14
0
    def test_invalid_creation(self):
        def test(rules, expected=None):
            if expected:
                try:
                    usl(rules)
                except IEMLObjectResolutionError as e:
                    self.assertListEqual(e.errors, expected)
                else:
                    self.fail()
            else:
                with self.assertRaises(IEMLObjectResolutionError):
                    usl(rules)

        # missing node definition on sm0
        test([('s:r', ieml('[we.]')), ('sa0:r', ieml('[wa.]'))],
             [('s0m0', "Missing node definition.")])

        # empty rules
        test([], [('', "Missing node definition.")])

        # multiple def for a node
        test([('r0', ieml('[wa.]')), ('r0', ieml('[we.]'))], [(
            'r0',
            'Multiple definition, multiple ieml object provided for the same node.'
        )])

        # missing index on text
        test([('t:r', ieml('[we.]')), ('t2:r', ieml('[wa.]'))],
             [('', "Index missing on text definition.")])

        # missing index on word
        test([('r2', ieml('[we.]')), ('r', ieml('[wa.]'))],
             [('', "Index missing on topic definition.")])

        test([('s:r', ieml('[wa.]')), ('sm:r', ieml('[we.]')),
              ('sa1:r', ieml('[wu.]'))],
             [('s0a0', 'Missing node definition.')])

        # incompatible path
        test([('t:r', ieml('[wa.]')), ('s:f', ieml('[we.]'))],
             [('', 'No definition, no type inferred on rules list.')])

        # mulitple errors
        test([("t0:s:f0", ieml('[wa.]')), ("t0:sa:r", ieml('[a.]')),
              ('t2:r', ieml('[we.]')), ("t0:sm1", topic([ieml('[wu.]')]))],
             [('t0:s0', 'No root for the topic node.'),
              ('t0:s0m0', 'Missing node definition.'),
              ('t1', 'Missing node definition.')])
Ejemplo n.º 15
0
 def test_word_instanciation(self):
     with self.assertRaises(InvalidIEMLObjectArgument):
         # "Too many singular sequences"
         ieml("[([O:M:.]+[wa.]+[M:M:.])*([O:O:.M:O:.-])]")
Ejemplo n.º 16
0
 def test_parse_term_plus(self):
     t = term("f.-O:M:.+M:O:.-s.y.-'")
     to_check = ieml("[f.-O:M:.+M:O:.-s.y.-']")
     self.assertEqual(to_check, SyntaxTerm(t))
Ejemplo n.º 17
0
                    return k + SUB_KLASS[o]

        return 'E'

    res = sorted(((w, get_mark(w)) for w in word_list), key=lambda k: k[1])
    return {k: [w[0] for w in v] for k, v in groupby(res, key=lambda k: k[1])}


def display_ranking(w0, word_list):
    print("Ranking from %s" % str(w0))

    res = order_word_list(w0, word_list)
    for k in sorted(res):
        print("-- Rank %s --" % k)
        for w in res[k]:
            print('\t %s' % str(w))


if __name__ == '__main__':
    from pymongo import MongoClient
    from ieml.tools import ieml

    usls_collection = MongoClient().intlekt.usl
    words = [{
        **dict(u), 'ieml': ieml(u['ieml'])
    } for u in usls_collection.find({"_cls": "USL.Word"})]

    display_ranking(words[0]['ieml'], [w['ieml'] for w in words[1:]])

    print(words)
Ejemplo n.º 18
0
    def test_promotion(self):
        self.assertIsInstance(Word.from_term(ieml('[A:]')), Word)
        self.assertIsInstance(Word.from_term(term('[A:]')), Word)

        self.assertIsInstance(ieml('[A:]'), SyntaxTerm)
        self.assertIsInstance(ieml(term('[A:]')), SyntaxTerm)
Ejemplo n.º 19
0
 def test_is_term(self):
     self.assertTrue(Word.from_term(ieml('[A:]')).is_term)
Ejemplo n.º 20
0
 def test_build_template(self):
     w = ieml("[([E:M:T:.]+[f.e.-s.i.-']+[g.-'U:M:.-'n.o.-s.o.-',])*([x.a.-]+[M:U:.p.-])]")
     t = Template(w, ['r0', 'r2', 'f1'])
     self.assertEqual(len(set(t)), 3*3*3)
Ejemplo n.º 21
0
 def test_parse_term_plus(self):
     t = term("f.-O:M:.+M:O:.-s.y.-'")
     to_check = ieml("[f.-O:M:.+M:O:.-s.y.-']")
     self.assertEqual(to_check, Word(t))
Ejemplo n.º 22
0
 def test_build_template(self):
     w = ieml("[([E:M:T:.]+[f.e.-s.i.-']+[g.-'U:M:.-'n.o.-s.o.-',])*([x.a.-]+[M:U:.p.-])]")
     t = Template(w, ['r0', 'r2', 'f1'])
     self.assertEqual(len(set(t)), 3*3*3)
Ejemplo n.º 23
0
def replace_paths(u, rules):
    k = [(p,t) for p, t in {
            **usl(u).paths,
            **{path(p): ieml(t) for p, t in rules.items()}}.items()]
    return usl(k)