tech_instance.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # -*- coding: utf-8 -*-
  2. # @Author: privacy
  3. # @Date: 2024-06-11 13:43:14
  4. # @Last Modified by: privacy
  5. # @Last Modified time: 2024-09-05 16:29:06
  6. # 技术部分定位
  7. from typing import List
  8. from celery_tasks.text_extractor import similar_match
  9. def tech_loc(scrutinize_dict: dict, outline_dict: List[dict], supplier: str):
  10. """
  11. 投标技术部分定位
  12. Args:
  13. scrutinize_dict: 详细评审
  14. outline_dict: 投标文件大纲
  15. """
  16. targets = []
  17. part = None
  18. for key in scrutinize_dict.keys():
  19. if '技术' in key:
  20. part = key
  21. break
  22. if not part:
  23. return None
  24. for ins in scrutinize_dict[key]:
  25. inst = ins['评分因素']
  26. text = ins['评分标准']
  27. weig = ins['权重']
  28. t = []
  29. for i in text.split('。'):
  30. for j in i.split(';'):
  31. for k in j.split(','):
  32. t.append(k)
  33. targets.append({
  34. 'title': inst,
  35. 'text': t,
  36. 'weight': weig
  37. })
  38. result = {
  39. 'scoringCriteria': [],
  40. '标准': []
  41. }
  42. for i in targets:
  43. try:
  44. title_sims = similar_match(outline_dict, [i['title']], key='title')
  45. except Exception as e:
  46. print(supplier)
  47. raise(e)
  48. result['scoringCriteria'].append({
  49. 'scoringFactors': i['title'],
  50. 'scoringStandard': i['text'],
  51. 'percentage': i['weight'],
  52. 'suppliers': [{
  53. 'name': supplier,
  54. 'grade': 'B',
  55. 'supplier': '总体服务方案的概括文字(200字以内)',
  56. 'pages': title_sims
  57. }]
  58. })
  59. # text_sims = similar_match(outline_dict, i['text'], key='title')
  60. # for j in range(len(text_sims)):
  61. # result['标准'].append({
  62. # '评分标准': i['text'][j],
  63. # '定位结果': text_sims[j]
  64. # })
  65. return result
  66. if __name__ == '__main__':
  67. import json
  68. from glob import glob
  69. from pprint import pprint
  70. with open('bidding_dataset.json', 'r', encoding='utf-8') as fp:
  71. scrutinizes = json.load(fp)
  72. for project in scrutinizes.keys():
  73. scrutinize_dict = scrutinizes[project]
  74. for file in glob(f'./data/0预审查初审详审测试数据/{project}/*/*-outline.json'):
  75. with open(file, 'r', encoding='utf-8') as fp:
  76. outline_dict = json.load(fp)
  77. supplier = file.split('\\')[-2]
  78. pprint(
  79. tech_loc(scrutinize_dict=scrutinize_dict, outline_dict=outline_dict, supplier=supplier)
  80. )