1. 程式人生 > >基於Python檢索系統(4)最終版

基於Python檢索系統(4)最終版

from tkinter import *
import jieba
import jieba.analyse

#b1函式為 全部新聞顯示頁面
#b2函式為 檢索頁面 檢索成功後,跳轉另外一個頁面


def b1():  #全部新聞顯示頁面
    #記錄檔案中有多少行標題 記錄在count中
    count=0
    for line in open("jia.txt","r",encoding='utf-8'):
        count=count+1
        
    #新建字典title_dict,鍵對應(1-5294)的數字,值是對應的新聞標題
    
    title_dict={}

    f=open("jia.txt","r",encoding='utf-8')
    i=1
    #將文字的每行標題存入字典
    for line in open("jia.txt","r",encoding='utf-8'):
    #新增一個刪除字串末尾/n的操作
        title_dict[i]=line
        i=i+1
    # print(line)

    #將字典title_dict中的值分別進行分詞操作
    seg_list={}
    tags={}
    #將分詞存入tags字典,鍵為1-5294,值為對應的分片語成的列表
    for j in range(1,count+1):
        #搜尋引擎模式
        seg_list[j] =jieba.cut_for_search(title_dict.get(j))
        #精確模式
        #seg_list[j]=jieba.cut(title_dict.get(j),cut_all=True)
        tags[j]=jieba.analyse.extract_tags(title_dict.get(j), topK=40)
    
    # print(tags)

    #將分詞後的結果存入詞項字典
    word_dict={}
    for k in range(1,count+1):
        for z in range(0,int(len(tags.get(k))-1)):   #字典中每個值中,元素的個數
            word_dict.setdefault(tags.get(k)[z])
            if(word_dict.get(tags.get(k)[z])==None):
                word_dict[tags.get(k)[z]]=[]
                word_dict[tags.get(k)[z]].append(k)
            else:
                word_dict[tags.get(k)[z]].append(k)
            
    #gui部分
    root=Tk()
    root.title("上海理工大學新聞檢索")
    root.geometry('800x500+200+100')
    sb=Scrollbar(root)
    sb.pack(side=RIGHT,fill=Y)

    #建立一個空列表
    theLB=Listbox(root,width=100,height=80,yscrollcommand=sb.set)

    count=0
    for line in open("jia.txt","r",encoding='utf-8'):
        count=count+1
    
    for a in range(1,count+1):
        theLB.insert(a,title_dict.get(a))

    theLB.pack(padx=20,pady=20,fill=BOTH)
    sb.config(command=theLB.yview)
    mainloop()

def b2():
    def compare():
        count=0
        for line in open("jia.txt","r",encoding='utf-8'):
            count=count+1
        title_dict={}
        f=open("jia.txt","r",encoding='utf-8')
        i=1
        for line in open("jia.txt","r",encoding='utf-8'):
            title_dict[i]=line
            i=i+1
        seg_list={}
        tags={}
        for j in range(1,count+1):
            seg_list[j] =jieba.cut_for_search(title_dict.get(j))
            tags[j]=jieba.analyse.extract_tags(title_dict.get(j), topK=40)
        word_dict={}
        for k in range(1,count+1):
            for z in range(0,int(len(tags.get(k))-1)):   
                word_dict.setdefault(tags.get(k)[z])
                if(word_dict.get(tags.get(k)[z])==None):
                    word_dict[tags.get(k)[z]]=[]
                    word_dict[tags.get(k)[z]].append(k)
                else:
                    word_dict[tags.get(k)[z]].append(k)


        user_input=a.get()
        for i in range(1,len(word_dict.keys())):
            if user_input==list(word_dict.keys())[i-1]:
                print("標題匹配成功\n")

                root=Tk()
                root.title("上海理工大學新聞檢索")
                root.geometry('800x500+200+100')
                sb=Scrollbar(root)
                sb.pack(side=RIGHT,fill=Y)
                theLB=Listbox(root,width=100,height=80,yscrollcommand=sb.set)
                
                for k in range(1,len(word_dict[list(word_dict.keys())[i-1]])):
                    theLB.insert(k,title_dict[word_dict[list(word_dict.keys())[i-1]][k]])


                theLB.pack(padx=20,pady=20,fill=BOTH)
                sb.config(command=theLB.yview)
                mainloop()
                #print(title_dict[word_dict[list(word_dict.keys())[i-1]][k]])
                #print('\n')    # word_dict[list(word_dict.keys())[i-1]][k]
            else:
                pass
        
    root=Tk()
    root.title("上海理工大學新聞檢索")
    #a是文字框,用於輸入要檢索的文字,按下回車或者單擊Button按鈕可以接受使用者輸入
   
    a=Entry(root,width=40,validate="focusout",validatecommand=compare)
    a.pack(side=LEFT,padx=40,pady=60)


    mainloop()


root=Tk()
root.title("上海理工大學新聞")

#插入一個圖片
photo = PhotoImage(file="logo.gif")
Label(root,image=photo).grid(row=0,column=0,rowspan=4,padx=15,pady=10)
#標籤的屬性
Label(root,text="歡迎進入本系統",font=("華康少女字型",30),fg="red").grid(row=0,column=1,columnspan=2,padx=10,pady=10)

photo1 = PhotoImage(file="a.gif")
Label(root,image=photo1).grid(row=1,column=1)
a = Button(root,text="檢視所有內容",width=10,command=b1).grid(row=1,column=2,columnspan=2,padx=10,pady=5)

photo2 = PhotoImage(file="b.gif")
Label(root,image=photo2).grid(row=2,column=1)
b = Button(root,text="檢索",width=10,command=b2).grid(row=2,column=2,columnspan=2,padx=10,pady=5)

photo3 = PhotoImage(file="c.gif")
Label(root,image=photo3).grid(row=3,column=1)
c = Button(root,text="退出",width=10,command=root.quit).grid(row=3,column=2,columnspan=2,padx=10,pady=5)

mainloop()