re_servicetime.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #coding:UTF-8
  2. import re
  3. import pandas as pd
  4. def re_serviceTime(text):
  5. text_list = []
  6. text_list.append(text)
  7. # 初始化
  8. output_list = []
  9. text_index_list = []
  10. before = '(?P<before>' \
  11. '工期/交货期/服务期|工期,\(日历天\)|工期\(交货期\)|合格工期\(天\)|服务期限\(年\)|工期\(天\)' \
  12. '|工期要求|项目周期|工期\(交货期\)|计划工期\(服务期限\)|服务时限|履行期限|服务周期|供货期' \
  13. '|合格工期|计划工期\(服务期\)|服务期\(日历天\)|服务,期|交货\(完工\)时间|交付\(服务、完工\)时间' \
  14. '|交货时间|工期\(日历天\)' \
  15. '|服务期限为|计划工期|工期要求|服务期限|服务期' \
  16. '|投标工期|设计工期|合格服务周期|总工期|服务时间|流转期限|维护期限|服务时限|交货期|服务要求' \
  17. '|完成时间|服务期限|中标工期|项目周期|期限要求|周期|工期|供货期|合同履行日期|计划周期|工期' \
  18. ')'
  19. before2 = '(?P<before2>' \
  20. '自合同签订之日起至|合同签订后|合同签订之日起|约|自合同签订之日起|开工后|不超过|签订合同后|系统开发' \
  21. '|合同签订之日起至|自合同签订之日|合同签定后|自签订合同之日起|自合同签订起' \
  22. '|自合同签订生效之日起|自合同签订后不超过|中选后|均为|合同签订日至|本项目合同期|' \
  23. ')'
  24. charac = '(?P<charac>' \
  25. '[::,,]*' \
  26. ')'
  27. center = '(?P<center>' \
  28. '[自]?\d+年\d+月\d+日至\d+年\d+月\d+日|\d+年\d+月\d+日|[\d一二三四五六七两叁贰壹肆伍]+' \
  29. ')'
  30. center1 = '(?P<center1>' \
  31. '[自]?\d+年\d+月\d+日至\d+年\d+月\d+日|\d+年\d+月\d+日|[\d一二三四五六七两叁贰壹肆伍]+' \
  32. ')'
  33. after = '(?P<after>' \
  34. '天|个月|年|个日历天|日历天|日|\(日历天\)|\(天\)|周内|,日历天|' \
  35. ')'
  36. new1 = '(' \
  37. '\d{4}年?(\d{1,2}月?)?(\d{1,2}日?)?-(\d{4}年?)?(\d{1,2}月?)?(\d{1,2}日?)?(-\d{1,2}日?)?' \
  38. ')'
  39. reg = re.compile(before + charac + before2 + center + after)
  40. reg1 = re.compile(before + charac + '(.*?止)')
  41. reg2 = re.compile(before + charac + before2 + new1)
  42. reg_not = re.compile(u'(工期延误|工期节点|工期管理|交付使用'
  43. u'|工期、)'
  44. u'|工期情况|划工期内|服务期内')
  45. reg_not1 = re.compile(u'(履行日期:见|服务期限应按|签订合同前,|服务期限应按'
  46. u'|务期限:1、|同签订日期:|证金在合同签|服务期限截止'
  47. u')')
  48. reg_not2 = re.compile(u'截止|1\.|1、')
  49. for index in range(len(text_list)):
  50. # 初始化
  51. output_str = ""
  52. input_str = text_list[index]
  53. # 替换混淆词
  54. input_str = re.sub(reg_not, "####", input_str)
  55. input_str = re.sub(reg_not1, "######", input_str)
  56. input_str = re.sub(reg_not2, "##", input_str)
  57. output_str, text_index = re_findAllResult(reg2, input_str)
  58. if len(text_index) == 0:
  59. output_str, text_index = re_findAllResult(reg, input_str)
  60. if len(text_index) == 0:
  61. output_str, text_index = re_findAllResult(reg1, input_str)
  62. # 添加
  63. output_list.append(output_str)
  64. text_index_list.append(text_index)
  65. index2word = []
  66. for index in range(len(text_index_list)):
  67. word = ""
  68. for i in range(len(text_index_list[index])):
  69. word = word + text[text_index_list[index][i][0]:text_index_list[index][i][1]]
  70. if word != len(text_index_list[index])-1:
  71. word = word + " "
  72. index2word.append(word)
  73. return index2word[0], text_index_list[0]
  74. def re_findAllResult(reg, input, unit="", index=0):
  75. '''
  76. :param reg: 正则表达式
  77. :param input: 待匹配句子
  78. :param unit: 需要加的单位
  79. :param index: 字符串拼接的开始位置
  80. :return: 正则后的字符串
  81. '''
  82. match = re.findall(reg, input)
  83. output = ""
  84. # print(match)
  85. if match:
  86. ss = ""
  87. for i in range(len(match)):
  88. s = ""
  89. for j in range(index, len(match[i])):
  90. s = s + match[i][j]
  91. if unit != "" and j == len(match[i])-1:
  92. s = s + unit
  93. ss = ss + s
  94. if i < len(match)-1:
  95. ss = ss + " "
  96. output = ss
  97. # 全文下标
  98. text_index = []
  99. match1 = re.finditer(reg, input)
  100. for i in match1:
  101. d = i.groupdict()
  102. if d.get("before") is not None:
  103. front_len = len(d.get("before")) + len(d.get("charac"))
  104. else:
  105. front_len = 0
  106. text_index.append([i.start()+front_len, i.end()])
  107. return output, text_index
  108. def calculateLen(ss, i):
  109. front_len = 0
  110. back_len = 0
  111. for index in range(i):
  112. front_len += len(ss[index])
  113. for index in range(i+1, len(ss)):
  114. back_len += len(ss[index])
  115. return front_len, back_len
  116. def extract_servicetime(text):
  117. list_servicetime = []
  118. word, text_index_list = re_serviceTime(text)
  119. # print(word, text_index_list)
  120. for i in range(len(text_index_list)):
  121. word_list = word.split(" ")
  122. d = {"body": word_list[i], "begin_index": text_index_list[i][0], "end_index": text_index_list[i][1]}
  123. if len(word_list[i]) <= 35:
  124. list_servicetime.append(d)
  125. # print(list_servicetime)
  126. return list_servicetime
  127. if __name__ == '__main__':
  128. # df = pd.read_csv("C:\\Users\\admin\\Desktop\\serviceTime_text.csv")
  129. # s = df["text"].iloc[210]
  130. # s = u'''
  131. # ,大庆禾工煤炭分质清洁利用项目-临时用电二期工程设备、物资采购中标候选人公示,更多咨询报价请点击:http://bulletin.cebpubservice.com/candidateBulletin/2020-03-31/2678597.html,大庆禾工煤炭分质清洁利用顶目-临时用电二期工程设备、物资釆购中标候选人,(招标编号:XYwZ-20200309-5),公示结束时间:2020年04月03日,、评标情况,标段(包)[001大庆禾工煤嶽分质清洁利用项目-临时用屯二期工程设备、物资采购,中标候选人基本情况,
  132. # 中标候选人第1名:哈尔滨龙网电力设备有限公司,投标报价:19.98万元,质量,合格,工期/交货期/服务期:30天,中标候选人第2名:
  133. # 哈尔滨昊龙电气没备制造有限公司,投标报价:19.87万元,质,量:合格,工期/交货期/服务期:30天,
  134. # 中标侯选人第3名:江南电气有限公司,投标报价:20.13万元,质量:合格,工期,交货期/服务期:30天:2、中标候选人按照招标文件要求承诘的项目伉责人情况,中标侯选人(哈尔滨龙网电力设备有限公司)的项目负贵人:宋环宇身份证,10398309240912;,中标候选人(哈尔滨昊龙电气设各制造有限公司)的项目负贵人:尹水生身份证,2:0227197902120112,中标候选人(江南电气有限公司)的项目负贵人:秦世亮身份证,230104197410012334;,3、中标候选人响应招标文件要求的资格能力条件,中标候选人(哈尔滨龙网电力设备有限公司)的资格能力条件:完全响应招标公告;中标选人(哈尔滨昊龙电气没备制造有公司)的资格能力条件:完伞响应招标公,告,中标候选人(江南电气有限公司)的资格能力条件:完仝响应招标公告,、提出异议的渠道和方式,以上结果公示三日,公示期间投标人或者其他利害关系人如有异议请以书面形式向招标,人提出;如无异议,预中标人即为中标人。三、其他,项目编号:XYWZ-20200309-5,项目名称:大庆禾工煤炭分质清沽划用项目-临时电二期工程设备、物资采购,计划供货期:合同签订后30日内供货,交货地点:施工现场地面交货,质量标准:符合国家及国家电网行业合格标准,招邡方式:公开招标,开标时间:2020华3月3日9时30分,公示起止日期:2020年4月1日至2020年±月3日,经评标委员会评审,中标候选人由高到低排序前三名为:第一名:晗尔滨龙网电力设备有限公司,第二名:晗尔滨昊龙电气设备制造有限公司,第三名:江南电气有限公司,点标有,经评标委员会评审,依法确定排名第一的中标候选人为预中标人。预中标人为:晗尔滨龙网电力设备有限公司,颀中标价:¥199,800.00元,以上结果公示三日,公小期间投标人或者其他利害关系人如有异议请以书面形式向招标入提,出;如无异议,预中标人即为中标人。监督部门及联系方式:黑龙江北星电力有跟公罰、0459-6504811,四、监督部门,本招标项目的监督部门为黑龙江北星电力有限公司。五、联系方式,招标人:黑龙江北星电力有限公司,地址:大庆市让胡路区中买大街南段28号,联系人:卜先生,电话:0459-6604811,电子邮件:418864qgq.com,招标代理机构:黑龙江省信亿招标有限公司,地址:哈尔滨市香坊区红滨大街1号516室,联系人:张海洋,电话;0451-55151625,电子邮件:xyzb5164163.com,招标人或其招标代理机构主要负责人(项目负贲人,(签名),1,招标人或其招标代理机构:与,盖章),
  135. # '''
  136. s = " 工期:2019年9月-2023年12月 要求交货期:2021-11-31"
  137. # s = "自合同签订之日起至2022-6-30 自合同签订之日起至2022-07-30"
  138. print(extract_servicetime(s))
  139. s = "自合同签订之日起至2022-6-30 工期:2020年10月-12月底(90日历天)"
  140. new1 = '(' \
  141. '\d{4}年?(\d{1,2}月?)-\d{4}年?(\d{1,2}月?)' \
  142. ')'
  143. match = re.search(new1, s)
  144. print(match)
  145. # result_list = []
  146. # for index, row in df.iterrows():
  147. # result = extract_servicetime(row["text"])
  148. # result_list.append(str(result))
  149. #
  150. # df["new_word"] = pd.DataFrame(result_list)
  151. # df.to_csv("C:\\Users\\admin\\Desktop\\serviceTime_text_new.csv")