def baidu_correct(text: str) -> str: """百度纠错api""" client = AipNlp(APP_ID, API_KEY, SECRET_KEY) client.setConnectionTimeoutInMillis(10000) client.setSocketTimeoutInMillis(10000) try: s = client.ecnet(text) except Exception as e: print(repr(e)) return text else: import time, logging time.sleep(0.1) logging.info(s) if 'error_code' in s.keys(): print(s) return text return s.get('item').get('vec_fragment')
def do(data, labels) -> float: """ 返回正确率 """ app_id, api_key, secret_key = _getConfig() client = AipNlp(app_id, api_key, secret_key) #data, labels = _getTestData() corr, count = 0, len(data) for i, sent in enumerate(data): try: res = client.ecnet(sent) # <- dict r = 1 if res['item']['vec_fragment'] == [] else 0 corr += (1 if labels[i] == r else 0) except Exception as e: print(e) print('_____________________') break return float(corr) / count
from aip import AipFace, AipBodyAnalysis from IPython.display import Image from IPython.core.display import HTML from aip import AipNlp """ 你的 APPID AK SK """ APP_ID = '23575550' API_KEY = 'fr8nHvzt2FtHfvOLeaen7uju' SECRET_KEY = 'Mrfk2PZR2z4AtNWFzDhCvz7AQxNrps0e' client = AipNlp(APP_ID, API_KEY, SECRET_KEY) text = "驴打滚,是东北地区、老北京和天津卫传通小吃之一,因其最后制作工序中撒上的黄豆面,犹如老北京郊外野驴撒欢打滚时扬起的阵阵黄土,因此而得名“驴打滚”。" """ 调用文本纠错接口 """ print(client.ecnet(text))
class NLP(): def __init__(self): """ 你的 APPID AK SK """ APP_ID = '16043979' API_KEY = 'vr2XhyMVrjW7dWZOZjqeLsae' SECRET_KEY = 'RypiqTeFnVIED0zpKOxRIZHbc5a8a2wE' self.client = AipNlp(APP_ID, API_KEY, SECRET_KEY) def lexical_analysis(self): '''词法分析接口向用户提供分词、词性标注、专名识别三大功能; 能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性, 并进一步识别出命名实体''' text = "百度是一家高科技公司" """ 调用词法分析 """ resp = self.client.lexer(text) print(resp) def Interdependent(self): '''依存句法分析 依存句法分析接口可自动分析文本中的依存句法结构信息, 利用句子中词与词之间的依存关系来表示词语的句法结构信息(如“主谓”、“动宾”、“定中”等结构关系), 并用树状结构来表示整句的结构(如“主谓宾”、“定状补”等)。''' text = '小情歌' resp = self.client.depParser(text) print(resp) def vector(self): '''词向量分析 词向量表示接口提供中文词向量的查询功能。''' word = '张飞' resp = self.client.wordEmbedding(word) print(resp) def Dnn(self): '''中文DNN语言模型接口用于输出切词结果并给出每个词在句子中的概率值,判断一句话是否符合语言表达习惯。''' # word = '你饭吃在哪?' word = '你今天上班了吗' resp = self.client.dnnlm(word) # ppl float 描述句子通顺的值:数值越低,句子越通顺 print(resp) print(resp['ppl']) def compare(self): # 需要字数相等 '''词义相似度''' word1 = '茶壶' word2 = '水瓶' resp = self.client.wordSimEmbedding(word1, word2) print(resp) # score 相似度分数,分数越接近1越相似 print(resp['score']) def text_compare(self): # 短文本相似度 text1 = "穿衣裳" text2 = "穿衣服" """ 调用短文本相似度 """ resp = self.client.simnet(text1, text2) print(resp) def comment(self): '''评论观点抽取''' text = '苹果笔记本后盖不好看' """ 如果有可选参数 """ options = {} options["type"] = 13 """ 带参数调用评论观点抽取 """ resp = self.client.commentTag(text, options) print(resp) print(resp['items']) def emotion(self): # 情感分析 text = '今天天气不错' resp = self.client.sentimentClassify(text) print(resp) print(resp['items']) print('积极情绪概率:%s' % resp['items'][0]['positive_prob']) print('消极情绪概率:%s' % resp['items'][0]['negative_prob']) def Tag(self): '''文章标签''' # 文章标签服务能够针对网络各类媒体文章进行快速的内容理解,根据输入含有标题的文章, # 输出多个内容标签以及对应的置信度,用于个性化推荐、相似文章聚合、文本内容分析等场景。 title = "iphone手机出现“白苹果”原因及解决办法,用苹果手机的可以看下" content = "如果下面的方法还是没有解决你的问题建议来我们门店看下成都市锦江区红星路三段99号银石广场24层01室。" """ 调用文章标签 """ resp = self.client.keyword(title, content) print(resp) def Ar_classification(self): '''文章分类''' title = "美男齐聚!吴彦祖冯德伦谢霆锋一起颁奖" content = "今晚的金像奖,《特警新人类》主演吴彦祖、冯德伦、谢霆锋、李璨琛一起颁奖,今年是电影上映二十年。一开始只有冯德伦、李璨琛上台,说“他们两个有事来不了”,随后吴彦祖和谢霆锋也从VCR中“走”到了台上,他们现场问大家想不想看《特警新人类3》,气氛热烈。" """ 调用文章分类 """ # 可能一个文章有多个分类 resp = self.client.topic(title, content) print(resp) print(resp['item']) def modify(self): '''文本纠错''' text = "只能门锁" """ 调用文本纠错 """ resp = self.client.ecnet(text) print(resp) print(resp['item']) print('文本错误,正确结果:%s' % resp['item']['correct_query']) def emotion_qingxu(self): text = '今天本来高兴的' """ 如果有可选参数 """ options = {} options["scene"] = "default" """ 带参数调用对话情绪识别接口 """ resp = self.client.emotion(text, options) print(resp) print(resp['items']) print(type(resp['items'])) print('回复:%s' % resp['items'][0]['replies']) def News(self): '''新闻摘要''' # 没有勾选此接口 content = "麻省理工学院的研究团队为无人机在仓库中使用RFID技术进行库存查找等工作,创造了一种..." maxSummaryLen = 300 """ 调用新闻摘要接口 """ resp = self.client.newsSummary(content, maxSummaryLen) print(resp)
for sent in error_list: f.write(sent) f.write('\n') with open('bcmi_correctList.txt', 'w') as f: for sent in correct_list: f.write(sent) f.write('\n') with open('bcmi_Correction.txt', 'w') as f: for sent in correction: f.write(str(sent)) f.write('\n') baidu = [] flag = 0 num = 0 for text in error_list: jiucuo = client.ecnet(text)['item']['correct_query'] baidu.append(jiucuo) if jiucuo == correct_list[flag]: num += 1 print("wrong sent: ", text) print("correct sent: ", correct_list[flag]) print("jiucuo sent: ", jiucuo) flag += 1 print("total sent: ", flag, ", right correction: ", num, ", current precision: ", num / flag) print() with open("bcmi_baidu.txt", 'a') as f: f.write(jiucuo) f.write('\n') f.close() time.sleep(12)
class BaiduAi: """百度ai接口 https://ai.baidu.com/docs#/NLP-Python-SDK/f524c757 """ # empCount = 0 def __init__(self): print('kaishi') # print(config.get('site', 'name')) self.app_id = config.get('baidu', 'app_id') self.api_key = config.get('baidu', 'app_key') self.secret_key = config.get('baidu', 'secret_key') self.client = AipNlp(self.app_id, self.api_key, self.secret_key) # """ 你的 APPID AK SK """ def lexer(self, text): """ 调用词法分析 """ return self.client.lexer(text) def depParser(self, text): """依存句法分析 """ return self.client.depParser(text) def dnn(self, text): # result = client.synthesis(text, 'zh', 1, { # 'vol': 11, # }) # text = "床前明月光" # """ 调用DNN语言模型 """ # print(client) return self.client.dnnlm(text) def wordSimEmbedding(self,text1, text2): """ 词义相似度 """ return self.client.wordSimEmbedding( text1, text2) def simnet(self,text1, text2): """ 短文本相似度 """ return self.client.simnet( text1, text2) def commentTag(self,content): """ 评论观点抽取 """ return self.client.commentTag( content) def topic(self,title,content): """ 调用文章分类 """ try: return self.client.topic(title, content) except: return {'log_id': 8348398184393122510, 'item': {'lv2_tag_list': [], 'lv1_tag_list': []}} def keyword(self,title,content): """ 文章标签 文章标签服务能够针对网络各类媒体文章进行快速的内容理解,根据输入含有标题的文章,输出多个内容标签以及对应的置信度,用于个性化推荐、相似文章聚合、文本内容分析等场景。 """ return self.client.keyword(title, content) def sentimentClassify(self,content): """情感倾向分析 对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度。 """ return self.client.sentimentClassify(content) def ecnet(self,content): """智能纠错 """ return self.client.ecnet(content) def newsSummary(self,title,content): """生成摘要 暂时无权限 """ return self.client.newsSummary(content, 200)
class TextAIAnalyse(object): """ :param """ def __init__(self, doc_path, app_id, api_key, secret_key): """ :param doc_path:文章路径 :param app_id: 应用id,自己去百度ai控制台构建一个应用,就会有id了 :param api_key: :param secret_key: """ self.client = AipNlp(app_id, api_key, secret_key) self.document = Document(doc_path) self.doc_path = doc_path text_list1 = self.filter_style() self.text_list2 = self.filter_short_text(text_list1, 12) def filter_style(self): """ 样式过滤 :param """ delete_style = ['Title', 'Heading 1', 'Quote'] # 去除标题,一级标题,图表链接 list1 = [ x.text for x in self.document.paragraphs if x.style.name not in delete_style ] return list1 @staticmethod def filter_short_text(list1: list, length: int): """ 去除短文本 :param list1: 列表格式的文本集 :param length:最短文本长度 """ list2 = [x.strip() for x in list1] # 去除两边空格 list3 = [x for x in list2 if len(x) > length] return list3 def split_text(self, list1: list): """ 对段落进行分句,粗糙分词 :param """ list2 = [] for x in list1: x_list1 = x.split('。') # 以句号进行分词,分号暂时不考虑 for xx in x_list1: if xx[-1:] not in ['。', ';', ':']: # 如果本局不是以句号结尾,则给它加上句号 xx += '。' list2.append(xx) list3 = self.filter_short_text(list2, 10) return list3 def split_text2(self, list1: list): """ 对段落进行分句,加上分号 :param """ list2 = [] for x in list1: x_list1 = x.split('。') # 以句号进行分词 for xx in x_list1: x_list2 = xx.split(';') # 以中文分号进行分词 for xxx in x_list2: if xxx[-1:] not in ['。', ';', ':']: # 如果本局不是以句号结尾,则给它加上句号 xxx += '。' list2.append(xxx) list3 = self.filter_short_text(list2, 10) return list3 def ai_analyse(self, text1): """ AI对句子进行纠错 :param """ result1 = None try: result1 = self.client.ecnet(text1) except Exception as err: return False vet = result1['item']['vec_fragment'] # 可替换词 score = result1['item']['score'] # 评分 if len(vet) == 0: return False # 没有错误 # elif score > 0.5: # 如果可信度 else: return result1 # 返回分析 def save_analyse(self, result): """ :param """ text = result['text'] text_encode = text.encode('gbk') vet_list = result['item']['vec_fragment'] """ 开始写入word """ basename = os.path.basename(self.doc_path) path = './分析结果/{}.docx'.format(basename[:6]) dir_name = './分析结果' if not os.path.exists(dir_name): # 如果文件夹不存在 os.mkdir(dir_name) a = vet_list[0]['begin_pos'] # 获取第一个错误标签的开始位置 b = vet_list[-1]['end_pos'] # 获取最后一个错误的结束位置 if not os.path.exists(path): # 如果文件不存在 doc = Document() else: doc = Document(path) doc.add_paragraph('错误写法', style='heading 1') # 一级标题 p = doc.add_paragraph() # 创建一个空段落 p.add_run(text_encode[:a].decode('gbk')) # 写入没有错误的部分 start_list = [x['begin_pos'] for x in vet_list] # 记录开始的位置 end_list = [x['end_pos'] for x in vet_list] # 记录结束的位置 if len(vet_list) == 1: # 如果只有一个错误 run1 = p.add_run( text_encode[start_list[0]:end_list[0]].decode('gbk')) run1.font.color.rgb = RGBColor(255, 0, 0) # 设置红色字体 else: # 如果有多个错误 for i in range(len(vet_list)): run = p.add_run( text_encode[start_list[i]:end_list[i]].decode('gbk')) run.font.color.rgb = RGBColor(255, 0, 0) # 设置红色字体 if i < len(vet_list) - 1 and start_list[ i + 1] - end_list[i] > 1: # 如果后面一处错误与前面一处错误存在间距 p.add_run( text_encode[end_list[i]:start_list[i + 1]].decode( 'gbk')) # 增加一个没有样式的普通字体 if len(text_encode) - b > 1: # 如果最后一个错误后面存在正确的内容 p.add_run(text_encode[b:].decode('gbk')) # 写入后面无错的内容 doc.add_paragraph('正确写法', style='heading 1') # 一级标题 correct = result['item']['correct_query'] # 正确的内容 doc.add_paragraph(correct) # 写入正确的内容 doc.save(path)