ソースを参照

AI提取增加医疗产品数据

luojiehua 1 ヶ月 前
コミット
5e681b3fc5

+ 24 - 23
BaseDataMaintenance/AIUtils/prompts.py

@@ -6,29 +6,30 @@ def get_prompt_extract_role(_text,max_length=30000):
     if len(_text)>max_length:
         _text = _text[:max_length-10000]+_text[-10000:]
     _prompt = '''
-    #公告内容开始:
-    -------------------------------
-    %s
-    -------------------------------
-    #公告内容结束
-    ##任务开始
-    #角色
-    招投标信息提取专家
-    #工作流程
-    1. 通读全文
-    2. 找到其中的招标人
-    3. 找到其中的中标信息,如中标人所在标段的中标金额
-    #规范
-    1. 要求提取的招标人和中标人必须是机构实体,如不是,则为""
-    2. 招标人是招标公告的业主单位
-    3. 中标人必须是该标的中标企业
-    4. 标段号是指中标人所中标的包号:如A包则为A,1包则为1
-    5. 中标信息中的中标人名称、中标金额和标段号必须和文中的信息对应,如果有多个,则再数组中返回多个
-    6. 中标人只需要提取能明确是第一中标人的,如未明确第一中标人的情况下,不应随意提取
-    7. 招标人联系方式只提取属于招标人的联系方式,联系电话只需要固话和手机
-    8. 项目预算和中标金额返回金额+单位的格式
-    #返回结果
-    结果返回json格式{"招标信息":{"招标人名称":"","项目预算":"","招标人联系方式":[{"联系人":"","联系电话":""}]},"中标信息":[{"中标人名称":"","中标金额":"":"标段号":""}]}
+#公告内容开始:
+-------------------------------
+%s
+-------------------------------
+#公告内容结束
+##任务开始
+#角色
+招投标信息提取专家
+#工作流程
+1. 通读全文
+2. 找到其中的招标人
+3. 找到其中的中标信息,如中标人所在标段的中标金额
+4. 找到其中的产品信息,如产品的品牌、型号、单价、数量、总价
+#规范
+1. 要求提取的招标人和中标人必须是机构实体,如不是,则为""
+2. 招标人是招标公告的业主单位
+3. 中标人必须是该标的中标企业
+4. 标段号是指中标人所中标的包号:如A包则为A,1包则为1
+5. 中标信息中的中标人名称、中标金额和标段号必须和文中的信息对应,如果有多个,则再数组中返回多个
+6. 中标人只需要提取能明确是第一中标人的,如未明确第一中标人的情况下,不应随意提取
+7. 招标人联系方式只提取属于招标人的联系方式,联系电话只需要固话和手机
+8. 项目预算和中标金额返回金额+单位的格式
+#返回结果
+结果返回json格式{"招标信息":{"招标人名称":"","项目预算":"","招标人联系方式":[{"联系人":"","联系电话":""}]},"中标信息":[{"中标人名称":"","中标金额":"":"标段号":""}],"产品信息":[{"产品名称":"","单价":"","数量":"","数量单位":"","总价":"","品牌":"","规格型号":"","品目编号":"","品目名称":""}]}
     '''%(_text[:max_length])
     return _prompt
 

+ 2 - 2
BaseDataMaintenance/maintenance/dataflow.py

@@ -4919,7 +4919,7 @@ class Dataflow_dumplicate(Dataflow):
 
         if item:
             log("start dumplicate_comsumer_handle")
-            self.dumplicate_comsumer_handle(item,None,self.ots_client,get_all=False,upgrade=False)
+            self.dumplicate_comsumer_handle(item,None,self.ots_client,get_all=False,upgrade=True)
             return
 
     def test_merge(self,list_docid_less,list_docid_greater):
@@ -5158,7 +5158,7 @@ if __name__ == '__main__':
     # test_attachment_interface()
     df_dump = Dataflow_dumplicate(start_delete_listener=False)
     # df_dump.start_flow_dumplicate()
-    df_dump.test_dumplicate(400075415256
+    df_dump.test_dumplicate(614326449
                             )
     # df_dump.dumplicate_comsumer_handle_interface(603504420,document_table="document_0000",document_table_index="document_0000_index",project_table="project_0000",project_table_index="project_0000_index_formerge")
     # compare_dumplicate_check()

ファイルの差分が大きいため隠しています
+ 148 - 7
BaseDataMaintenance/maintenance/dataflow_mq.py


+ 3 - 3
BaseDataMaintenance/maintenance/major_project/unionDocument.py

@@ -308,9 +308,9 @@ class MajorUnion():
 
     def producer(self):
         _time = getCurrent_date(format="%Y-%m-%d %H:%M:%S")
-        end_time = timeAdd(_time,days=-7,format="%Y-%m-%d %H:%M:%S")
-        bool_query = BoolQuery(must_queries=[
-            # RangeQuery(major_project_status,1,50,True,True),
+        end_time = timeAdd(_time,days=-2,format="%Y-%m-%d %H:%M:%S")
+        bool_query = BoolQuery(should_queries=[
+            RangeQuery(major_project_status,1,50,True,True),
             # RangeQuery(major_project_status,201,301,True,True),
             # TermQuery(major_project_id,"00048953975ad762e883f1626f6b99ec")
             RangeQuery(major_project_update_time,range_to=end_time)

+ 32 - 0
BaseDataMaintenance/maintenance/product/medical_product.py

@@ -0,0 +1,32 @@
+
+import re
+import sys,os
+import pandas as pd
+
+class MedicalProduct():
+
+    def __init__(self):
+        self.file_path = os.path.join(os.path.dirname(__file__),"医疗产品关键词.xlsx")
+        df = pd.read_excel(self.file_path)
+        self.list_medical_keyword = [str(a) for a in df["product_name"].tolist()]
+        self.legal_keyword = []
+        for _keyword in self.list_medical_keyword:
+            try:
+                if re.compile(_keyword):
+                    self.legal_keyword.append(_keyword)
+            except:
+                pass
+        print("|".join(self.legal_keyword))
+        self.medical_pattern = re.compile("|".join(self.legal_keyword))
+
+    def is_medical_product(self,content):
+        if self.medical_pattern.search(content):
+            return True
+        else:
+            return False
+
+
+
+if __name__ == '__main__':
+    MP = MedicalProduct()
+    print(MP.is_medical_product("0.211ml离心管"))

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません