调用百度自然语言接口实现文本分析

目标:

1.掌握SDK文档的使用

2.强化tkinter图像界面的编辑

   ttk.Treeview()创建列表,以及树状结构

3.递归函数的使用

百度参考文档:https://ai.baidu.com/docs#/NLP-Python-SDK/top

图形界面

调用百度自然语言接口实现文本分析_第1张图片

源代码

# 导包
from aip import AipNlp        #百度文本分析api
from tkinter import *         #python界面开发
from tkinter import ttk
from tkinter.filedialog import askopenfilename,askdirectory


class Text_analysis():
    """
    SDK开发
    """
    def __init__(self):
        # 参数初始化化
        """ 你的 APPID AK SK """
        self.APP_ID = '175243421'
        self.API_KEY =  'QvXanIzUbqWTmQQhkqDGG3WY'
        self.SECRET_KEY = 'LtbuUbj7yk9NxX86QN1iO3XcAc7gl4ln'
        self.client = AipNlp(self.APP_ID, self.API_KEY, self.SECRET_KEY)
        self.myWindow = Tk()
        self.text_1=StringVar()
        self.text_2=StringVar()
        self.text_3 = StringVar() #短文本相似度
        self.text_4 = StringVar()  # 词向量
        self.text_5 = StringVar()  # 词1
        self.text_6 = StringVar()  # 词2
        self.text_7 = StringVar()  # 词相似结果
        self.text_8 = StringVar()  # 文本标题
        self.model=StringVar()   #文本相似度模型
        self.model_1=StringVar() #文本相似度模型
        self.industry=StringVar() #行业
        self.tree_list=[]
        self.tree_dict={}
    def tree(self,value):
        # self.tree=ttk.Treeview()
        tree={}
        postag={'Ag':'形语素','g':'语素','ns':'地名'	,'u':'助词','a':	'形容词','h':'前接成分'	,'nt':	'机构团体',	'vg':'动语素',
                 'ad':	'副形词',	'i':	'成语',	'nz':	'其他专名',	'v':	'动词',
                 'an'	:'名形词',	'j':	'简称略语',	'o':	'拟声词',	'vd':	'副动词',
                 'b':	'区别词',	'k':	'后接成分'	,'p':	'介词',	'vn':	'名动词',
                 'c':	'连词',	'l':	'习用语',	'q':	'量词',	'w':	'标点符号',
                 'dg':	'副语素',	'm':	'数词',	'r':	'代词',	'x'	:'非语素字',
                 'd':	'副词'	,'Ng':	'名语素',	's'	:'处所词',	'y':	'语气词',
                 'e':	'叹词',	'n':	'名词',	'tg':	'时语素',	'z':	'状态词',
                  'f':	'方位词',	'nr':	'人名',	't':	'时间词',	'un':	'未知词'}
        deprel={ 'ATT':'定中关系','QUN':'数量关系','COO':'并列关系','APP':'同位关系','ADJ':'附加关系',
                 'VOB': '动宾关系', 'POB': '介宾关系', 'SBV': '主谓关系', 'SIM': '比拟关系', 'TMP': '时间关系',
                 'LOC': '处所关系', 'DE': '“的”字结构', 'DI': '“地”字结构', 'DEI': '“得”字结构', 'SUO': '“所”字结构',
                 'BA': '“把”字结构', 'BEI': '“被”字结构', 'ADV': '状中结构', 'CMP': '动补结构', 'DBL': '兼语结构',
                 'CNJ': '关联词', 'CS': '关联结构', 'MT': '语态结构', 'VV': '连谓结构', 'HED': '核心', 'FOB': '前置宾语',
                 'DOB': '双宾语', 'TOP': '主题', 'IS': '独立结构', 'IC': '独立分句', 'DC': '依存分句', 'VNV': '叠词关系',
                 'YGC': '一个词', 'WP': '标点'}

        # print(value)
        if len(value)>0:
            for item in value:
                if len(self.tree_list)==0:
                    if item['head']==0:
                        name_1='head_'+str(item['id'])
                        self.tree_list.append('head_'+str(item['id']))
                        # print('插入一级树'+str(item['word']))

                        # self.tree_dict[name_1]=self.tree_3.insert("",item['id'],text=str(item['word'])+'('+deprel[item['deprel']]+')',values=(str(item['id'])),open=True)
                        self.tree_dict[name_1] = self.tree_3.insert("", item['id'],text=str(item['word']) + '(' + deprel[item['deprel']] + ')', open=True)
                        value.remove(item)
                        break
                elif 'head_'+str(item['head']) in self.tree_list:
                    name_2 = 'head_' + str(item['id'])
                    self.tree_list.append('head_' + str(item['id']))
                    # self.tree_dict[name_2] = self.tree_3.insert(self.tree_dict['head_'+str(item['head'])], 'end', text=str(item['word'])+'('+deprel[item['deprel']]+')', values=(str(item['id'])),open=True)
                    self.tree_dict[name_2] = self.tree_3.insert(self.tree_dict['head_' + str(item['head'])], 'end',text=str(item['word']) + '(' + deprel[ item['deprel']] + ')', open=True)
                    # print('插入下一级树'+str(item['word']))
                    value.remove(item)
                    break
            self.tree(value)
        return None


    def lexical_analysis(self):
        '''
        词法分析
        :return:
        '''
        pos={'n':	'普通名词',	'f':	'方位名词',	's':	'处所名词',	't':	'时间名词',
             'nr':	'人名',	'ns':	'地名',	'nt'	:'机构团体名',	'nw':	'作品名',
             'nz':	'其他专名',	'v':	'普通动词',	'vd':	'动副词',	'vn':	'名动词',
             'a':	'形容词',	'ad':	'副形词',	'an':	'名形词',	'd':	'副词',
             'm':	'数量词',	'q':	'量词',	'r':	'代词',	'p':	'介词',
             'c'	:'连词','u'	:	'助词',	'xc':	'其他虚词',	'w':	'标点符号'}
        ne={'PER':	'人名',	'LOC':	'地名',	'ORG':	'机构名',	'TIME':	'时间'}
        items = self.tree_1.get_children()

        [self.tree_1.delete(item) for item in items]

        text = self.text_1.get()
        # print(text)
        """ 调用词法分析 """
        results=self.client.lexer(text)

        if 'error_code'in results:
            print(results)
        else:
            for i,result in enumerate(results['items']):
                if len(result['pos']):
                    string_1=pos[result['pos']]
                elif len(result['ne']):
                    string_1=ne[result['ne']]
                self.tree_1.insert('', i, values=(str(i+1),result['item'],string_1,'/'.join(result['basic_words'])))
                # tree.bind("", onDBClick) #绑定按键功能
            # self.tree_1.pack()

    def syntax_analysis(self):
        '''
        依存句法分析
        :return:
        '''
        self.tree_list.clear()
        self.tree_dict.clear()
        items = self.tree_3.get_children()
        [self.tree_3.delete(item) for item in items]

        text=self.text_1.get()
        mode={'Web模型':0,'Query模型':1}
        """ 如果有可选参数 """
        options = {}
        options["mode"] = mode[self.com_1.get()]

        """ 带参数调用依存句法分析 """
        results=self.client.depParser(text, options)
        # print(results)
        self.tree(results["items"])

        # print(result)
    def language_model(self):
        '''
        语言模型
        :return:
        '''
        items = self.tree_2.get_children()

        [self.tree_2.delete(item) for item in items]
        text = self.text_1.get()
        """ 调用DNN语言模型 """
        results=self.client.dnnlm(text)
        self.text_2.set(results['ppl'])
        for i, result in enumerate(results['items']):
            self.tree_2.insert('', i, values=(str(i + 1), result["word"], result["prob"]))
    def text_similar(self):
        '''
        短文本相似度
        :return:
        '''
        text1=self.text_21.get(1.0,5.0)
        text2=self.text_22.get(1.0,5.0)
        options = {}
        options["model"] = self.com.get()
        """ 带参数调用短文本相似度 """
        result=self.client.simnet(text1, text2,options )
        self.text_3.set(result['score'])
        # print('计算短文本相似度')
    def commentary_get(self):
        '''
        评论观点抽取
        :return:
        '''
        sentiments = {0: '消极', 1: '中性', 2: '积极'}
        self.text_32.delete(1.0, 'end')  # 删除文本框内容
        text=self.text_31.get(1.0,5.0)
        indust_dict={'酒店':1, 'KTV':2,'丽人':3,'美食餐饮':4,'旅游':5,'健康':6,'教育':7,'商业':8,'房产':9,'汽车':10,'生活':11,'购物':12,'3C':13}
        options = {}
        options["type"] = indust_dict[self.com_31.get()]

        """ 带参数调用评论观点抽取 """
        result=self.client.commentTag(text, options)
        # print(result)
        x=len(result['items'])-1
        i=0
        for item in result['items']:

            a='观点倾向:'+str(sentiments[item['sentiment']])+'\n'+'短句摘要:'+item['abstract']+'\n'+'匹配属性词:'+item['prop']+'\n'+'匹配描述词:'+item['adj']+'\n'
            # print(a)
            self.text_32.insert('insert',a)
            if i

 

你可能感兴趣的:(工程实践)