Exemple #1
0
    def lexer(self, text, ne_list=[], url=None):
        """
        词法分析
        :param url:
        :param text:
        :param ne_list: 过滤命名实体类型
        :return:
        """
        url = url if url else getattr(self, 'lexer_url', None)
        url = url.format(access_token=self.token)
        res = requests.post(url=url,
                            data=json.dumps(obj={'text': text}),
                            headers=ContentType.JSON_UTF8.value)
        res.encoding = encodes.Unicode.UTF_8.value

        if res is None or res.status_code != codes.ok:
            raise MyError(code=codes.failed, msg='百度词法分析请求失败.')

        lexer_res, errors = LexerRes.LexerResSchema().load(
            res.json())  # type: LexerRes
        Assert.is_true(is_empty(errors), errors)

        if is_not_empty(ne_list):
            for lexer_item in lexer_res.items[:]:
                if lexer_item.ne not in ne_list:
                    # 根据实体列表过滤
                    lexer_res.items.remove(lexer_item)
        return lexer_res
Exemple #2
0
 def get_file_modify_time(file_path):
     """
     获取文件修改时间
     :param file_path:
     :return:
     """
     if not os.path.isfile(file_path):
         raise MyError(code=requests.codes.server_error,
                       msg='文件不存在, path: {0}'.format(file_path))
     return os.path.getatime(filename=file_path)
Exemple #3
0
 def is_true(assert_condition,
             assert_msg='系统异常...',
             assert_code=requests.codes.server_error):
     """
     断言条件是否为真,为假则抛出异常
     :param assert_condition:断言条件
     :param assert_msg:断言信息
     :param assert_code:断言code
     :return:
     """
     if not assert_condition:
         raise MyError(code=assert_code, msg=assert_msg)
Exemple #4
0
 def init_token(self):
     """
     百度云鉴权接口
     :return:
     :rtype:Token
     """
     res = requests.post(url=self.token_url, headers=ContentType.JSON_UTF8.value)
     res.encoding = encodes.Unicode.UTF_8.value
     if res is None or res.status_code != codes.ok:
         raise MyError(
             code=codes.server_error,
             msg='百度云鉴权请求失败【{0}】'.
                 format(res.status_code if res is not None else codes.bad)
         )
     token, _ = Token.TokenSchema().load(res.json())
     if is_not_empty(token.error):
         raise MyError(
             code=codes.server_error,
             msg='百度云鉴权失败【{0}】: {1}'.format(token.error, token.error_description)
         )
     self.token = token.access_token
     return token
Exemple #5
0
 def send_wx(self):
     """
     发送微信信息
     :return:
     """
     res = requests.post(url=self.url,
                         json=WXMsgSchema().dump(self).data,
                         headers=ContentType.JSON_UTF8.value)
     res.encoding = Unicode.UTF_8.value
     if res is None or res.status_code != requests.codes.ok:
         raise MyError(
             code=requests.codes.server_error,
             msg='发送微信信息请求失败:{0}'.format(
                 str(res.status_code) if res is not None else requests.
                 codes.bad))
     return res.json()
Exemple #6
0
 def __init__(self, api_key=None, secret_key=None, baidu_cloud=None):
     """
     百度云图像识别
     :param str api_key: 应用的API Key
     :param str secret_key: 应用的Secret Key
     :param BaiduCloud baidu_cloud:
     """
     self.token = None
     if is_not_empty(api_key) and is_not_empty(secret_key):
         baidu_cloud = BaiduCloud(api_key, secret_key)
         baidu_cloud.init_token()
     elif is_not_empty(baidu_cloud) and is_not_empty(baidu_cloud.token):
         pass
     else:
         raise MyError('缺失鉴权 Token 参数.')
     self.token = baidu_cloud.token
Exemple #7
0
    def get_files_by_suffix(dir, suffixs):
        """
        获取目录下包括子目录所有符合后缀条件的文件路径列表
        :param dir: 目录
        :param suffixs: 后缀
        :return:
        """
        if not os.path.isdir(dir) or not os.path.exists(dir):
            raise MyError(code=requests.codes.server_error,
                          msg='不是有效的路径, path: {0}'.format(dir))
        file_list = []
        sub_dirs = [x[0] for x in os.walk(top=dir)]
        # sub_dirs.remove(dir)

        # 读取所有子目录
        for sub_dir in sub_dirs:
            for suffix in suffixs:
                file_glob = os.path.join(sub_dir, '*.' + suffix)
                # glob.glob() 返回所有匹配的文件路径列表
                # extend() 函数用于在列表末尾一次性追加另一个序列中的多个值
                file_list.extend(glob.glob(pathname=file_glob))
        return file_list
Exemple #8
0
    def __init__(self, app_id=None, api_key=None, secret_key=None, baidu_cloud=None, **kwargs):
        """
        音频应用
        :param app_id:
        :param api_key:
        :param secret_key:
        :param baidu_cloud:
        """
        self.app_id = app_id
        self.token = None
        if is_not_empty(api_key) and is_not_empty(secret_key):
            baidu_cloud = BaiduCloud(api_key, secret_key)
            baidu_cloud.init_token()
        elif is_not_empty(baidu_cloud) and is_not_empty(baidu_cloud.token):
            pass
        else:
            raise MyError('缺失鉴权 Token 参数.')
        self.token = baidu_cloud.token

        if kwargs:
            for key, value in kwargs.items():
                setattr(self, key, value)
Exemple #9
0
    def __init__(self, app_id=None, api_key=None, sign=None, **kwargs):
        """
        讯飞开放平台数字签名
        :param str app_id: 讯飞开放平台应用ID
        :param str api_key: 讯飞开放平台应用秘钥
        :param Sign sign: 讯飞开放平台数字签名对象

        """
        if is_not_empty(app_id) and is_not_empty(api_key):
            sign = Sign(app_id, api_key)
        elif is_not_empty(sign) and is_not_empty(sign.signa):
            pass
        else:
            raise MyError('缺失数字签名参数.')

        self.app_id = app_id
        self.ts = sign.ts
        self.signa = sign.signa
        self.task_id = None

        if kwargs:
            for key, value in kwargs.items():
                setattr(self, key, value)
Exemple #10
0
        def decorated_function(*args, **kwargs):
            # 根据参数类型实例化序列化实例
            cls = schema_cls
            if isinstance(cls, type):
                cls = cls(*s, **ks)
            elif isinstance(cls, basestring):
                cls = create_instance(module_name, cls, *s, **ks)

            keys, res = func(*args, **kwargs)

            if not res:
                return res

            # 查询转字典
            res_add = Dict(dict(zip(keys, res)))
            res_dic = res_add.load_nest()

            # 字典反序列化
            entity, errors = cls.load(res_dic, partial=cls.partial_db())

            if is_not_empty(errors):
                raise MyError(msg=errors)
            return entity