Ei kuvausta

lfygithub01 970c55ae99 change Dockerfile 1 vuosi sitten
celery_tasks 41f52ff7d0 Add FastAPI 1 vuosi sitten
extracted_images 76f6e51fc3 version 0.1 1 vuosi sitten
Dockerfile 970c55ae99 change Dockerfile 1 vuosi sitten
LLMAgent.py fe674d0879 Use Celery redis broken 1 vuosi sitten
README.md fe674d0879 Use Celery redis broken 1 vuosi sitten
api.py 41f52ff7d0 Add FastAPI 1 vuosi sitten
doc2pdf.py fe674d0879 Use Celery redis broken 1 vuosi sitten
extract_price.py 17581c88c6 Add Dockerfile 1 vuosi sitten
image-20240826152353199.png fe674d0879 Use Celery redis broken 1 vuosi sitten
lmu.py 59d20e64a0 添加BMP图形保存,添加摘要生成、关键词检测 1 vuosi sitten
ocr_api.py b66967d53c temp push 1 vuosi sitten
parse_index_table.py fe674d0879 Use Celery redis broken 1 vuosi sitten
poetry.lock 17581c88c6 Add Dockerfile 1 vuosi sitten
pyproject.toml 17581c88c6 Add Dockerfile 1 vuosi sitten
requirements.txt 17581c88c6 Add Dockerfile 1 vuosi sitten
responser.py db72ca3de4 08/16/2024 10:49:47 1 vuosi sitten
scan_dir.py 48b9a3e9b3 merge zzh branch 1 vuosi sitten

README.md

服务架构

image-20240826152353199

流程结构

graph LR
    工厂[工厂] --> 创建工厂
    创建工厂 --> Celery实例
    创建工厂 --> Flask实例
    Celery实例 --> Redis中间件
    Celery实例 --> Worker1
    Celery实例 --> Worker2
    Celery实例 --> Worker3
    Celery实例 --> Worker4
    Celery实例 --> Worker5
    Flask实例 --> submit
    submit --> Redis中间件
    Redis中间件 --> Worker1
    Redis中间件 --> Worker2
    Redis中间件 --> Worker3
    Redis中间件 --> Worker4
    Redis中间件 --> Worker5
    Worker1 --> ALGNODE1
    Worker2 --> ALGNODE2
    Worker3 --> ALGNODE3
    Worker4 --> ALGNODE4
    Worker5 --> ALGNODE5
graph LR
    ALGNODE[ALGNODE] --> 通用PDF抽取模块
    通用PDF抽取模块 --> 图片解析
    通用PDF抽取模块 --> 表格解析
    通用PDF抽取模块 --> 正文解析
    通用PDF抽取模块 --> 标题解析
    图片解析 --> 图片OCR文本
    表格解析 --> 表格内容
    正文解析 --> 正文内容
    标题解析 --> 标题内容
    图片OCR文本 --> 通用数据回收
    表格内容 --> 通用数据回收
    正文内容 --> 通用数据回收
    标题内容 --> 通用数据回收
    通用数据回收 --> 采购数据
    通用数据回收 --> 投标数据
    采购数据 --> 预审
    投标数据 --> 预审
    采购数据 --> 初审
    投标数据 --> 初审
    采购数据 --> 详审
    投标数据 --> 详审
    采购数据 --> 报价评审
    投标数据 --> 报价评审
    预审 --> 回传
    初审 --> 回传
    详审 --> 回传
    报价评审 --> 回传

代码层

异步配置文件(backend/config.py)

class Config:
    CELERY = dict(
        CELERY_BROKER_URL = 'redis://localhost:6379/0',
        CELERY_RESULT_BACKEND = 'redis://localhost:6379/0',
        include = "backend.celery_task",
        task_ignore_result = True,
        timezone = 'Asia/Shanghai',
        enable_utc = False,
        task_track_started = True
    )

创建工厂(backend/init.py)

from flask import Flask
from celery import Celery, Task

celery_app = Celery(__name__)

def create_app(test_config: dict = None) -> Flask:
    app = Flask(__name__)

    class FlaskTask(Task):
        def __call__(self, *args: object, **kwargs: object) -> object:
            with app.app_context():
                return self.run(*args, **kwargs)

    if test_config is None:
        app.config.from_pyfile('config.py', silent=True)
    else:
        app.config.from_mapping(test_config)

    celery_app.config_from_object(app.config['CELERY'])
    celery_app.Task = FlaskTask
    celery_app.set_default()

    return app

