python小作业

word文档的搜索(多关键字)

题目要求:允许用户输入关键词(可以是空格分开的几个关键词),搜索某个文件夹(及子文件夹)下面的所有word(docx)文档的内容(段落内容及表格内容)。

对于每个word文档,要求输出所有包含用户关键词的段落。

自定义段落(表格)内容搜索相关度,能够输出相关段落与关键词的相关度

19信管二dkh

import os
import os.path
from docx import Document#docx操作库,需另外安装
import difflib#字符串相关度库
path='d:/main'
#搜索的路径提前预设
key=input("输入关键字")
ls1=key.split(' ')
def finddocx(path):
    ls=os.listdir(path)
    for f in ls:
        try:#try语句防止遇到空文件夹时报错
            fpath=os.path.join(path,f)
            if os.path.isdir(fpath):
                finddocx(fpath)
            else:
                if fpath[-5:]=='.docx':#筛选后缀为docx的文件
                    doc = Document(fpath)#打开文件
                    sum=len(doc.paragraphs)#sum用来存储文章段落数
                    print("{}文件表格中含关键字的段落:".format(fpath))
                    for t in doc.tables:
                        for i in range(len(t.rows)):
                            for j in range(len(t.rows[i].cells)):
                                s2=len(t.rows[i].cells[j].paragraphs)
                                for g in range(s2):
                                    s1=t.rows[i].cells[j].paragraphs[g].text
                                    for z in ls1:#多关键字遍历
                                        for k in range(len(s1)-len(z)+1):
                                            if(s1[k:k+len(z)]==z):#寻找与关键字相同的表格
                                                seq=difflib.SequenceMatcher(None,z,s1)
                                                ratio=seq.ratio()#关键字与表格文字相关度
                                                print(s1)
                                                print("相关度:{:.2f}".format(ratio))
                                                s1=""
                    print("{}文件文本中含关键字的段落:".format(fpath))
                    for i in range(sum):
                        pa=doc.paragraphs[i]#读取每一段的内容存储在s变量中
                        s=pa.text
                        for k in ls1:#多关键字遍历
                            for j in range(len(s)-len(k)+1):
                                if(s[j:j+len(k)]==k):
                                    #寻找与关键字相同的段落
                                    seq1=difflib.SequenceMatcher(None,k,s)
                                    ratio1=seq1.ratio()#关键字与段落相关度
                                    print(s)
                                    print("相关度:{:.2f}".format(ratio1))
                                    s=""
                    doc.save(fpath)
        except:
            continue
finddocx(path)

好看

posted @ 2020-12-04 10:55  小码A  阅读(268)  评论(0)    收藏  举报