dream

Форк
0
/
skills_turn_on_topics_and_patterns.py 
201 строка · 7.6 Кб
1
import re
2

3
from common.animals import ANIMALS_TEMPLATE, PETS_TEMPLATE
4
from common.art import ART_PATTERN
5
from common.books import BOOK_PATTERN
6
from common.gaming import GAMES_WITH_AT_LEAST_1M_COPIES_SOLD_COMPILED_PATTERN, VIDEO_GAME_WORDS_COMPILED_PATTERN
7
from common.gossip import HAVE_YOU_GOSSIP_TEMPLATE, GOSSIP_COMPILED_PATTERN
8
from common.coronavirus import virus_compiled
9
from common.food import FOOD_COMPILED_PATTERN, FOOD_SKILL_TRANSFER_PHRASES_RE
10
from common.funfact import FUNFACT_COMPILED_PATTERN
11
from common.game_cooperative_skill import GAMES_COMPILED_PATTERN
12
from common.movies import MOVIE_COMPILED_PATTERN
13
from common.music import MUSIC_COMPILED_PATTERN
14
from common.science import SCIENCE_COMPILED_PATTERN
15
from common.news import NEWS_COMPILED_PATTERN, TOPIC_NEWS_OFFER
16
from common.sport import (
17
    KIND_OF_SPORTS_TEMPLATE,
18
    SPORT_TEMPLATE,
19
    KIND_OF_COMPETITION_TEMPLATE,
20
    COMPETITION_TEMPLATE,
21
    ATHLETE_TEMPLETE,
22
)
23
from common.travel import TRAVELLING_TEMPLATE, HAVE_YOU_BEEN_TEMPLATE, I_HAVE_BEEN_TEMPLATE
24
from common.weather import WEATHER_COMPILED_PATTERN
25
from common.bot_persona import YOUR_FAVORITE_COMPILED_PATTERN
26
from common.travel_italy import ITALY_PATTERN
27

