| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- # -*- coding: utf-8 -*-
- """``interface/predictor.py`` — Phase 5 清理后的兼容层。
- 原 10756 行已缩减为本文件。所有 Predictor 实现已迁移到 ``predictors/`` 子模块,
- 训练函数迁移到 ``training/save_models.py``,
- 本文件仅通过 re-export 保持旧 import 路径不变。
- 保留内容:
- - ``getPredictor(_type)``:委托给 ``predictors.registry.PredictorRegistry``
- - ``dict_predictor``:Phase 2 兼容别名(注释标记 Phase 5 后可删除)
- - 完整 re-export 块:28 个 Predictor 类 + 19 个工具函数 + 11 个训练函数
- 旧路径仍然有效::
- from BiddingKG.dl.interface.predictor import getPredictor
- from BiddingKG.dl.interface.predictor import CodeNamePredict
- from BiddingKG.dl.interface.predictor import TableTag2List
- from BiddingKG.dl.interface.predictor import get_role, is_agency
- # ... 等所有原公共符号
- 清理说明:
- - 删除 28 个已迁移到 ``predictors/`` 的 Predictor 类本地定义
- - 删除 18 个已迁移到 ``predictors/_common`` 的工具函数本地定义
- - 删除 11 个已迁移到 ``training/save_models.py`` 的训练函数本地定义
- - 删除 ``sess_config`` / ``agency_set`` / ``header_set`` 本地加载逻辑(已由 re-export 覆盖)
- - 删除 ``__main__`` 测试块(兼容层不再承载可执行入口)
- - 保留所有 ``import *`` 以维持隐式 re-export 语义
- """
- import os
- import sys
- from BiddingKG.dl.common.nerUtils import *
- sys.path.append(os.path.abspath("../.."))
- from BiddingKG.dl.common.Utils import *
- from BiddingKG.dl.interface.modelFactory import *
- import tensorflow as tf
- import pandas as pd
- from BiddingKG.dl.product.data_util import decode, process_data
- from BiddingKG.dl.interface.Entitys import Entity
- from BiddingKG.dl.complaint.punish_predictor import Punish_Extract
- from BiddingKG.dl.money.re_money_total_unit import extract_total_money, extract_unit_money
- from bs4 import BeautifulSoup
- import copy
- import calendar
- import datetime
- from BiddingKG.dl.entityLink.entityLink import get_business_data
- from BiddingKG.dl.proposed_building.pb_extract import PBPredictor
- from BiddingKG.dl.common.Utils import del_tabel_achievement, clean_company
- from BiddingKG.dl.common.attr_utils import turnMoneySource, extract_serviceTime
- from BiddingKG.dl.time.re_servicetime import extract_servicetime
- from collections import Counter
- from dataclasses import dataclass, field
- from typing import List, Dict, Tuple, Set, Any
- from threading import RLock
- # Phase 2: dict_predictor 保留为兼容别名,真正的实例缓存迁移到
- # BiddingKG.dl.predictors.registry.PredictorRegistry。
- # 老 import ``from interface.predictor import dict_predictor`` 仍可用,
- # 但 dict_predictor 不再被 getPredictor 写入,新实例只存在于 registry 中。
- # Phase 5 迁移完成后本字典可删除。
- dict_predictor = {"codeName":{"predictor":None,"Lock":RLock()},
- "prem":{"predictor":None,"Lock":RLock()},
- "epc":{"predictor":None,"Lock":RLock()},
- "roleRule":{"predictor":None,"Lock":RLock()},
- "roleRuleFinal":{"predictor":None,"Lock":RLock()},
- "tendereeRuleRecall":{"predictor":None,"Lock":RLock()},
- "form":{"predictor":None,"Lock":RLock()},
- "time":{"predictor":None,"Lock":RLock()},
- "punish":{"predictor":None,"Lock":RLock()},
- "product":{"predictor":None,"Lock":RLock()},
- "product_attrs":{"predictor":None,"Lock":RLock()},
- "channel": {"predictor": None, "Lock": RLock()},
- "deposit_payment_way": {"predictor": None, "Lock": RLock()},
- "total_unit_money": {"predictor": None, "Lock": RLock()},
- "industry": {"predictor": None, "Lock": RLock()},
- "rolegrade": {"predictor": None, "Lock": RLock()},
- "moneygrade": {"predictor": None, "Lock": RLock()},
- "district": {"predictor": None, "Lock": RLock()},
- 'tableprem': {"predictor": None, "Lock": RLock()},
- 'candidate': {"predictor": None, "Lock": RLock()},
- 'websource_tenderee': {"predictor": None, "Lock": RLock()},
- 'project_label': {"predictor": None, "Lock": RLock()},
- 'industry_label': {"predictor": None, "Lock": RLock()},
- 'pb_extract': {"predictor": None, "Lock": RLock()},
- 'property_label': {"predictor": None, "Lock": RLock()},
- 'approval': {"predictor": None, "Lock": RLock()}, # 审批项目预测
- 'bid_score': {"predictor": None, "Lock": RLock()}, # 评标评分
- 'entity_type_rule': {"predictor": None, "Lock": RLock()}, # 地址、时间分类
- }
- def getPredictor(_type):
- """获取 predictor 实例(线程安全、懒加载)。
- Phase 2 改动:委托给 BiddingKG.dl.predictors.registry.PredictorRegistry。
- 原 dict_predictor 字典保留为兼容别名,不再被写入。
- 新 Predictor 迁移到 predictors/<name>.py 后,可通过
- ``registry.register(name, factory)`` 覆盖默认 factory,
- 本函数无需改动即可返回新实例。
- :raises NameError: _type 未注册时(保持原异常类型兼容)。
- """
- # 延迟 import 避免模块加载循环:predictors.registry 不在 import 时
- # 触发本模块加载,register_defaults() 内部才反向 import 本模块。
- # 使用绝对 import 与本仓库约定一致(from BiddingKG.dl.xxx)。
- from BiddingKG.dl.predictors.registry import get_default_registry, register_defaults
- registry = get_default_registry()
- if not registry.is_registered(_type):
- # 首次访问时注册全部默认 predictor factory(幂等)。
- # 注册后仍查不到 _type,说明 key 不在 28 个默认值中。
- register_defaults()
- try:
- return registry.get(_type)
- except KeyError:
- # 保持原异常类型和消息,老调用方若捕获 NameError 不受影响。
- raise NameError("no this type of predictor")
- # ============================================================
- # Phase 5 re-exports: implementations moved to predictors/
- # 直接 import(无别名):清理后已无本地定义冲突,名称在 import 行执行时
- # 即绑定到模块命名空间,可被循环 import 的下游模块(如 training.save_models)
- # 即时访问,避免 "cannot import name X from partially initialized module" 错误。
- # 详见 REFACTOR_LOG.md §Phase 5
- # ============================================================
- from BiddingKG.dl.predictors._common import ( # noqa: E402
- sess_config,
- agency_set,
- header_set,
- is_agency,
- get_td_companys,
- get_role,
- )
- from BiddingKG.dl.predictors.codename import CodeNamePredict # noqa: E402
- from BiddingKG.dl.predictors.prem import PREMPredict, EPCPredict # noqa: E402
- from BiddingKG.dl.predictors.form import FormPredictor # noqa: E402
- from BiddingKG.dl.predictors.role import ( # noqa: E402
- RoleRulePredictor,
- RoleRuleFinalAdd,
- TendereeRuleRecall,
- RoleGrade,
- role_special_predictor,
- )
- from BiddingKG.dl.predictors.money import ( # noqa: E402
- MoneyGrade,
- DepositPaymentWay,
- TotalUnitMoney,
- )
- from BiddingKG.dl.predictors.time import TimePredictor # noqa: E402
- from BiddingKG.dl.predictors.product import ProductPredictor # noqa: E402
- from BiddingKG.dl.predictors.product_attrs import ( # noqa: E402
- TableResult,
- ProductAttributesPredictor,
- )
- from BiddingKG.dl.predictors.channel import DocChannel # noqa: E402
- from BiddingKG.dl.predictors.label import ( # noqa: E402
- ProjectLabel,
- IndustryLabel,
- PropertyLabel,
- BiddingScore,
- )
- from BiddingKG.dl.predictors.industry import IndustryPredictor # noqa: E402
- from BiddingKG.dl.predictors.district import DistrictPredictor # noqa: E402
- from BiddingKG.dl.predictors.table_prem import ( # noqa: E402
- TableTag2List,
- TablePremExtractor,
- CandidateExtractor,
- is_head_line,
- get_header_line,
- )
- from BiddingKG.dl.predictors.websource import WebsourceTenderee # noqa: E402
- from BiddingKG.dl.predictors.approval import ApprovalPredictor # noqa: E402
- from BiddingKG.dl.predictors.entity_type import ( # noqa: E402
- EntityTypeRulePredictor,
- get_package_moneys,
- )
- # Re-export training functions from training/.
- # 放在所有 Predictor 类 re-export 之后:training.save_models 内部会
- # `from interface.predictor import PREMPredict, EPCPredict, FormPredictor`,
- # 这些名称必须已绑定到本模块命名空间,否则触发循环 import 错误。
- from BiddingKG.dl.training.save_models import ( # noqa: E402
- getSavedModel,
- getBiLSTMCRFModel,
- h5_to_graph,
- initialize_uninitialized,
- save_codename_model,
- save_role_model,
- save_money_model,
- save_person_model,
- save_form_model,
- save_codesplit_model,
- save_timesplit_model,
- )
|