File: test_all.py

package info (click to toggle)
padatious 0.4.8-2.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 264 kB
  • sloc: python: 1,504; makefile: 21
file content (152 lines) | stat: -rw-r--r-- 4,893 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Copyright 2017 Mycroft AI, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from os.path import isdir
from shutil import rmtree

from padatious.intent_container import IntentContainer


class TestAll:
    def setup(self):
        self.cont = IntentContainer('temp')

    def test_simple(self):
        self.cont.add_intent('hello', [
            'hello',
            'hi',
            'how are you',
            'whats up'
        ])
        self.cont.add_intent('goodbye', [
            'see you',
            'later',
            'bye',
            'goodbye',
            'another time'
        ])
        self.cont.train(False)

        data = self.cont.calc_intent('whats up')
        assert data.name == 'hello'
        assert data.conf > 0.5

    def test_single_extraction(self):
        self.cont.add_intent('drive', [
            'drive to {place}',
            'driver over to {place}',
            'navigate to {place}'
        ])
        self.cont.add_intent('swim', [
            'swim to {island}',
            'swim across {ocean}'
        ])

        self.cont.train(False)

        data = self.cont.calc_intent('navigate to los angelos')
        assert data.name == 'drive'
        assert data.conf > 0.5
        assert data.matches == {'place': 'los angelos'}

        data = self.cont.calc_intent('swim to tahiti')
        assert data.name == 'swim'
        assert data.conf > 0.5
        assert data.matches == {'island': 'tahiti'}

    def test_single_extraction_front_back(self):
        self.cont.add_intent('start.timer', [
            'Timer {duration}',
            '{duration} timer',
        ])
        self.cont.train(False)

        data = self.cont.calc_intent('10 minute timer')
        assert data.name == 'start.timer'
        assert data.conf > 0.5
        assert data.matches == {'duration': '10 minute'}

    def test_multi_extraction_easy(self):
        self.cont.add_intent('search', [
            '(search for|find) {query}',
            '(search for|find) {query} (using|on) {engine}',
            '(using|on) {engine}, (search for|find) {query}'
        ])
        self.cont.add_intent('order', [
            'order some {food} from {store}',
            'place an order for {food} on {store}'
        ])

        self.cont.train(False)

        data = self.cont.calc_intent('search for funny dog videos')
        assert data.name == 'search'
        assert data.matches == {'query': 'funny dog videos'}
        assert data.conf > 0.5

        data = self.cont.calc_intent('search for bananas using foodio')
        assert data.name == 'search'
        assert data.matches == {'query': 'bananas', 'engine': 'foodio'}
        assert data.conf > 0.5

        data = self.cont.calc_intent('search for big furry cats using the best search engine')
        assert data.name == 'search'
        assert data.matches == {'query': 'big furry cats', 'engine': 'the best search engine'}
        assert data.conf > 0.5

        data = self.cont.calc_intent('place an order for a loaf of bread on foodbuywebsite')
        assert data.name == 'order'
        assert data.matches == {'food': 'a loaf of bread', 'store': 'foodbuywebsite'}
        assert data.conf > 0.5

    def test_extraction_dependence(self):
        self.cont.add_intent('search', [
            'wiki {query}'
        ])

        self.cont.train(False)

        data = self.cont.calc_intent('wiki')
        assert data.conf < 0.5

    def test_entity_recognition(self):
        self.cont.add_intent('weather', [
            'weather for {place} {time}'
        ], True)
        self.cont.add_intent('time', [
            'what time is it',
            'whats the time right now',
            'what time is it at the moment',
            'currently, what time is it'
        ], True)
        self.cont.add_entity('place', [
            'los angeles',
            'california',
            'new york',
            'chicago'
        ])
        self.cont.add_entity('time', [
            'right now',
            'currently',
            'at the moment',
        ])
        self.cont.train(False)
        data = self.cont.calc_intent('weather for los angeles right now')
        assert data.name == 'weather'
        assert data.matches == {'place': 'los angeles', 'time': 'right now'}
        assert data.conf > 0.5

    def teardown(self):
        if isdir('temp'):
            rmtree('temp')