28
SKILL_TRIGGERS = {
29
    "dff_travel_italy_skill": {
30
        "compiled_patterns": [ITALY_PATTERN],
31
        "previous_bot_patterns": [],
32
        "detected_topics": [],
33
        "intents": [],
34
    },
35
    "dff_user_kg_skill": {
36
        "compiled_patterns": [re.compile(r"(\bpet\b|\bpets\b|hobby|hobbies)")],
37
        "previous_bot_patterns": [],
38
        "detected_topics": [],
39
        "intents": [],
40
    },
41
    "dff_art_skill": {
42
        "compiled_patterns": [ART_PATTERN],
43
        "previous_bot_patterns": [],
44
        "detected_topics": [],
45
        "intents": [],
46
    },
47
    "dff_movie_skill": {
48
        "compiled_patterns": [MOVIE_COMPILED_PATTERN],
49
        "previous_bot_patterns": [MOVIE_COMPILED_PATTERN],
50
        "detected_topics": [
51
            "Entertainment_Movies",
52
            "Entertainment_General",
53
            "Movies_TV",
54
            "Celebrities",
55
            "Art_Event",
56
            "Entertainment",
57
            "Fashion",
58
        ],
59
        "intents": [],
60
    },
61
    "dff_book_skill": {
62
        "compiled_patterns": [BOOK_PATTERN],
63
        "previous_bot_patterns": [BOOK_PATTERN],
64
        "detected_topics": ["Entertainment_General", "Entertainment_Books", "Religion", "Entertainment", "Literature"],
65
        "intents": [],
66
    },
67
    "news_api_skill": {
68
        "compiled_patterns": [NEWS_COMPILED_PATTERN],
69
        "previous_bot_patterns": TOPIC_NEWS_OFFER,
70
        "detected_topics": ["News"],
71
        "intents": [],
72
    },
73
    "dff_food_skill": {
74
        "compiled_patterns": [FOOD_COMPILED_PATTERN],
75
        "previous_bot_patterns": [FOOD_SKILL_TRANSFER_PHRASES_RE, FOOD_COMPILED_PATTERN],
76
        "detected_topics": ["Food_Drink"],
77
        "intents": [],
78
    },
79
    "dff_gaming_skill": {
80
        "compiled_patterns": [GAMES_WITH_AT_LEAST_1M_COPIES_SOLD_COMPILED_PATTERN, VIDEO_GAME_WORDS_COMPILED_PATTERN],
81
        "previous_bot_patterns": [
82
            GAMES_WITH_AT_LEAST_1M_COPIES_SOLD_COMPILED_PATTERN,
83
            VIDEO_GAME_WORDS_COMPILED_PATTERN,
84
        ],
85
        "detected_topics": ["Entertainment_General", "Games"],
86
        "intents": [],
87
    },
88
    "dff_animals_skill": {
89
        "compiled_patterns": [ANIMALS_TEMPLATE, PETS_TEMPLATE],
90
        "previous_bot_patterns": [ANIMALS_TEMPLATE, PETS_TEMPLATE],
91
        "detected_topics": ["Pets_Animals"],
92
        "intents": [],
93
    },
94
    "dff_sport_skill": {
95
        "compiled_patterns": [
96
            SPORT_TEMPLATE,
97
            KIND_OF_SPORTS_TEMPLATE,
98
            KIND_OF_COMPETITION_TEMPLATE,
99
            COMPETITION_TEMPLATE,
100
            ATHLETE_TEMPLETE,
101
        ],
102
        "previous_bot_patterns": [SPORT_TEMPLATE],
103
        "detected_topics": ["Sports"],
104
        "intents": [],
105
    },
106
    "dff_music_skill": {
107
        "compiled_patterns": [MUSIC_COMPILED_PATTERN],
108
        "previous_bot_patterns": [MUSIC_COMPILED_PATTERN],
109
        "detected_topics": ["Entertainment_Music", "Music"],
110
        "intents": [],
111
    },
112
    "dff_science_skill": {
113
        "compiled_patterns": [SCIENCE_COMPILED_PATTERN],
114
        "previous_bot_patterns": [SCIENCE_COMPILED_PATTERN],
115
        "detected_topics": [
116
            "Science_and_Technology",
117
            "Entertainment_Books",
118
            "Literature",
119
            "Math",
120
            "SciTech",
121
        ],
122
        "intents": [],
123
    },
124
    "game_cooperative_skill": {
125
        "compiled_patterns": [GAMES_COMPILED_PATTERN],
126
        "previous_bot_patterns": [GAMES_COMPILED_PATTERN],
127
        "detected_topics": ["Entertainment_General", "Games"],
128
        "intents": [],
129
    },
130
    "dff_weather_skill": {
131
        "compiled_patterns": [WEATHER_COMPILED_PATTERN],
132
        "previous_bot_patterns": [WEATHER_COMPILED_PATTERN],
133
        "detected_topics": ["Weather_Time"],
134
        "intents": [],
135
    },
136
    "dff_funfact_skill": {
137
        "compiled_patterns": [FUNFACT_COMPILED_PATTERN],
138
        "previous_bot_patterns": [FUNFACT_COMPILED_PATTERN],
139
        "detected_topics": [],
140
        "intents": [],
141
    },
142
    "dff_travel_skill": {
143
        "compiled_patterns": [TRAVELLING_TEMPLATE],
144
        "previous_bot_patterns": [HAVE_YOU_BEEN_TEMPLATE, TRAVELLING_TEMPLATE, I_HAVE_BEEN_TEMPLATE],
145
        "detected_topics": ["Travel_Geo"],
146
        "intents": [],
147
    },
148
    "dff_gossip_skill": {
149
        "compiled_patterns": [],
150
        "previous_bot_patterns": [HAVE_YOU_GOSSIP_TEMPLATE, GOSSIP_COMPILED_PATTERN],
151
        "detected_topics": [],
152
        "intents": [],
153
    },
154
    "dff_coronavirus_skill": {
155
        "compiled_patterns": [virus_compiled],
156
        "previous_bot_patterns": [],
157
        "detected_topics": [],
158
        "intents": [],
159
    },
160
    "dff_bot_persona_skill": {
161
        "compiled_patterns": [YOUR_FAVORITE_COMPILED_PATTERN],
162
        "previous_bot_patterns": [],
163
        "detected_topics": [],
164
        "intents": [],
165
    },
166
    "dff_short_story_skill": {
167
        "compiled_patterns": [],
168
        "previous_bot_patterns": [],
169
        "detected_topics": [],
170
        "intents": ["tell_me_a_story"],
171
    },
172
}
173

174

175
def turn_on_skills(detected_topics, catched_intents, user_uttr_text, prev_bot_uttr_text, available_skills=None):
176
    """
177
    Function to turn on skills from SKILL_TRIGGERS based on
178
        - detected_topics, list of corresponding topics is in SKILL_TRIGGERS[skill_name][detected_topics],
179
        - list of patterns (compiled or not) or strings (then ase sensitive) to search in USER utterances,
180
                see SKILL_TRIGGERS[skill_name][compiled_patterns]
181
        - list of patterns (compiled or not) or strings (then ase sensitive) to search in PREV BOT utterances,
182
                see SKILL_TRIGGERS[skill_name][previous_bot_patterns]
183
        - list of intents catched by `intent_catcher`, see SKILL_TRIGGERS[skill_name][intents]
184
    """
185
    detected_topics = set(detected_topics)
186
    catched_intents = set(catched_intents)
187

188
    skills = []
189
    for skill_name in SKILL_TRIGGERS:
190
        if available_skills is None or (available_skills is not None and skill_name in available_skills):
191
            for pattern in SKILL_TRIGGERS[skill_name]["compiled_patterns"]:
192
                if re.search(pattern, user_uttr_text):
193
                    skills.append(skill_name)
194
            for pattern in SKILL_TRIGGERS[skill_name]["previous_bot_patterns"]:
195
                if re.search(pattern, prev_bot_uttr_text):
196
                    skills.append(skill_name)
197
            if set(SKILL_TRIGGERS[skill_name]["detected_topics"]) & detected_topics:
198
                skills.append(skill_name)
199
            if set(SKILL_TRIGGERS[skill_name]["intents"]) & catched_intents:
200
                skills.append(skill_name)
201
    return list(set(skills))
202

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.