Browse Source

代码提交

SGTY 3 weeks ago
parent
commit
d3c22252f4
1 changed files with 70 additions and 0 deletions
  1. 70 0
      utils/excel_importer.py

+ 70 - 0
utils/excel_importer.py

@@ -0,0 +1,70 @@
+import pandas as pd
+from sqlalchemy.orm import Session
+from service.kg_node_service import KGNodeService
+from service.kg_prop_service import KGPropService
+import logging
+
+from utils.vectorizer import Vectorizer
+
+logger = logging.getLogger(__name__)
+
+class ExcelImporter:
+    def __init__(self, db: Session):
+        self.node_service = KGNodeService(db)
+        self.prop_service = KGPropService(db)
+    
+    def import_from_excel(self, file_path: str, category: str, prop_name: str):
+        try:
+            # 读取Excel文件
+            df = pd.read_excel(file_path, header=None)
+            
+            # 遍历每一行数据
+            for _, row in df.iterrows():
+                entity_name = str(row[0]).strip()
+                prop_value = str(row[1]).strip() if len(row) > 1 else ''
+                
+                if not entity_name:
+                    continue
+                
+                # 检查节点是否存在
+                node = self.node_service.get_node_by_name_category(entity_name, category)
+                
+                if not node:
+                    # 创建新节点
+                    node_data = {
+                        'name': entity_name,
+                        'category': category,
+                        'version': 'xysy',
+                        'embedding': Vectorizer.get_embedding(entity_name),
+                        'status': 0
+                    }
+                    node = self.node_service.create_node(node_data)
+                
+                # 创建属性
+                if prop_value:
+                    node_id = node['id'] if isinstance(node, dict) else node.id
+                    prop = self.prop_service.get_prop_by_ref_id(node_id, prop_name)
+                    if not prop:
+                        prop_data = {
+                            'ref_id': node_id,
+                            'category': 1,
+                            'prop_name': prop_name,
+                            'prop_value': prop_value,
+                            'type': 1
+                        }
+                        self.prop_service.create_prop(prop_data)
+            
+            return True
+        except Exception as e:
+            logger.error(f"导入Excel数据失败: {str(e)}")
+            raise ValueError(f"导入失败: {str(e)}")
+
+if __name__ == "__main__":
+    file_path = "C:\\Users\\17664\\Desktop\\入院主诊断-诊疗计划.xlsx"
+    category = "疾病"
+    prop_name = "intramural_treatment_plan"
+
+    from db.session import get_db
+    db = next(get_db())
+    importer = ExcelImporter(db)
+    importer.import_from_excel(file_path, category, prop_name)