图片类word报告生成器

由于最近需要收集同伴们的核酸检测报告,做成word文档提交,就写了一个程序。本代码推荐使用jupyter notebook打开。

输入数据:图片文件,图片文件命名需为“姓名+其他字段”。

输出要求格式:姓名+固定词(例如:李华核酸检测报告),后填对应图片。

结果示例如下:

图片类word报告生成器_第1张图片

图片数据

图片类word报告生成器_第2张图片

需要用到的工具包

pip install os               #使用 os 工具包读取文件名称
pip install python-docx      # 使用python-docx制作word文档
pip install torch            #自然语言处理依托环境
pip install fastnlp          #自然语言处理依托环境
pip install fastHan           #命名实体识别工具包  提取文件名称中的姓名

第一个cell:获取文件名称,以提取文件名中的姓名

图片数据存储在文件夹中,文件夹命名为“测试数据”

将该代码文件,与“测试数据”文件夹放置在同一目录下。

import os
def getfiles(file):
    filenames=os.listdir(file)
    print("file_list:")
    print(filenames,'\n')
    
    return filenames

运行cell 

在运行结果栏的输入处,输入图片文件夹名称“测试数据”。

运行结果如下: 

图片类word报告生成器_第3张图片

第二个cell:输入图片文件夹名称,删除不必要元素

print("请输入图片文件夹名称:")
#   当本程序文件与图片文件放置在同一根目录下时,输入文件名即可,无需加入引号。
file_path = input()

filenames = getfiles(file_path)
for i in range(len(filenames)-1):
    if filenames[i] == '.ipynb_checkpoints':
        del filenames[i]

 运行cell

第三个cell:得出结果

首先,封装单人报告函数

其次,输入图片标题固定字段,如“李华核酸检测报告单”中“核酸检测报告单”即为固定字段。title变量。

最后,输入存储文件的名字,例如“今日全员核酸检测报告汇总”

运行cell

from docx import Document
from docx.shared import Cm
from fastHan import FastHan

def single_hs(document,heading,pic_path):
    
    paragraph = document.add_paragraph(heading)
    document.add_picture(pic_path,width = Cm(14.5),height = Cm(21))
    document.add_page_break()
    
    return document

result = Document()
title = input('please input title which connect to stu_name:\n')

model=FastHan()
for file in filenames:
    pic = './'+file_path+'/'+file
#     print(pic)
    stu = model(file,target = "NER")
    stu = stu[0][0][0]
    heading = stu + title
    single_hs(result,heading,pic)

print("please input save file name:")
save = input()
result.save(save+'.docx')

 

 完整代码如下

import os
import re
from docx import Document
from docx.shared import Cm
from fastHan import FastHan

def getfiles(file):
    filenames=os.listdir(file)
    print("file_list:")
    print(filenames)
    print()
    
    return filenames

def single_hs(document,heading,pic_path):
    
    paragraph = document.add_paragraph(heading)
    #通过调整width 与 height参数以调整图片大小(以厘米为单位)
    document.add_picture(pic_path,
                         width = Cm(14.5),
                         height = Cm(18))
    document.add_page_break()
    
    return document

if __name__ == '__main__':
    #   本程序文件与图片文件需放置在同一根目录下,输入文件名即可,无需加入引号。
    print("请输入图片文件夹名称:")
    file_path = input()
    print('请输入图片类型(如:.jpg):')
    pic_type = input()

    #获取文件名称列表
    filenames = getfiles(file_path)
    #去除文件名称列表中可能存在的扩展文件
    file_list = []
    # 获取图片文件个数
    file_len = len(filenames)
    # print(file_len)
    for i in range(file_len-1):
        if re.search(pic_type,filenames[i]) is not None:
            file_list.append(filenames[i])
    # print(file_list)

    result = Document()
    print('请输入图片标题固定字段:')
    # 将输入的标题固定字段赋予变量title
    title = input()

    #加载命名实体识别模型
    model=FastHan()
    for file in file_list:
        pic = './'+file_path+'/'+file
        # print(pic)
        # 使用命名实体识别模型抽取图片文件命名中的姓名信息
        stu = model(file,target = "NER")
        stu = stu[0][0][0]
        #添加图片标题
        heading = stu + title
        single_hs(result,heading,pic)

    print("请输入文件保存名称:")
    save = input()
    result.save(save+'.docx')

 到此就结束了~

本程序的不完美之处在于需要手动复制文件列表,待找到方法后更新。

你可能感兴趣的:(生活实用小工具,python,开发语言,nlp,自然语言处理)