capbility.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from cdss.models.schemas import CDSSDict, CDSSInput,CDSSInt,CDSSOutput,CDSSText
  2. from cdss.libs.cdss_helper import CDSSHelper
  3. import logging
  4. logger = logging.getLogger(__name__)
  5. class CDSSCapability:
  6. cdss_helper: CDSSHelper = None
  7. def __init__(self):
  8. self.cdss_helper = CDSSHelper()
  9. #self.cdss_helper.load_local_data()
  10. logger.debug("CDSSCapability initialized")
  11. def process(self, input: CDSSInput, embeding_search:bool = True) -> CDSSOutput:
  12. start_nodes = []
  13. chief_complaint = input.get_value("chief_complaint")
  14. logger.info(f"process input: {input}")
  15. output = CDSSOutput()
  16. if chief_complaint:
  17. for keyword in chief_complaint:
  18. results = self.cdss_helper.node_search(
  19. keyword, limit=10, node_type="word"
  20. )
  21. for item in results:
  22. if item['score']>1.9:
  23. start_nodes.append(item['id'])
  24. logger.info(f"cdss start from {start_nodes}")
  25. result = self.cdss_helper.cdss_travel(input, start_nodes,max_hops=2)
  26. for item in result["details"]:
  27. name, data = item
  28. output.departments.value[name] = data
  29. for item in result["diags"][:5]:
  30. output.diagnosis.value[item[0]] = item[1]
  31. for item in result["checks"][:5]:
  32. item[1]['score'] = item[1]['count'] / result["total_checks"]
  33. output.checks.value[item[0]] = item[1]
  34. for item in result["drugs"][:5]:
  35. item[1]['score'] = item[1]['count'] / result["total_checks"]
  36. output.drugs.value[item[0]] = item[1]
  37. #print(f"\t药品:{item[0]} {item[1]['count'] / result["total_drugs"] * 100:.2f} %")
  38. return output