Beispiel #1
0
def builtin_edit_distance(g, pe):
    """" edit_distance (+Tokens1, +Tokens2, -Distance) """

    pe._trace('CALLED BUILTIN edit_distance', g)

    pred = g.terms[g.inx]
    args = pred.args
    if len(args) != 3:
        raise PrologRuntimeError('edit_distance: 3 args expected.', g.location)

    arg_tok1 = pe.prolog_get_list(args[0], g.env, g.location)
    arg_tok2 = pe.prolog_get_list(args[1], g.env, g.location)
    arg_dist = pe.prolog_get_variable(args[2], g.env, g.location)

    g.env[arg_dist] = NumberLiteral(edit_distance(arg_tok1.l, arg_tok2.l))

    return True
Beispiel #2
0
    def test_edit_distance(self):

        self.assertEqual (misc.edit_distance('hubba', 'hubba'), 0)
        self.assertEqual (misc.edit_distance('hubba', 'hubb'), 1)
        self.assertEqual (misc.edit_distance('hubba', 'hub'), 2)
        self.assertEqual (misc.edit_distance('hubba', 'bba'), 2)

        self.assertEqual (misc.edit_distance(
                             tokenize(u'die leistung wurde zurückverlangt'), 
                             tokenize(u'die leistung wurde zurückverlangt')), 0)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'die leistung wurde'), 
                             tokenize(u'die leistung wurde zurückverlangt')), 1)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE LEISTUNG'), 
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT')), 2)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE'), 
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT')), 3)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE ZURÜCKVERLANGT'), 
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT')), 2)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT'), 
                             tokenize(u'LEISTUNG WURDE ZURÜCKVERLANGT')), 1)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT'), 
                             tokenize(u'WURDE ZURÜCKVERLANGT')), 2)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT'), 
                             tokenize(u'ZURÜCKVERLANGT')), 3)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT'), 
                             tokenize(u'')), 4)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'DIE LEISTUNG WURDE ZURÜCKVERLANGT'), 
                             tokenize(u'LEISTUNG FOO ZURÜCKVERLANGT')), 2)
        self.assertEqual (misc.edit_distance(
                             tokenize(u'SIE IST FÜR DIE LEISTUNG DANKBAR'), 
                             tokenize(u'SIE STRITTIG LEISTUNG DANKBAR')), 3)
Beispiel #3
0
while True:
    samples = rec.get_samples()
    audio, finalize = vad.process_audio(samples)
    if not audio:
        continue

    user_utt, c = asr.decode(audio, finalize)
    print ("\r%s           " % user_utt, end='', flush=True)

    if finalize:
        print ()

        best_dist = ED_THRESHOLD
        intent = None
        for utt in utt_map:
            dist = edit_distance (tokenize (utt, lang='en'), 
                       tokenize (user_utt, lang='en'))
            if (dist<ED_THRESHOLD) and (dist<best_dist):
                best_dist = dist
                intent    = utt_map[utt]

        if intent == Intent.HELLO:
            resp = "Hello there!"
        elif intent == Intent.LIGHT:
            if lights_on:
                resp = "OK, switching off the lights."
            else:
                resp = "OK, switching on the lights."
            lights_on = not lights_on
        elif intent == Intent.RADIO:
            if radio_on:
                resp = "OK, switching off the radio."
Beispiel #4
0
    def test_edit_distance(self):

        self.assertEqual(misc.edit_distance('hubba', 'hubba'), 0)
        self.assertEqual(misc.edit_distance('hubba', 'hubb'), 1)
        self.assertEqual(misc.edit_distance('hubba', 'hub'), 2)
        self.assertEqual(misc.edit_distance('hubba', 'bba'), 2)