封包脚本(make_celery.py)

from backend import (
    create_app,
    celery_app,
)

app = create_app()

WEB配置 (gunicorn_config.py)

workers = 1
bind = "0.0.0.0:8000"
backlog = 2048
loglevel = "INFO"
daemon = True
pidfile = "/var/run/backend.pid"
accesslog = "/var/log/backend/access.log"
errorlog = "/var/log/backend/error.log"

执行脚本(run.sh)

gunicorn --config gunicorn_config.py make_celery
celery multi start worker -A make_celery:celery_app -P prefork -E --loglevel=INFO --logfile=/var/log/celery/%n%I.log --pidfile=/run/celery/%n.pid
celery -A make_celery:celery_app events

主要模块描述

1、tools 大纲解析模块 2、get_info PDF信息抽取模块 3、matcher 段落定位模块

4、projectloc 项目业绩的表格定位模块(完成) 6、lmu 摘要生成模块 7、LLMAgent 大模型调用模块 8、document 招标文件解析模块

9、extract_price 报价抽取

10、doc2pdf word文档转pdf模块

11、extract_financial_report 财报抽取

12、ocr_api 图片OCR类 13、responser 格式化模块

PDF中无边框表格内容抽取
1. camelot-py git源下载
	git clone https://www.github.com/camelot-dev/camelot
	修改pyproject.toml中 pdfminer-six = "^20231228"
	安装命令: 进入camelot目录下,pip install -e .
2. 在wsl Debian中安装 ghostscript 【模块本身】
	apt install ghostscript
3. ghostscript 下载
	pip install ghostscript==0.7.0 【模块驱动】
4. 代码修改 【CV运行时不需要设置宽高,使用默认即可】
	tables_pro = camelot.read_pdf(
                    self.file_path,
                    # flavor='stream',
                    pages=str(page_number+1),
                    # edge_tol=200,
                    # row_tol=50,
                )

序号, 内容, 所在位置, 条款, 关键词 1, 投标总报价, 一、投标函及投标函附录|投标报价总表, 商务部分, 投标总报价|投标报价总表 2, 投标报价合理性, 六、已标价工程量清单(全部), 商务部分, 综合单价|基础价格|取费费率 3, 施工组织设计, 第一章、施工组织设计(全部), 技术部分, 施工设备配置、选型|、施工进度、强度|劳动力计划安排|项目资金使用、保证与分配、封闭管理及奖惩措施的可行性|专业队伍配备,拟投入本项目现有人员数量、工种、资格资质证书情况|施工方法、程序、配合环节 4, 信用评价, 三峡集团公司最新发布的年度供应商信用评价等级为 B, 商务部分, 5, 财务状况, (二)近年财务状况表, 商务部分, 近年财务状况 6, 投标人业绩, 类似项目情况表, 商务部分, 类似项目情况表

商务部分评分标准-KEYWORDS = [

"投标文件响应性",
"信用评价",
"财务状况",
"工作及交货进度",
"业绩",
"投标报价的合理性",
"以往类似项目业绩、经验",
"报价的合理性",
"以往同类项目业绩、经验",
"投标报价合理性",
"类似项目业绩",
"报价合理性",

]

技术部分评分标准-KEYWORDS = [

"技术能力",
"性能保证",
"技术方案",
"技术服务",
"投标关键技术、设备、部件及材料的来源及供应可靠性",
"施工组织设计",
"施工重难点分析",
"主要设备、材料的品牌",
"主要管理人员",
"施工质量、安全和文明施工",
"无机磨石品牌及质量",
"无机磨石地坪的施工工艺及质量控制",
"施工安全和文明施工",
"组织机构及施工管理人员",
"对项目重点、难点的分析及施工布置",
"监控系统二次设计响应性、合理性",
"投标人企业实力",
"主要设备材料的品牌和质量",
"施工资源配置",
"施工方法、程序、配合环节合理性",
"施工进度工期与强度分析合理性",
"组织机构、运行方式、专业队伍",
"施工方法、对项目重点、难点的分析及施工布置",
"主要材料选用",
"项目管理组织机构"

]