rasa中nlu、story、rule、domain、response等数据转换

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"])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值