import ruamel.yaml
from rasa.nlu.convert import convert_training_data
import json
intent_name1 = "greet"
intent_name2 = "goodbye"
story_name1 = intent_name1 + "_story"
story_name2 = intent_name2 + "_story"
action_name1 = "utter_" + intent_name1 # {intent_name1}对应回复名已为您默认命名为{action_name1}
action_name2 = "utter_" + intent_name2
rule_name1 = intent_name1 + "_rule"
rule_name2 = intent_name2 + "_rule"
response_name1 = "你好小明,我叫小智"
response_name2 = "再见"
rasa_nlu_data = {
"rasa_nlu_data": {
"regex_features": [],
"entity_synonyms": [
{
"synonyms": [],
"value": ""
}
],
"common_examples": [
{
"text": "你好,我叫小明",
"intent": "greet",
"entities": [
{
"end": 7,
"entity": "name",
"start": 5,
"value": "小明"
}
]
},
{
"text": "拜拜",
"intent": "goodbye",
"entities": []
}
]
}
}
rasa_stories_data = {
"rasa_stories_data":
{"stories":
[
{"story": story_name1, "steps": [{"intent": intent_name1}, {"action": action_name1}]},
{"story": story_name2, "steps": [{"intent": intent_name2}, {"action": action_name2}]}
]
}
}
rasa_rules_data = {
"rasa_rules_data":
{"rules":
[
{"rule": rule_name1, "steps": [{"intent": intent_name1}, {"action": action_name1}]},
{"rule": rule_name2, "steps": [{"intent": intent_name2}, {"action": action_name2}]}
]
}
}
rasa_responses_data = {
"rasa_responses_data":
{"responses":
{
action_name1: [{"text": response_name1}],
action_name2: [{"text": response_name2}]
}, # 请输入action_name1对应的文本内容
}
}
rasa_domain_data = {
"rasa_domain_data":
{"session_config":
{
"session_expiration_time": 60,
"carry_over_slots_to_new_session": True
},
"intents": [intent_name1, intent_name2],
"actions": [action_name1, action_name2]
}
}
class TransformData_To_Yml(object):
def __init__(self, input_file_json, output_file_yml):
self.input_file_json = input_file_json
self.output_file_yml = output_file_yml
# 使用rasa内置函数转换NLU数据
def file_process(self, dic_=None):
with open(self.input_file_json, "w", encoding="utf-8") as f:
json.dump(dic_, f, ensure_ascii=False)
try:
convert_training_data(data_file=self.input_file_json, out_file=self.output_file_yml, output_format='yml',
language='zh')
except Exception as e:
print("写入yml文件内容失败")
raise e
else:
print('写入yml文件内容成功')
# 使用ruamel将字典数据转化为story、rule、response、domin的yml文件
def srrd_(self, dic_=None):
from collections import OrderedDict
from rasa.shared.utils.validation import KEY_TRAINING_DATA_FORMAT_VERSION
from ruamel.yaml.scalarstring import DoubleQuotedScalarString
from rasa.shared.constants import LATEST_TRAINING_DATA_FORMAT_VERSION
version_ = str(DoubleQuotedScalarString(
LATEST_TRAINING_DATA_FORMAT_VERSION
))
dic_all = {}
dic_all["version"] = version_
dic_all.update(dic_)
try:
with open(self.output_file_yml, "w", encoding="utf-8") as f:
yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
yaml.dump(data=dic_all, stream=f)
except Exception as e:
print("写入yml文件内容失败")
raise e
else:
print("写入yml文件内容成功")
# rasa训练
def rasa_train(self):
import os
import sys
from rasa.__main__ import main
# Debug模式
# logging.basicConfig(level=logging.ERROR,format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)d] %(message)s')
# # logging.basicConfig(level=logging.DEBUG,format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)d] %(message)s')
# #对话窗
sys.path.insert(1, os.path.dirname(os.path.abspath(__file__)))
sys.argv[1:] = ['train', '--config', 'config.yml', '--domain', 'domain.yml', '--data', 'data/',
'--augmentation', '10']
main()
# nlu数据转化
nlu_json = "./nlu.json"
nlu_yml = "./nlu.yml"
TransformData_To_Yml(nlu_json, nlu_yml).file_process(dic_=rasa_nlu_data)
# story数据转化
story_json = "./story.json"
story_yml = "./story.yml"
TransformData_To_Yml(story_json, story_yml).srrd_(dic_=rasa_stories_data["rasa_stories_data"])
# rule数据转化
rule_json = "./rule.json"
rule_yml = "./rule.yml"
TransformData_To_Yml(rule_json, rule_yml).srrd_(dic_=rasa_rules_data["rasa_rules_data"])
# response数据转化
response_json = "./response.json"
response_yml = "./response.yml"
TransformData_To_Yml(response_json, response_yml).srrd_(dic_=rasa_responses_data["rasa_responses_data"])
# domain数据转化
domain_json = "./domain.json"
domain_yml = "./domain_.yml"
TransformData_To_Yml(domain_json, domain_yml).srrd_(dic_=rasa_domain_data["rasa_domain_data"])
11-12
2997
12-20
1285