diff --git a/runtime/ops/mapper/__init__.py b/runtime/ops/mapper/__init__.py index ed0a0fcb..84eb045f 100644 --- a/runtime/ops/mapper/__init__.py +++ b/runtime/ops/mapper/__init__.py @@ -63,5 +63,6 @@ def _import_operators(): from . import video_speech_asr from . import video_subtitle_ocr from . import video_text_ocr + from . import medcleanstd_full_operator _import_operators() diff --git a/runtime/ops/mapper/medcleanstd_full_operator/README.md b/runtime/ops/mapper/medcleanstd_full_operator/README.md new file mode 100644 index 00000000..4bb35e9d --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/README.md @@ -0,0 +1,110 @@ +# MedCleanStd Full Operator + +## Overview + +`medcleanstd_full_operator` is a custom mapper operator package for DataMate. + +It includes: + +- operator registration entry +- operator metadata and UI settings +- main pipeline implementation +- document parsing helper code +- text correction helper code +- NER helper code +- term normalization helper code + +## Directory Structure + +```text +medcleanstd_full_operator/ +├── __init__.py +├── metadata.yml +├── process.py +├── README.md +├── requirements.txt +├── myparser/ +│ └── parser.py +├── mycorrector/ +│ ├── confusion_dict.json +│ ├── corrector.py +│ └── update_l1cache.py +├── ner/ +│ ├── compat.py +│ ├── ner_npu.py +│ └── siamese_uie_pipeline_batch.py +└── normalizer/ + ├── accuracy_term_rules.json + ├── l1_cache.json + ├── normalizer_npu.py + ├── std_terms.index + └── std_terms.json +``` + +## File Responsibilities + +- `__init__.py`: registers `MedCleanStdFullMapper` into DataMate operator registry +- `metadata.yml`: defines operator identity, category, runtime resources, and frontend settings +- `process.py`: main mapper entry, parameter parsing, stage orchestration, and result export +- `myparser/`: document parsing helpers +- `mycorrector/`: medical text correction helpers and dictionary resources +- `ner/`: SiameseUIE-based NER runtime helpers +- `normalizer/`: medical term normalization logic and resources +- `requirements.txt`: Python dependencies required by this operator package + +## Model Paths + +The runtime environment is expected to provide: + +- `/models/MedCleanStd/SiameseUIE` +- `/models/MedCleanStd/bge-small-zh-v1.5` + +## Input Expectations + +The operator accepts a `sample` dictionary. Common supported input fields are: + +- `filePath` or `file_path`: source document path +- `source_path`: optional source path alias +- `text`: raw text input when no local file is used +- `export_path` or `exportPath`: optional output directory override + +## Main Settings + +Common configurable settings in `metadata.yml` include: + +- `parse_overwrite_text` +- `use_proper_corrector` +- `segment_length` +- `max_text_length` +- `correct_overwrite_text` +- `ner_schema` +- `inference_batch_size` +- `max_sentences` +- `use_l1_cache` +- `batch_size` +- `max_entity_length` + +## Output Fields + +The operator writes intermediate and final results back into `sample`. Common output fields include: + +- `parsed_text` +- `corrected_text` +- `entities` +- `normalized_entities` +- `entity_count` +- `normalized_entity_count` +- `result_json_path` +- `medclean_pipeline_status` + +## Usage Notes + +1. Place the operator directory under `runtime/ops/mapper/medcleanstd_full_operator`. +2. Ensure `metadata.yml`, `process.py`, and `__init__.py` are present. +3. Ensure required models are mounted under `/models/MedCleanStd`. +4. Import the operator package from `runtime/ops/mapper/__init__.py`. +5. Configure parameters from the DataMate frontend or task definition. + +## Result Export + +When a valid source path and export directory are available, the operator writes a JSON result file beside the processed output and stores the path in `result_json_path`. diff --git a/runtime/ops/mapper/medcleanstd_full_operator/__init__.py b/runtime/ops/mapper/medcleanstd_full_operator/__init__.py new file mode 100644 index 00000000..0e587f09 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +from datamate.core.base_op import OPERATORS + +OPERATORS.register_module( + module_name="MedCleanStdFullMapper", + module_path="ops.mapper.medcleanstd_full_operator.process", +) diff --git a/runtime/ops/mapper/medcleanstd_full_operator/metadata.yml b/runtime/ops/mapper/medcleanstd_full_operator/metadata.yml new file mode 100644 index 00000000..4c7c3ae4 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/metadata.yml @@ -0,0 +1,119 @@ +name: 'MedCleanStd 全流程算子' +description: '将文档解析、文本纠错、医学实体识别和术语标准化整合到一个算子中,并将最终结果落盘为 JSON 文件。' +language: 'python' +vendor: 'huawei' +raw_id: 'MedCleanStdFullMapper' +version: '1.0.0' +modal: 'text' +inputs: 'text' +outputs: 'text' +types: + - 'cleaning' + - 'annotation' +release: + - 'MedCleanStd 全流程一体化算子。' +runtime: + memory: 2147483648 + cpu: 1.0 + gpu: 0.1 + npu: 0.2 +settings: + parse_overwrite_text: + name: '解析结果回写 text' + description: '启用后将解析得到的文本回写到 sample.text,供后续阶段直接复用。' + type: 'switch' + defaultVal: 'true' + required: false + checkedLabel: '是' + unCheckedLabel: '否' + use_proper_corrector: + name: '启用拼音纠错' + description: '在混淆词纠错之后,继续启用 ProperCorrector 做拼音和错别字纠错。' + type: 'switch' + defaultVal: 'false' + required: false + checkedLabel: '是' + unCheckedLabel: '否' + segment_length: + name: '纠错分段长度' + description: '当启用 ProperCorrector 时,较长文本会按该长度分段处理。' + type: 'slider' + defaultVal: 100 + min: 50 + max: 300 + step: 10 + max_text_length: + name: '纠错最大文本长度' + description: '当文本长度超过该阈值时,自动跳过 ProperCorrector 以提升速度。' + type: 'slider' + defaultVal: 200 + min: 100 + max: 600 + step: 20 + correct_overwrite_text: + name: '纠错结果回写 text' + description: '启用后将纠错后的文本回写到 sample.text,供 NER 直接使用。' + type: 'switch' + defaultVal: 'true' + required: false + checkedLabel: '是' + unCheckedLabel: '否' + ner_schema: + name: 'NER 抽取目标' + description: '选择需要抽取的医学实体类型。' + type: 'checkbox' + defaultVal: '疾病,症状' + required: true + options: + - label: '疾病' + value: '疾病' + - label: '症状' + value: '症状' + - label: '药品' + value: '药品' + - label: '手术' + value: '手术' + - label: '检查' + value: '检查' + - label: '检验' + value: '检验' + inference_batch_size: + name: 'NER 推理批大小' + description: 'SiameseUIE 实体识别时使用的批处理大小。' + type: 'slider' + defaultVal: 64 + min: 8 + max: 128 + step: 8 + max_sentences: + name: 'NER 分句块大小' + description: '每个 NER 文本块中允许包含的最大句子数。' + type: 'slider' + defaultVal: 80 + min: 10 + max: 160 + step: 10 + use_l1_cache: + name: '启用 L1 缓存' + description: '在向量标准化前优先使用高频术语精确匹配缓存。' + type: 'switch' + defaultVal: 'true' + required: false + checkedLabel: '是' + unCheckedLabel: '否' + batch_size: + name: '标准化批大小' + description: '术语向量编码与标准化时使用的批处理大小。' + type: 'slider' + defaultVal: 24 + min: 4 + max: 128 + step: 4 + max_entity_length: + name: '最大实体长度' + description: '超过该长度的实体将不进入最终标准化输出。' + type: 'slider' + defaultVal: 50 + min: 10 + max: 200 + step: 5 diff --git a/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/confusion_dict.json b/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/confusion_dict.json new file mode 100644 index 00000000..2baed897 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/confusion_dict.json @@ -0,0 +1,239 @@ +{ + "澜尾炎": "阑尾炎", + "澜尾区": "阑尾区", + "澜尾": "阑尾", + "急幸": "急性", + "慢形": "慢性", + "福膜炎": "腹膜炎", + "糖鸟病": "糖尿病", + "转移形": "转移性", + "尤下腹": "右下腹", + "尤下腹通": "右下腹痛", + "奇周": "脐周", + "恶欣": "恶心", + "压通": "压痛", + "反跳通": "反跳痛", + "液形": "液性", + "麦式点": "麦氏点", + "白细泡": "白细胞", + "头泡": "头孢", + "止通片": "止痛片", + "青梅素": "青霉素", + "切除树": "切除术", + "就珍": "就诊", + "高雪压": "高血压", + "山冻": "山东", + "普外可": "普外科", + "恶芯": "恶心", + "放设痛": "放射痛", + "胰腺言": "胰腺炎", + "不祥": "不详", + "阑位炎": "阑尾炎", + "阑位": "阑尾", + "戒咽": "戒烟", + "冠心饼": "冠心病", + "高血酯": "高血脂", + "肌更塞": "心肌梗死", + "脑更塞": "脑梗塞", + "脑更死": "脑梗死", + "肺结该": "肺结核", + "肺言": "肺炎", + "支器管炎": "支气管炎", + "肖化": "消化", + "味": "胃", + "肠道": "肠道", + "肚泄": "腹泻", + "便密": "便秘", + "肝言": "肝炎", + "胆南炎": "胆囊炎", + "但囊": "胆囊", + "肾言": "肾炎", + "肾衰接": "肾衰竭", + "尿毒征": "尿毒症", + "膀胱言": "膀胱炎", + "子宫言": "子宫内膜炎", + "子公": "子宫", + "巢囊": "卵巢", + "乳泉": "乳腺", + "甲壮腺": "甲状腺", + "甲亢": "甲亢", + "糖料病": "糖尿病", + "高血牙": "高血压", + "心动过缓": "心动过缓", + "心季": "心悸", + "心绞通": "心绞痛", + "呼级": "呼吸", + "咳唆": "咳嗽", + "谈": "痰", + "喘希": "喘息", + "呼衰": "呼吸衰竭", + "血养": "血氧", + "贫学": "贫血", + "学小板": "血小板", + "红细泡": "红细胞", + "中形粒细泡": "中性粒细胞", + "林巴细泡": "淋巴细胞", + "免役": "免疫", + "过min": "过敏", + "皮珍": "皮疹", + "寻麻珍": "荨麻疹", + "湿珍": "湿疹", + "牛皮癖": "牛皮癣", + "骨拆": "骨折", + "骨裂": "骨裂", + "关结": "关节", + "脊住": "脊柱", + "劲椎": "颈椎", + "腰椎间盆": "腰椎间盘突出", + "骨值疏松": "骨质疏松", + "风事": "风湿", + "通风": "痛风", + "脑言": "脑炎", + "脑莫炎": "脑膜炎", + "颠痫": "癫痫", + "抽畜": "抽搐", + "摊换": "瘫痪", + "失语": "失语", + "昏米": "昏迷", + "视力模糊": "视力模糊", + "耳呜": "耳鸣", + "鼻言": "鼻炎", + "扁导体": "扁桃体", + "咽言": "咽炎", + "后喉": "咽喉", + "牙银": "牙龈", + "口枪": "口腔", + "食到": "食道", + "肖化不良": "消化不良", + "胃言": "胃炎", + "胃亏": "胃溃疡", + "12 指肠": "十二指肠", + "肠言": "肠炎", + "结常": "结肠", + "直常": "直肠", + "志": "痣", + "脱岗": "脱肛", + "内痔": "内痔", + "外痔": "外痔", + "混和痔": "混合痔", + "胆结时": "胆结石", + "肾结时": "肾结石", + "尿结时": "尿路结石", + "尿道言": "尿道炎", + "尿急": "尿急", + "尿通": "尿痛", + "血尿": "血尿", + "蛋白尿": "蛋白尿", + "月惊不调": "月经不调", + "痛惊": "痛经", + "闭惊": "闭经", + "阴到言": "阴道炎", + "盆低": "盆腔炎", + "宫井": "宫颈", + "宫井炎": "宫颈炎", + "子公内膜": "子宫内膜", + "不运": "不孕", + "流产": "流产", + "易外孕": "宫外孕", + "产褥": "产褥", + "难产": "难产", + "剖宫产": "剖宫产", + "顺产": "顺产", + "母乳": "母乳", + "小儿": "小儿", + "佝楼病": "佝偻病", + "积": "积", + "厌食": "厌食", + "矮小": "矮小", + "早熟": "性早熟", + "自闭症": "自闭症", + "多动正": "多动症", + "老花": "老花", + "近事": "近视", + "沙眼": "沙眼", + "白内丈": "白内障", + "表光": "散光", + "青光眼": "青光眼", + "中耳言": "中耳炎", + "龙": "聋", + "精社": "精神", + "抑鱼": "抑郁", + "焦绿": "焦虑", + "燥狂": "躁狂", + "失棉": "失眠", + "神精": "神经", + "更年": "更年期", + "月童": "儿童", + "老年": "老年", + "妇女": "妇女", + "男性": "男性", + "女姓": "女性", + "建康": "健康", + "体捡": "体检", + "查房": "查房", + "复珍": "复诊", + "门珍": "门诊", + "急珍": "急诊", + "往院": "住院", + "出愿": "出院", + "手树": "手术", + "嘛醉": "麻醉", + "输液": "输液", + "打真": "打针", + "吃药": "吃药", + "药物": "药物", + "抗生树": "抗生素", + "消盐": "消炎", + "止痛": "止痛", + "退少": "退烧", + "感帽": "感冒", + "发少": "发烧", + "低少": "低烧", + "高少": "高烧", + "头通": "头痛", + "头晕": "头晕", + "晕诀": "晕厥", + "乏丽": "乏力", + "皮劳": "疲劳", + "消瘦": "消瘦", + "肥胖": "肥胖", + "水种": "水肿", + "发钳": "发绀", + "黄胆": "黄疸", + "腹水": "腹水", + "休克": "休克", + "死忘": "死亡", + "抢久": "抢救", + "病危": "病危", + "病重": "病重", + "留关": "留观", + "隔离": "隔离", + "传染": "传染", + "防疫": "防疫", + "预方": "预防", + "疫苖": "疫苗", + "核酸": "核酸", + "抗提": "抗体", + "细军": "细菌", + "炳毒": "病毒", + "真军": "真菌", + "寄升虫": "寄生虫", + "肿溜": "肿瘤", + "癌征": "癌症", + "Ai 征": "癌症", + "良形": "良性", + "恶形": "恶性", + "转移": "转移", + "化聊": "化疗", + "放聊": "放疗", + "靶像": "靶向", + "免役治疗": "免疫治疗", + "愈后": "预后", + "复发": "复发", + "并伐征": "并发症", + "后以征": "后遗症", + "敏gan": "敏感", + " nai 药": "耐药", + "康扶": "康复", + "李复": "理疗" +} \ No newline at end of file diff --git a/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/corrector.py b/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/corrector.py new file mode 100644 index 00000000..bb6fd7f2 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/corrector.py @@ -0,0 +1,142 @@ +from pycorrector import ProperCorrector +import json +import os + + +class MedicalCorrector: + def __init__(self, use_proper_corrector=False, segment_length=100, max_text_length=200): + """ + 初始化医疗纠错器 + + Args: + use_proper_corrector: 是否使用 ProperCorrector 进行拼音和错别字纠正 + False: 仅使用混淆集(速度快,<1ms) + True: 使用混淆集 + ProperCorrector(速度慢,~600ms) + segment_length: 分段长度,当文本长度超过此值时进行分段处理以加速(默认100字符) + max_text_length: 当文本长度超过此值时,自动禁用 ProperCorrector 以提升速度(默认200字符) + """ + # 初始化自定义医疗混淆集(用于快速替换常见医疗术语错误) + # 格式:错误词 -> 正确词 + # 按长度从长到短排序,优先匹配长词(避免短词覆盖长词) + self.use_proper_corrector = use_proper_corrector + self.segment_length = segment_length + self.max_text_length = max_text_length + + # 从 JSON 文件加载纠错字典 + script_dir = os.path.dirname(os.path.abspath(__file__)) + confusion_dict_path = os.path.join(script_dir, "confusion_dict.json") + with open(confusion_dict_path, 'r', encoding='utf-8') as f: + self.confusion_dict = json.load(f) + # 按长度从长到短排序,优先匹配长词 + self.sorted_keys = sorted( + self.confusion_dict.keys(), key=len, reverse=True) + + # 可选:使用 ProperCorrector 进行拼音和错别字纠正(CPU版本) + # ProperCorrector 使用混淆集 + 字频统计,不加载BERT,但速度较慢(~600ms) + if self.use_proper_corrector: + self.proper_corrector = ProperCorrector() + print( + f">>> [Corrector] 医疗混淆集和拼音纠错器加载完成") + else: + self.proper_corrector = None + print(">>> [Corrector] 医疗混淆集加载完成(快速模式,仅使用混淆集)") + + def correct(self, text): + """ + 执行纠错:先使用混淆集快速替换,再使用ProperCorrector处理拼音和错别字 + """ + # 第一步:使用混淆集快速替换常见医疗术语错误 + corrected_text = text + confusion_errors = [] + for wrong_word in self.sorted_keys: + if wrong_word in corrected_text: + corrected_text = corrected_text.replace( + wrong_word, self.confusion_dict[wrong_word]) + confusion_errors.append( + (wrong_word, self.confusion_dict[wrong_word])) + + # 第二步:可选使用 ProperCorrector 处理拼音错误和未预定义的错别字 + if self.use_proper_corrector and self.proper_corrector: + # 智能策略:如果文本太长,自动跳过 ProperCorrector 以提升速度 + # ProperCorrector 对短文本效果好且快,对长文本慢且效果有限 + if len(corrected_text) > self.max_text_length: + # 文本太长,仅使用混淆集 + final_text = corrected_text + proper_errors = [] + elif len(corrected_text) > self.segment_length: + # 中等长度文本,分段处理 + final_text, proper_errors = self._correct_with_segmentation( + corrected_text) + else: + # 短文本,直接处理(最快) + proper_result = self.proper_corrector.correct(corrected_text) + final_text = proper_result.get('target', corrected_text) + proper_errors = proper_result.get('errors', []) + else: + # 仅使用混淆集,速度更快 + final_text = corrected_text + proper_errors = [] + + # 合并错误信息 + all_errors = confusion_errors + proper_errors + + return final_text, { + 'errors': all_errors, + 'source': text, + 'target': final_text, + 'confusion_errors': confusion_errors, + 'proper_errors': proper_errors + } + + def _correct_with_segmentation(self, text): + """ + 分段处理长文本,提升 ProperCorrector 的处理速度 + """ + import re + + # 按句号、换行符等自然分隔符分段 + segments = re.split(r'([。\n])', text) + # 重新组合,保留分隔符 + segments_with_sep = [] + for i in range(0, len(segments), 2): + if i < len(segments): + segment = segments[i] + sep = segments[i+1] if i+1 < len(segments) else '' + if segment.strip(): + segments_with_sep.append((segment, sep)) + + # 如果分段后仍然很长,按固定长度切分 + final_segments = [] + for segment, sep in segments_with_sep: + if len(segment) <= self.segment_length: + final_segments.append((segment, sep)) + else: + # 按固定长度切分 + for i in range(0, len(segment), self.segment_length): + sub_segment = segment[i:i+self.segment_length] + final_segments.append( + (sub_segment, '' if i+self.segment_length < len(segment) else sep)) + + # 分段处理 + corrected_parts = [] + all_proper_errors = [] + + for segment, sep in final_segments: + if segment.strip(): + proper_result = self.proper_corrector.correct(segment) + corrected_parts.append(proper_result.get('target', segment)) + all_proper_errors.extend(proper_result.get('errors', [])) + corrected_parts.append(sep) + + final_text = ''.join(corrected_parts) + return final_text, all_proper_errors + + +# --- 单元测试 --- +if __name__ == "__main__": + corrector = MedicalCorrector() + text = "患者尤下腹痛,既往有澜尾炎病史。" + res, det = corrector.correct(text) + print(f"原句: {text}") + print(f"纠正: {res}") + print(f"明细: {det}") diff --git a/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/update_l1cache.py b/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/update_l1cache.py new file mode 100644 index 00000000..16034aa9 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/mycorrector/update_l1cache.py @@ -0,0 +1,151 @@ +import json +import os +import sys +from typing import Dict + + +def load_l1_cache(path: str) -> Dict[str, Dict[str, str]]: + """ + 读取已有的 l1_cache.json,并统一转换成: + { name(str): {"std_name": str, "code": str}, ... } + 无文件或空文件时返回空 dict。 + """ + if not os.path.exists(path) or os.path.getsize(path) == 0: + return {} + + with open(path, "r", encoding="utf-8") as f: + data = json.load(f) + + # 支持历史格式: + # 1) 直接就是 {name: code, ...} + if isinstance(data, dict): + mapping: Dict[str, Dict[str, str]] = {} + for k, v in data.items(): + if k is None or v is None: + continue + name = str(k) + code = str(v) + mapping[name] = {"std_name": name, "code": code} + return mapping + + # 2) [ {"name": "...", "code": "..."} 或 {"name": "...", "std_name": "...", "code": "..."} , ... ] + if isinstance(data, list): + mapping: Dict[str, Dict[str, str]] = {} + for item in data: + if not isinstance(item, dict): + continue + name = item.get("name") + std_name = item.get("std_name") or name + code = item.get("code") + if name and code is not None: + mapping[str(name)] = { + "std_name": str(std_name), + "code": str(code), + } + return mapping + + raise ValueError(f"不支持的 l1_cache 格式: {type(data)}") + + +def save_l1_cache(path: str, mapping: Dict[str, Dict[str, str]]) -> None: + """ + 将 {name: {"std_name": ..., "code": ...}} 形式的映射,保存为 + [ {"name": name, "std_name": std_name, "code": code}, ... ] + 便于人工查看和后续扩展。 + """ + items = [ + { + "name": name, + "std_name": value.get("std_name", name), + "code": value.get("code"), + } + for name, value in sorted(mapping.items(), key=lambda kv: kv[0]) + ] + with open(path, "w", encoding="utf-8") as f: + json.dump(items, f, ensure_ascii=False, indent=2) + + +def collect_from_result(result_path: str) -> Dict[str, Dict[str, str]]: + """ + 从 main.py 输出的 result.json 中抽取: + text -> {"std_name": normalized.std_name, "code": normalized.std_code} + """ + with open(result_path, "r", encoding="utf-8") as f: + data = json.load(f) + + if not isinstance(data, list): + raise ValueError("期望 main.py 输出为 JSON 数组(list) 格式") + + mapping: Dict[str, Dict[str, str]] = {} + for item in data: + if not isinstance(item, dict): + continue + text = item.get("text") + normalized = item.get("normalized") or {} + if not isinstance(normalized, dict): + continue + std_code = normalized.get("std_code") + std_name = normalized.get("std_name") + if text and std_code: + # 这里按你的需求: + # name = 原始 text + # std_name = 归一化后的标准名称 + # code = 归一化后的编码 + mapping[str(text)] = { + "std_name": str(std_name) if std_name is not None else str(text), + "code": str(std_code), + } + + return mapping + + +def main(): + if len(sys.argv) < 2: + prog = os.path.basename(sys.argv[0]) or "update_l1cache.py" + print(f"用法: python {prog} [l1_cache_path]") + print(" : main.py 生成的 *_result.json 文件") + print(" [l1_cache_path]: l1_cache.json 路径,默认为 ../normalizer/l1_cache.json") + sys.exit(1) + + result_path = sys.argv[1] + if not os.path.exists(result_path): + print(f"错误: 找不到输入文件 {result_path}") + sys.exit(1) + + # 默认 l1_cache 路径:相对于当前脚本 + if len(sys.argv) >= 3: + l1_cache_path = sys.argv[2] + else: + script_dir = os.path.dirname(os.path.abspath(__file__)) + l1_cache_path = os.path.join(script_dir, "..", "normalizer", "l1_cache.json") + + # 1. 读已有 l1_cache + old_cache = load_l1_cache(l1_cache_path) + + # 2. 从 main 结果中收集新条目 + new_entries = collect_from_result(result_path) + + added, updated = 0, 0 + for name, entry in new_entries.items(): + if name not in old_cache: + added += 1 + else: + old_entry = old_cache[name] + # 如果 std_name 或 code 有变化,都视为更新 + if ( + old_entry.get("std_name") != entry.get("std_name") + or old_entry.get("code") != entry.get("code") + ): + updated += 1 + old_cache[name] = entry + + # 3. 写回 l1_cache + os.makedirs(os.path.dirname(l1_cache_path), exist_ok=True) + save_l1_cache(l1_cache_path, old_cache) + + print(f"更新完成: 新增 {added} 条, 覆盖 {updated} 条, 总计 {len(old_cache)} 条。") + print(f"l1_cache 路径: {os.path.abspath(l1_cache_path)}") + + +if __name__ == "__main__": + main() diff --git a/runtime/ops/mapper/medcleanstd_full_operator/myparser/parser.py b/runtime/ops/mapper/medcleanstd_full_operator/myparser/parser.py new file mode 100644 index 00000000..f30c9268 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/myparser/parser.py @@ -0,0 +1,129 @@ +import io +import os +import docx +from docx import Document + + +class DocParser: + def __init__(self): + pass + + def parse(self, file_path_or_bytes, return_position_map=False): + """ + 解析 docx 文件,返回清洗后的单行长文本 + + Args: + file_path_or_bytes: 文件路径或二进制流 + return_position_map: 是否返回位置映射(字符位置 -> (row, column)) + + Returns: + 如果 return_position_map=False: 返回文本字符串 + 如果 return_position_map=True: 返回 (text, position_map) 元组 + position_map: dict,key 是字符在文本中的位置,value 是 (row, column) 元组 + """ + # 兼容文件路径或二进制流 + if isinstance(file_path_or_bytes, str): + # 检查文件是否存在 + if not os.path.exists(file_path_or_bytes): + raise FileNotFoundError(f"文件不存在: {file_path_or_bytes}") + + # 尝试作为 docx 文件打开,如果失败则作为纯文本处理 + try: + doc = Document(file_path_or_bytes) + except Exception as e: + # 如果不是有效的 docx 文件,尝试作为纯文本读取 + if "Package not found" in str(e) or "not a zipfile" in str(e).lower(): + with open(file_path_or_bytes, 'r', encoding='utf-8') as f: + text = f.read() + # 按行分割并清理,去除每行末尾的句号避免重复 + lines = [] + for line in text.split('\n'): + line = line.strip() + if line: + # 去除末尾的句号(如果存在),避免连接时重复 + if line.endswith('。'): + line = line[:-1] + lines.append(line) + # 使用换行符连接,保留段落结构 + result = "\n".join(lines) + + if return_position_map: + # 构建位置映射 + position_map = {} + current_pos = 0 + for row, line in enumerate(lines): + line_len = len(line) + for col in range(line_len): + position_map[current_pos] = (row, col) + current_pos += 1 + # 换行符位置 + if row < len(lines) - 1: # 不是最后一行 + position_map[current_pos] = (row, line_len) + current_pos += 1 + return result, position_map + + return result + else: + raise + else: + doc = Document(io.BytesIO(file_path_or_bytes)) + + full_text_list = [] + + # 1. 提取段落 + for para in doc.paragraphs: + text = para.text.strip() + if text: + # 去除末尾的句号(如果存在),避免连接时重复 + if text.endswith('。'): + text = text[:-1] + full_text_list.append(text) + + # 2. 提取表格 (线性化处理:保留语义的关键) + for table in doc.tables: + for row in table.rows: + # 将表格的一行转换为 "Key: Value" 或 "A B C" 的形式 + cells = [cell.text.strip() + for cell in row.cells if cell.text.strip()] + if cells: + # 用空格连接单元格,形成自然语句 + row_text = " ".join(cells) + # 去除末尾的句号(如果存在) + if row_text.endswith('。'): + row_text = row_text[:-1] + full_text_list.append(row_text) + + # 拼接为一个长字符串,使用换行符连接以保留段落结构 + result = "\n".join(full_text_list) + + if return_position_map: + # 构建位置映射:字符位置 -> (row, column) + # 注意:这里假设文本是用 \n 连接的,每个段落是一行 + position_map = {} + current_pos = 0 + + for row, line in enumerate(full_text_list): + line_len = len(line) + # 记录该行的每个字符位置 + for col in range(line_len): + position_map[current_pos] = (row, col) + current_pos += 1 + # 换行符位置 + if row < len(full_text_list) - 1: # 不是最后一行 + position_map[current_pos] = (row, line_len) # 换行符位置 + current_pos += 1 + + return result, position_map + + return result + + +# --- 单元测试 --- +if __name__ == "__main__": + # 您需要创建一个名为 test.docx 的文件来测试 + parser = DocParser() + # 使用相对于脚本文件位置的路径,这样无论从哪里运行都能正确找到文件 + script_dir = os.path.dirname(os.path.abspath(__file__)) + test_file = os.path.join(script_dir, "test.docx") + print(parser.parse(test_file)) + # pass diff --git a/runtime/ops/mapper/medcleanstd_full_operator/ner/compat.py b/runtime/ops/mapper/medcleanstd_full_operator/ner/compat.py new file mode 100644 index 00000000..98ae66bd --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/ner/compat.py @@ -0,0 +1,283 @@ +from __future__ import annotations + +import ast +import hashlib +import os +import sys +import types + + +def _install_simplejson_shim() -> None: + try: + import simplejson # noqa: F401 + except ModuleNotFoundError: + import json as _json + + sys.modules["simplejson"] = _json + + +def _install_sortedcontainers_shim() -> None: + try: + import sortedcontainers # noqa: F401 + except ModuleNotFoundError: + module = types.ModuleType("sortedcontainers") + + class SortedList(list): + def __init__(self, iterable=None, key=None): + self._key = key or (lambda value: value) + values = list(iterable) if iterable is not None else [] + values.sort(key=self._key) + super().__init__(values) + + def add(self, value): + super().append(value) + super().sort(key=self._key) + + module.SortedList = SortedList + sys.modules["sortedcontainers"] = module + + +def _install_addict_shim() -> None: + try: + import addict # noqa: F401 + except ModuleNotFoundError: + module = types.ModuleType("addict") + + class Dict(dict): + def __init__(self, *args, **kwargs): + super().__init__() + self.update(*args, **kwargs) + + def __getattr__(self, item): + try: + return self[item] + except KeyError as exc: + raise AttributeError(item) from exc + + def __setattr__(self, key, value): + self[key] = value + + def __delattr__(self, item): + try: + del self[item] + except KeyError as exc: + raise AttributeError(item) from exc + + def __setitem__(self, key, value): + super().__setitem__(key, self._convert(value)) + + def update(self, *args, **kwargs): + for mapping in args: + if hasattr(mapping, "items"): + for k, v in mapping.items(): + self[k] = v + else: + for k, v in mapping: + self[k] = v + for k, v in kwargs.items(): + self[k] = v + + @classmethod + def _convert(cls, value): + if isinstance(value, dict) and not isinstance(value, Dict): + return cls(value) + if isinstance(value, list): + return [cls._convert(v) for v in value] + return value + + module.Dict = Dict + sys.modules["addict"] = module + + +def _install_oss2_shim() -> None: + try: + import oss2 # noqa: F401 + except ModuleNotFoundError: + module = types.ModuleType("oss2") + credentials_module = types.ModuleType("oss2.credentials") + + class CredentialsProvider: + pass + + class ProviderAuthV4: + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + class ResumableDownloadStore: + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + class ResumableStore: + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + class Bucket: + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + def object_exists(self, *args, **kwargs): + raise RuntimeError("oss2 shim: object_exists should not be called") + + class Credentials: + def __init__(self, access_key_id=None, access_key_secret=None, security_token=None): + self.access_key_id = access_key_id + self.access_key_secret = access_key_secret + self.security_token = security_token + + def resumable_download(*args, **kwargs): + raise RuntimeError("oss2 shim: resumable_download should not be called") + + def resumable_upload(*args, **kwargs): + raise RuntimeError("oss2 shim: resumable_upload should not be called") + + module.CredentialsProvider = CredentialsProvider + module.ProviderAuthV4 = ProviderAuthV4 + module.ResumableDownloadStore = ResumableDownloadStore + module.ResumableStore = ResumableStore + module.Bucket = Bucket + module.resumable_download = resumable_download + module.resumable_upload = resumable_upload + credentials_module.Credentials = Credentials + + sys.modules["oss2"] = module + sys.modules["oss2.credentials"] = credentials_module + + +def _fallback_get_imports(filename: str) -> list[str]: + with open(filename, encoding="utf-8") as f: + content = f.read() + + imported_modules: set[str] = set() + + def _walk(node: ast.AST) -> None: + if isinstance(node, ast.Try): + return + if isinstance(node, ast.Import): + for alias in node.names: + top_module = alias.name.split(".")[0] + if top_module: + imported_modules.add(top_module) + elif isinstance(node, ast.ImportFrom): + if node.level == 0 and node.module: + top_module = node.module.split(".")[0] + if top_module: + imported_modules.add(top_module) + + for child in ast.iter_child_nodes(node): + _walk(child) + + _walk(ast.parse(content)) + return sorted(imported_modules) + + +def _install_datasets_load_shims() -> None: + try: + import datasets.load as datasets_load + except Exception: + return + + if not hasattr(datasets_load, "ALL_ALLOWED_EXTENSIONS"): + try: + from datasets.packaged_modules import _EXTENSION_TO_MODULE + + datasets_load.ALL_ALLOWED_EXTENSIONS = list(_EXTENSION_TO_MODULE.keys()) + except Exception: + datasets_load.ALL_ALLOWED_EXTENSIONS = [] + + if not hasattr(datasets_load, "files_to_hash"): + def files_to_hash(paths): + digest = hashlib.sha256() + for path in paths: + digest.update(str(path).encode("utf-8", "replace")) + try: + stat_result = os.stat(path) + digest.update(str(stat_result.st_mtime_ns).encode("utf-8")) + digest.update(str(stat_result.st_size).encode("utf-8")) + except Exception: + pass + return digest.hexdigest() + + datasets_load.files_to_hash = files_to_hash + + class _DummyFactory: + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + def get_module(self, *args, **kwargs): + raise RuntimeError( + "datasets.load compatibility shim placeholder should not be used " + "for local model pipeline" + ) + + def _dummy_function(*args, **kwargs): + raise RuntimeError( + "datasets.load compatibility shim placeholder should not be used " + "for local model pipeline" + ) + + for name in ( + "HubDatasetModuleFactoryWithoutScript", + "HubDatasetModuleFactoryWithScript", + "LocalDatasetModuleFactoryWithoutScript", + "LocalDatasetModuleFactoryWithScript", + ): + if not hasattr(datasets_load, name): + setattr(datasets_load, name, _DummyFactory) + + for name in ( + "_get_importable_file_path", + "resolve_trust_remote_code", + "_create_importable_file", + "_load_importable_file", + "init_dynamic_modules", + ): + if not hasattr(datasets_load, name): + setattr(datasets_load, name, _dummy_function) + + +def _install_datasets_get_imports_shim() -> None: + try: + import datasets.utils.py_utils as py_utils + except Exception: + return + + if hasattr(py_utils, "get_imports"): + return + + try: + from transformers.dynamic_module_utils import get_imports as hf_get_imports + except Exception: + hf_get_imports = _fallback_get_imports + + py_utils.get_imports = hf_get_imports + + +def _disable_modelscope_requirement_installs() -> None: + try: + import modelscope.utils.plugins as plugins + except Exception: + return + + def _skip_install_module_from_requirements(requirement_path): + return None + + def _skip_install_requirements_by_files(requirements): + return None + + plugins.install_module_from_requirements = _skip_install_module_from_requirements + plugins.install_requirements_by_files = _skip_install_requirements_by_files + + +def install_compat_shims() -> None: + _install_simplejson_shim() + _install_sortedcontainers_shim() + _install_addict_shim() + _install_oss2_shim() + _install_datasets_load_shims() + _install_datasets_get_imports_shim() + _disable_modelscope_requirement_installs() diff --git a/runtime/ops/mapper/medcleanstd_full_operator/ner/ner_npu.py b/runtime/ops/mapper/medcleanstd_full_operator/ner/ner_npu.py new file mode 100644 index 00000000..e5942b2f --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/ner/ner_npu.py @@ -0,0 +1,308 @@ +from __future__ import annotations + +import importlib +import json +import os +import warnings +from contextlib import contextmanager + +from ner.compat import install_compat_shims + +install_compat_shims() + +import torch +import torch_npu +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +modelscope_plugins = importlib.import_module("modelscope.utils.plugins") + +from ner.siamese_uie_pipeline_batch import SiameseUiePipelineBatch + +warnings.filterwarnings("ignore") + + +def _disable_modelscope_requirement_installs() -> None: + def _skip_install_module_from_requirements(requirement_path): + return None + + def _skip_install_requirements_by_files(requirements): + return None + + modelscope_plugins.install_module_from_requirements = _skip_install_module_from_requirements + modelscope_plugins.install_requirements_by_files = _skip_install_requirements_by_files + + +_disable_modelscope_requirement_installs() + + +def _patch_modelscope_npu_support() -> None: + """Patch ModelScope runtime so this env can accept `device='npu:0'`.""" + device_mod = importlib.import_module("modelscope.utils.device") + base_mod = importlib.import_module("modelscope.pipelines.base") + + try: + device_mod.verify_device("npu:0") + return + except Exception: + pass + + from modelscope.utils.constant import Devices, Frameworks + + logger = getattr(device_mod, "logger", None) + + def verify_device(device_name): + err_msg = ( + "device should be either cpu, cuda, gpu, npu, gpu:X, cuda:X or " + "npu:X where X is the ordinal for target device." + ) + assert device_name is not None and device_name != "", err_msg + eles = device_name.lower().split(":") + assert len(eles) <= 2, err_msg + assert eles[0] in ["cpu", "cuda", "gpu", "npu"], err_msg + device_type = eles[0] + device_id = int(eles[1]) if len(eles) > 1 else None + if device_type == "cuda": + device_type = Devices.gpu + if device_type == Devices.gpu and device_id is None: + device_id = 0 + if device_type == "npu" and device_id is None: + device_id = 0 + return device_type, device_id + + @contextmanager + def device_placement(framework, device_name="gpu:0"): + device_type, device_id = verify_device(device_name) + + if framework == Frameworks.tf: + import tensorflow as tf + + if device_type == Devices.gpu and not tf.test.is_gpu_available(): + if logger is not None: + logger.debug("tensorflow: cuda is not available, using cpu instead.") + device_type = Devices.cpu + + if device_type == Devices.cpu: + with tf.device("/CPU:0"): + yield + elif device_type == Devices.gpu: + with tf.device(f"/device:gpu:{device_id}"): + yield + else: + yield + return + + if framework == Frameworks.torch: + if device_type == Devices.gpu: + if torch.cuda.is_available(): + torch.cuda.set_device(f"cuda:{device_id}") + elif logger is not None: + logger.debug("pytorch: cuda is not available, using cpu instead.") + elif device_type == "npu": + torch.npu.set_device(f"npu:{device_id}") + yield + return + + yield + + def create_device(device_name): + device_type, device_id = verify_device(device_name) + if device_type == "npu": + torch_npu.npu.set_device(f"npu:{device_id}") + return torch.device(f"npu:{device_id}") + if device_type == Devices.gpu: + if torch.cuda.is_available(): + return torch.device(f"cuda:{device_id}") + if logger is not None: + logger.info("cuda is not available, using cpu instead.") + return torch.device("cpu") + + device_mod.verify_device = verify_device + device_mod.device_placement = device_placement + device_mod.create_device = create_device + base_mod.verify_device = verify_device + base_mod.device_placement = device_placement + base_mod.create_device = create_device + + +def _move_model_to_device(model, device_name: str) -> str: + if not hasattr(model, "to"): + return "unsupported" + + target_device = torch.device(device_name) + model.to(target_device) + if hasattr(model, "eval"): + model.eval() + + try: + return str(next(model.parameters()).device) + except Exception: + return str(target_device) + + +class SiameseNER: + def __init__(self, model_dir, inference_batch_size=None): + _patch_modelscope_npu_support() + + config_path = os.path.join(model_dir, "config.json") + if not os.path.exists(config_path): + raise ValueError(f"config.json not found under {model_dir}") + + print(f">>> [System] Loading local model: {model_dir}") + + if torch.npu.is_available(): + self.device = "npu:0" + torch.npu.set_device(self.device) + print(f">>> [Device] Using Ascend NPU ({torch.npu.get_device_name(0)})") + else: + self.device = "cpu" + print(">>> [Device] No NPU detected, using CPU") + self.pipe_device = self.device + + pipeline_loaded = False + base_pipe = None + load_errors = [] + load_attempts = ( + ("Tasks.siamese_uie", dict(task=Tasks.siamese_uie)), + ( + "manual siamese-uie pipeline", + dict(task=Tasks.information_extraction, pipeline="siamese-uie"), + ), + ) + + for label, kwargs in load_attempts: + try: + print(f">>> [System] Trying {label} (device={self.device})") + base_pipe = pipeline(model=model_dir, device=self.device, **kwargs) + self.pipe_device = str(getattr(base_pipe, "device", self.device)) + print( + f">>> [System] Base pipeline loaded " + f"(requested={self.device}, actual={self.pipe_device})" + ) + pipeline_loaded = True + break + except Exception as exc: + load_errors.append(f"{label}: {exc}") + print(f">>> [Warning] {label} failed: {exc}") + + if not pipeline_loaded or base_pipe is None: + raise RuntimeError("Unable to load SiameseUIE model.\n" + "\n".join(load_errors)) + + if self.device.startswith("npu") and not self.pipe_device.startswith("npu"): + raise RuntimeError( + f"SiameseUIE did not switch to NPU. requested={self.device}, actual={self.pipe_device}" + ) + + param_device = _move_model_to_device(base_pipe.model, self.pipe_device) + print(f">>> [Device] Model parameter device: {param_device}") + + self.pipe = SiameseUiePipelineBatch( + model=base_pipe.model, + preprocessor=base_pipe.preprocessor, + device=self.pipe_device, + ) + self.pipe.slide_len = base_pipe.slide_len + self.pipe.max_len = base_pipe.max_len + self.pipe.hint_max_len = base_pipe.hint_max_len + + if inference_batch_size is None: + inference_batch_size = 64 if self.pipe_device.startswith("npu") else base_pipe.inference_batch_size + + self.pipe.inference_batch_size = inference_batch_size + self.pipe.threshold = base_pipe.threshold + print( + f">>> [System] Batch pipeline ready " + f"(device={self.pipe_device}, inference_batch_size={inference_batch_size})" + ) + + self._schema_cache = {} + + def _get_schema_dict(self, schema): + schema_key = tuple(schema) if isinstance(schema, list) else id(schema) + if schema_key not in self._schema_cache: + self._schema_cache[schema_key] = {name: None for name in schema} if isinstance(schema, list) else schema + return self._schema_cache[schema_key] + + @staticmethod + def _flatten_result(result): + if not result or "output" not in result: + return [] + return [ + { + "text": entity["span"], + "type": entity.get("type", ""), + "start": entity.get("offset", [0, 0])[0], + "end": entity.get("offset", [0, 0])[1], + } + for entity_list in result["output"] + for entity in entity_list + if isinstance(entity, dict) and "span" in entity + ] + + def extract(self, text, schema): + if not text: + return [] + + try: + schema_dict = self._get_schema_dict(schema) + result = self.pipe(text, schema=schema_dict) + return self._flatten_result(result) + except Exception as exc: + print(f"NER inference failed: {exc}") + import traceback + + traceback.print_exc() + return [] + + def extract_batch(self, texts, schema): + if not texts: + return [] + + non_empty_texts = [] + non_empty_indices = [] + for idx, text in enumerate(texts): + if text: + non_empty_texts.append(text) + non_empty_indices.append(idx) + + if not non_empty_texts: + return [[] for _ in texts] + + try: + schema_dict = self._get_schema_dict(schema) + results = self.pipe(non_empty_texts, schema=schema_dict) + flattened_results = [self._flatten_result(result) for result in results] + + final_results = [[] for _ in texts] + for idx, entities in zip(non_empty_indices, flattened_results): + final_results[idx] = entities + return final_results + except Exception as exc: + print(f"Batch NER inference failed: {exc}") + import traceback + + traceback.print_exc() + print(">>> [Fallback] Falling back to one-by-one inference...") + + results = [self.extract(text, schema) for text in non_empty_texts] + + final_results = [[] for _ in texts] + for idx, entities in zip(non_empty_indices, results): + final_results[idx] = entities + return final_results + + +if __name__ == "__main__": + local_path = "./model/SiameseUIE" + print(f"Target model path: {os.path.abspath(local_path)}") + + try: + ner = SiameseNER(local_path) + text = "Patient has acute appendicitis with right lower abdominal pain." + schema = ["Disease", "Symptom", "Drug"] + print(f"\n[input text]: {text}") + print(f"[schema]: {schema}") + result = ner.extract(text, schema) + print("\n[result]:") + print(json.dumps(result, ensure_ascii=False, indent=2)) + except Exception as exc: + print(f"\nProgram failed: {exc}") diff --git a/runtime/ops/mapper/medcleanstd_full_operator/ner/siamese_uie_pipeline_batch.py b/runtime/ops/mapper/medcleanstd_full_operator/ner/siamese_uie_pipeline_batch.py new file mode 100644 index 00000000..77729553 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/ner/siamese_uie_pipeline_batch.py @@ -0,0 +1,384 @@ +""" +自定义 SiameseUIE Pipeline,支持批量输入和批量推理 +基于 ModelScope 的 siamese_uie_pipeline.py 修改 +""" +import json +from contextlib import nullcontext +from copy import deepcopy +from math import ceil +from typing import Any, Dict, List, Union + +import torch + +from modelscope.pipelines.nlp.siamese_uie_pipeline import SiameseUiePipeline + + +def _autocast_context(device): + device = str(device) + if device.startswith("npu") and hasattr(torch, "npu") and torch.npu.is_available(): + amp_mod = getattr(torch.npu, "amp", None) + if amp_mod is not None and hasattr(amp_mod, "autocast"): + return amp_mod.autocast() + return nullcontext() + if (device.startswith("cuda") or device.startswith("gpu")) and torch.cuda.is_available(): + return torch.cuda.amp.autocast() + return nullcontext() + + +class SiameseUiePipelineBatch(SiameseUiePipeline): + """ + 支持批量输入的 SiameseUIE Pipeline + 继承自原始 Pipeline,重写 __call__ 方法以支持批量处理 + """ + + def __call__(self, input: Union[str, List[str]], *args, + **kwargs) -> Union[Dict[str, Any], List[Dict[str, Any]]]: + """ + 支持批量输入的调用方法(优化版:批量 tokenize) + + Args: + input: 单个文本字符串或文本列表 + schema: 提取目标,例如 {'疾病': None, '症状': None} + + Returns: + 单个文本时返回: {'output': [...]} + 批量文本时返回: [{'output': [...]}, {'output': [...]}, ...] + """ + # 判断是否为批量输入 + if isinstance(input, list): + # 批量处理(优化:批量 tokenize) + return self._process_batch(input, **kwargs) + else: + # 单个文本处理 + return self._process_single(input, **kwargs) + + def _process_batch(self, texts: List[str], **kwargs) -> List[Dict[str, Any]]: + """ + 批量处理多个文本(优化版:批量 tokenize) + """ + # 准备模型 + if self.model: + if not self._model_prepare: + self.prepare_model() + + # 解析参数 + schema = kwargs.pop('schema') + if type(schema) == str: + schema = json.loads(schema) + output_all_prefix = kwargs.pop('output_all_prefix', False) + + # 过滤空文本,记录原始索引 + non_empty_texts = [] + non_empty_indices = [] + for i, text in enumerate(texts): + if text: + non_empty_texts.append(text) + non_empty_indices.append(i) + + if not non_empty_texts: + return [{'output': []} for _ in texts] + + # 批量 tokenize(关键优化:一次性处理所有文本) + # preprocessor 接受列表,返回 BatchEncoding 或列表 + # 原始代码使用 preprocessor([text])[0],说明返回的是列表或可索引对象 + # 我们批量调用,然后提取每个文本的结果 + try: + # 尝试批量 tokenize + batch_tokenized = self.preprocessor(non_empty_texts) + + # 检查返回格式并提取每个文本的结果 + tokenized_texts = [] + if isinstance(batch_tokenized, (list, tuple)): + # 如果返回列表,直接使用 + tokenized_texts = list(batch_tokenized) + elif hasattr(batch_tokenized, '__getitem__') and hasattr(batch_tokenized, '__len__'): + # 如果是可索引对象(如 BatchEncoding),尝试按索引提取 + try: + for i in range(len(non_empty_texts)): + tokenized_texts.append(batch_tokenized[i]) + except (TypeError, IndexError): + # 如果无法索引,回退到逐个处理 + tokenized_texts = [self.preprocessor([text])[0] for text in non_empty_texts] + else: + # 未知格式,回退到逐个处理 + tokenized_texts = [self.preprocessor([text])[0] for text in non_empty_texts] + except Exception as e: + # 批量处理失败,回退到逐个处理 + print(f">>> [Warning] 批量 tokenize 失败,回退到逐个处理: {e}") + tokenized_texts = [self.preprocessor([text])[0] for text in non_empty_texts] + + # 批量推理优化:批量处理 get_plm_sequence_output 和 hints + # 虽然 forward 是递归的,但我们可以批量处理底层的模型推理 + results = [] + for text, tokenized_text in zip(non_empty_texts, tokenized_texts): + pred_info_list = [] + prefix_info = [] + # 使用优化的批量 forward 方法 + self.forward_batch_optimized(text, tokenized_text, prefix_info, schema, + pred_info_list, output_all_prefix) + results.append({'output': pred_info_list}) + + # 处理空文本:在对应位置插入空结果 + final_results = [{'output': []} for _ in texts] + for idx, result in zip(non_empty_indices, results): + final_results[idx] = result + + return final_results + + def _process_single(self, text: str, **kwargs) -> Dict[str, Any]: + """ + 处理单个文本(从原始 __call__ 方法提取) + """ + # 移除批量检查 + kwargs.pop('batch_size', None) + + # 准备模型 + if self.model: + if not self._model_prepare: + self.prepare_model() + + # 解析参数 + schema = kwargs.pop('schema') + if type(schema) == str: + schema = json.loads(schema) + output_all_prefix = kwargs.pop('output_all_prefix', False) + + # 预处理 + tokenized_text = self.preprocessor([text])[0] + pred_info_list = [] + prefix_info = [] + + # 前向推理 + self.forward(text, tokenized_text, prefix_info, schema, pred_info_list, + output_all_prefix) + + return {'output': pred_info_list} + + def forward_batch_optimized(self, text, tokenized_text, prefix_info, curr_schema_dict, + pred_info_list, output_all_prefix): + """ + 优化的批量 forward 方法 + 批量处理 get_prefix_infos 中的模型推理部分 + """ + next_prefix_infos = self.get_prefix_infos_batch_optimized( + text, tokenized_text, prefix_info, curr_schema_dict) + + for prefix_info in next_prefix_infos: + next_schema_dict = curr_schema_dict[prefix_info[-1]['type']] + if next_schema_dict is None: + pred_info_list.append(prefix_info) + else: + if output_all_prefix: + pred_info_list.append(prefix_info) + self.forward_batch_optimized(text, tokenized_text, prefix_info, + next_schema_dict, pred_info_list, + output_all_prefix) + + def get_prefix_infos_batch_optimized(self, text, tokenized_text, prefix_info, + schema_types): + """ + 优化的批量 get_prefix_infos 方法 + 批量处理 hints 的 tokenization 和模型推理 + """ + hints = [] + for st in schema_types: + hint = '' + for item in prefix_info: + hint += f'{item["type"]}: {item["span"]}, ' + hint += f'{st}: ' + hints.append(hint) + + # 批量 tokenize hints(优化点1) + tokenized_hints = self.preprocessor( + hints, padding=True, truncation=True, max_length=self.hint_max_len) + + # 批量处理文本分段和序列输出(优化点2) + all_valid_tokenized_data, all_tensor_data = self.get_tokenized_data_and_data_loader_batch_optimized( + text, tokenized_text, hints, tokenized_hints) + + probs = [] + last_uuid = None + all_pred_entities = [] + all_head_probs = [] + all_tail_probs = [] + + # 批量推理(优化点3:已经通过 inference_batch_size 批量) + with torch.no_grad(): + with _autocast_context(self.device): + for batch_data in zip(*all_tensor_data): + batch_head_probs, batch_tail_probs = self.model.fast_inference( + *batch_data) + batch_head_probs, batch_tail_probs = batch_head_probs.tolist( + ), batch_tail_probs.tolist() # (b, n, l) + all_head_probs += batch_head_probs + all_tail_probs += batch_tail_probs + + all_valid_tokenized_data.append({'id': 'WhatADifferentUUiD'}) + all_head_probs.append(None) + all_tail_probs.append(None) + + for tokenized_sample, head_probs, tail_probs in zip( + all_valid_tokenized_data, all_head_probs, all_tail_probs): + uuid = tokenized_sample['id'] + prob = { + 'shift': tokenized_sample.get('shift', 0), + 'head': head_probs, # (n, l) + 'tail': tail_probs + } + if last_uuid is not None and uuid != last_uuid: + len_tokens = len(tokenized_text.offsets) + head_probs = [-1] * len_tokens # (n, l) + tail_probs = [-1] * len_tokens + for prob_tmp in probs: + shift = prob_tmp['shift'] + head = prob_tmp['head'] + tail = prob_tmp['tail'] + len_sub = len(head) + for j in range(len_sub): + if j + shift < len_tokens: + head_probs[j + shift] = head[j] if head_probs[ + j + shift] == -1 else (head_probs[j + shift] + + head[j]) / 2 + tail_probs[j + shift] = tail[j] if tail_probs[ + j + shift] == -1 else (tail_probs[j + shift] + + tail[j]) / 2 + offsets = tokenized_text.offsets + pred_entities = self.get_entities(text, offsets, head_probs, + tail_probs) + all_pred_entities.append(pred_entities) + probs = [] + probs.append(prob) + last_uuid = uuid + + next_prefix_infos = [] + for st, pred_entities in zip(schema_types, all_pred_entities): + for e in pred_entities: + pi = deepcopy(prefix_info) + item = {'type': st, 'span': e['span'], 'offset': e['offset']} + pi.append(item) + next_prefix_infos.append(pi) + return next_prefix_infos + + def get_tokenized_data_and_data_loader_batch_optimized(self, text, tokenized_text, hints, tokenized_hints): + """ + 优化的批量 tokenize_sample 方法 + 批量处理多个 hints 的 tokenization + """ + tokenized_data = [] + + # 文本分段 + split_num = ceil( + (len(tokenized_text) - self.max_len) + / self.slide_len) + 1 if len(tokenized_text) > self.max_len else 1 + + token_ids = [ + tokenized_text.ids[j * self.slide_len:j * self.slide_len + + self.max_len] for j in range(split_num) + ] + attention_masks = [ + tokenized_text.attention_mask[j * self.slide_len:j * self.slide_len + + self.max_len] + for j in range(split_num) + ] + + if split_num > 1: + token_ids = self._pad(token_ids, 0) + attention_masks = self._pad(attention_masks, 0) + + token_ids = torch.tensor( + token_ids, dtype=torch.long, device=self.device) + attention_masks = torch.tensor( + attention_masks, dtype=torch.long, device=self.device) + + # 批量获取序列输出(优化:合并所有分段的批量推理) + batch_num = max(1, ceil(token_ids.size(0) / self.inference_batch_size)) + all_token_ids = torch.tensor_split(token_ids, batch_num) + all_attention_masks = torch.tensor_split(attention_masks, batch_num) + all_sequence_output = [] + + with torch.no_grad(): + with _autocast_context(self.device): + for token_ids_batch, attention_masks_batch in zip(all_token_ids, + all_attention_masks): + sequence_output = self.model.get_plm_sequence_output( + token_ids_batch, attention_masks_batch) + all_sequence_output.append(sequence_output) + + all_sequence_output = torch.cat(all_sequence_output, dim=0) + all_attention_masks = torch.cat(all_attention_masks, dim=0) + + # 为每个 hint 和每个分段创建数据项 + for i in range(len(hints)): + hint = hints[i] + # tokenized_hints 应该是列表或可索引对象 + # 原始代码使用 tokenized_hints[i],说明是列表 + if isinstance(tokenized_hints, (list, tuple)): + tokenized_hint = tokenized_hints[i] + elif hasattr(tokenized_hints, '__getitem__'): + try: + tokenized_hint = tokenized_hints[i] + except (TypeError, IndexError): + # 如果无法索引,回退到逐个处理 + hint_tokenized = self.preprocessor( + [hint], padding=True, truncation=True, max_length=self.hint_max_len) + tokenized_hint = hint_tokenized[0] if isinstance(hint_tokenized, list) else hint_tokenized + else: + # 回退:逐个处理 + hint_tokenized = self.preprocessor( + [hint], padding=True, truncation=True, max_length=self.hint_max_len) + tokenized_hint = hint_tokenized[0] if isinstance(hint_tokenized, list) else hint_tokenized + + # 提取 hint 的 ids 和 attention_mask + if hasattr(tokenized_hint, 'ids'): + hint_ids = tokenized_hint.ids + hint_attention_mask = tokenized_hint.attention_mask + elif isinstance(tokenized_hint, dict): + hint_ids = tokenized_hint.get('input_ids', tokenized_hint.get('ids', [])) + hint_attention_mask = tokenized_hint.get('attention_mask', [1] * len(hint_ids)) + else: + # 最后回退:逐个处理 + hint_tokenized = self.preprocessor( + [hint], padding=True, truncation=True, max_length=self.hint_max_len) + if isinstance(hint_tokenized, list): + hint_tokenized = hint_tokenized[0] + hint_ids = hint_tokenized.ids if hasattr(hint_tokenized, 'ids') else hint_tokenized.get('input_ids', []) + hint_attention_mask = hint_tokenized.attention_mask if hasattr(hint_tokenized, 'attention_mask') else hint_tokenized.get('attention_mask', [1] * len(hint_ids)) + + for j in range(split_num): + a = j * self.slide_len + item = { + 'id': hint + '--' + text, + 'hint': hint, + 'text': text, + 'shift': a, + 'sequence_output': all_sequence_output[j], + 'hint_token_ids': hint_ids, + 'attention_masks': all_attention_masks[j], + 'cross_attention_masks': hint_attention_mask + } + tokenized_data.append(item) + + # 构建批量张量 + sequence_output = torch.stack( + [item['sequence_output'] for item in tokenized_data]) + attention_masks = torch.stack( + [item['attention_masks'] for item in tokenized_data]) + hint_token_ids = torch.tensor( + [item['hint_token_ids'] for item in tokenized_data], + dtype=torch.long, + device=self.device) + cross_attention_masks = torch.tensor( + [item['cross_attention_masks'] for item in tokenized_data], + dtype=torch.long, + device=self.device) + + # 分批处理(利用 inference_batch_size) + batch_num = max(1, ceil(sequence_output.size(0) / self.inference_batch_size)) + sequence_output = torch.tensor_split(sequence_output, batch_num) + attention_masks = torch.tensor_split(attention_masks, batch_num) + hint_token_ids = torch.tensor_split(hint_token_ids, batch_num) + cross_attention_masks = torch.tensor_split(cross_attention_masks, + batch_num) + + return tokenized_data, (sequence_output, attention_masks, + hint_token_ids, cross_attention_masks) diff --git a/runtime/ops/mapper/medcleanstd_full_operator/normalizer/accuracy_term_rules.json b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/accuracy_term_rules.json new file mode 100644 index 00000000..8d3f53b4 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/accuracy_term_rules.json @@ -0,0 +1,422 @@ +[ + { + "text": "腹痛", + "type": "症状", + "std_name": "腹痛", + "std_code": "K52.916" + }, + { + "text": "结肠癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "结肠腺管状腺瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "结节", + "type": "症状", + "std_name": "关节结核", + "std_code": "A18.002+" + }, + { + "text": "腹泻", + "type": "症状", + "std_name": "腹痛", + "std_code": "K52.916" + }, + { + "text": "结肠恶性肿瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "食管炎", + "type": "疾病", + "std_name": "结核性食管炎", + "std_code": "A18.807+" + }, + { + "text": "(横结肠)肠管状腺瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "(左半结肠)大肠回盲部结外粘膜相关淋巴组织边缘区B细胞淋巴瘤(MALT)", + "type": "疾病", + "std_name": "肠系膜淋巴结结核", + "std_code": "A18.316+" + }, + { + "text": "皮疹", + "type": "症状", + "std_name": "斑疹热", + "std_code": "A77.900" + }, + { + "text": "结肠肿瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "慢性宫颈炎", + "type": "疾病", + "std_name": "衣原体性宫颈炎", + "std_code": "A56.002" + }, + { + "text": "肠瘘", + "type": "疾病", + "std_name": "结核性肛瘘", + "std_code": "A18.306+" + }, + { + "text": "升结肠癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "口腔溃疡", + "type": "疾病", + "std_name": "坏死性溃疡性口炎", + "std_code": "A69.000" + }, + { + "text": "畏寒", + "type": "症状", + "std_name": "伤寒", + "std_code": "A01.000" + }, + { + "text": "降结肠癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "脓肿", + "type": "症状", + "std_name": "结核性皮肤脓肿", + "std_code": "A18.405" + }, + { + "text": "左半结肠肿瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "肝内外胆管结石", + "type": "疾病", + "std_name": "胆管结核", + "std_code": "A18.815+" + }, + { + "text": "结肠炎性息肉", + "type": "疾病", + "std_name": "结肠炎", + "std_code": "A09.902" + }, + { + "text": "胆囊炎", + "type": "疾病", + "std_name": "胆囊结核", + "std_code": "A18.816+" + }, + { + "text": "结肠术后", + "type": "疾病", + "std_name": "结肠炎", + "std_code": "A09.902" + }, + { + "text": "两肺结节 转移瘤", + "type": "疾病", + "std_name": "肺结核瘤", + "std_code": "A16.201" + }, + { + "text": "结肠CA", + "type": "疾病", + "std_name": "结肠炎", + "std_code": "A09.902" + }, + { + "text": "结肠肿块", + "type": "症状", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "结肠肝曲癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "脓血", + "type": "症状", + "std_name": "脓毒症", + "std_code": "A41.901" + }, + { + "text": "乙型病毒性肝炎", + "type": "疾病", + "std_name": "伤寒性肝炎", + "std_code": "A01.001+" + }, + { + "text": "结肠占位性病变", + "type": "疾病", + "std_name": "结肠炎", + "std_code": "A09.902" + }, + { + "text": "小肠淋巴瘤", + "type": "疾病", + "std_name": "肠道阿米巴瘤", + "std_code": "A06.300" + }, + { + "text": "结肠多发绒毛状管状腺瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "肠壁转移瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "结肠脾曲癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "升结肠恶性肿瘤", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "横结肠癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "左侧结肠癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "结肠腺癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "(结肠)溃疡型腺癌", + "type": "疾病", + "std_name": "结肠结核瘤", + "std_code": "A18.305+" + }, + { + "text": "肠粘膜慢性炎", + "type": "疾病", + "std_name": "急性感染性肠炎", + "std_code": "A09.007" + }, + { + "text": "吐泻", + "type": "症状", + "std_name": "腹痛", + "std_code": "K52.916" + }, + { + "text": "炎症性肠病", + "type": "疾病", + "std_name": "病毒性肠炎", + "std_code": "A08.401" + }, + { + "text": "急性阑尾炎", + "type": "疾病", + "std_name": "急性结肠炎", + "std_code": "K52.906" + }, + { + "text": "溃疡性结肠炎", + "type": "疾病", + "std_name": "结肠炎", + "std_code": "A09.902" + }, + { + "text": "肝炎", + "type": "疾病", + "std_name": "伤寒性肝炎", + "std_code": "A01.001+" + }, + { + "text": "结核", + "type": "疾病", + "std_name": "骨结核", + "std_code": "A18.001+" + }, + { + "text": "霉菌性食管炎", + "type": "疾病", + "std_name": "结核性食管炎", + "std_code": "A18.807+" + }, + { + "text": "肺炎", + "type": "疾病", + "std_name": "肺炎球菌感染", + "std_code": "A49.102" + }, + { + "text": "两侧胸腔积液", + "type": "疾病", + "std_name": "结核性胸腔积液", + "std_code": "A16.502" + }, + { + "text": "心包积液", + "type": "疾病", + "std_name": "结核性心包积液", + "std_code": "A18.809+" + }, + { + "text": "肺部感染", + "type": "疾病", + "std_name": "肺炎杆菌感染", + "std_code": "A49.802" + }, + { + "text": "心包腔积液", + "type": "疾病", + "std_name": "结核性心包积液", + "std_code": "A18.809+" + }, + { + "text": "低蛋白血症", + "type": "疾病", + "std_name": "朊蛋白病", + "std_code": "A81.801" + }, + { + "text": "肺结核", + "type": "疾病", + "std_name": "肺结核瘤", + "std_code": "A16.201" + }, + { + "text": "肺癌", + "type": "疾病", + "std_name": "肺结核瘤", + "std_code": "A16.201" + }, + { + "text": "泌尿道感染", + "type": "疾病", + "std_name": "泌尿生殖道的衣原体感染", + "std_code": "A56.200" + }, + { + "text": "慢性前列腺炎", + "type": "疾病", + "std_name": "淋球菌性前列腺炎", + "std_code": "A54.202+" + }, + { + "text": "感染性休克", + "type": "疾病", + "std_name": "中毒性休克综合征", + "std_code": "A48.300" + }, + { + "text": "腹腔积液", + "type": "疾病", + "std_name": "结核性腹腔积液", + "std_code": "A18.309" + }, + { + "text": "老年痴呆", + "type": "疾病", + "std_name": "幼年型麻痹性痴呆", + "std_code": "A50.401" + }, + { + "text": "肝硬化", + "type": "疾病", + "std_name": "梅毒性肝硬化", + "std_code": "A52.705+" + }, + { + "text": "炎性肉芽肿", + "type": "疾病", + "std_name": "腹股沟肉芽肿", + "std_code": "A58.x00" + }, + { + "text": "陈旧性肺结核", + "type": "疾病", + "std_name": "结核性肺炎", + "std_code": "A16.202" + }, + { + "text": "咽痛", + "type": "症状", + "std_name": "咽白喉", + "std_code": "A36.000" + }, + { + "text": "传染病", + "type": "疾病", + "std_name": "传染病,其他的", + "std_code": "B99.x00" + }, + { + "text": "乙肝", + "type": "疾病", + "std_name": "乙型病毒性肝炎", + "std_code": "B16.904" + }, + { + "text": "丙肝", + "type": "疾病", + "std_name": "急性丙型肝炎", + "std_code": "B17.100" + }, + { + "text": "梅毒", + "type": "疾病", + "std_name": "梅毒", + "std_code": "A53.900" + }, + { + "text": "艾滋病", + "type": "疾病", + "std_name": "艾滋病", + "std_code": "B24.x01" + }, + { + "text": "腹腔积液增多、感染性休克", + "type": "疾病", + "std_name": "结核性腹腔积液", + "std_code": "A18.309" + } +] diff --git a/runtime/ops/mapper/medcleanstd_full_operator/normalizer/l1_cache.json b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/l1_cache.json new file mode 100644 index 00000000..d1a9cb09 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/l1_cache.json @@ -0,0 +1,2297 @@ +[ + { + "name": "上肢酸痛", + "std_name": "上肢酸痛", + "code": "M79.102" + }, + { + "name": "上腹包块", + "std_name": "上腹包块", + "code": "R19.000" + }, + { + "name": "下消化道出血", + "std_name": "下消化道出血", + "code": "K92.202" + }, + { + "name": "下腔静脉栓塞", + "std_name": "下腔静脉栓塞", + "code": "I82.200" + }, + { + "name": "下腹包块", + "std_name": "下腹包块", + "code": "R19.000" + }, + { + "name": "下腹腹胀", + "std_name": "下腹腹胀", + "code": "R14.x00" + }, + { + "name": "不完全性肠梗阻", + "std_name": "不完全性肠梗阻", + "code": "K56.x01" + }, + { + "name": "两侧上肢静脉曲张", + "std_name": "两侧上肢静脉曲张", + "code": "I83.x00" + }, + { + "name": "两侧筛窦炎", + "std_name": "两侧筛窦炎", + "code": "J32.000" + }, + { + "name": "两肺上叶感染", + "std_name": "两肺上叶感染", + "code": "J98.400" + }, + { + "name": "两肾多发囊肿", + "std_name": "两肾多发囊肿", + "code": "N28.100" + }, + { + "name": "两肾积水", + "std_name": "两肾积水", + "code": "N13.x00" + }, + { + "name": "中下腹痛", + "std_name": "中下腹痛", + "code": "R10.200" + }, + { + "name": "中至低分化腺癌", + "std_name": "中至低分化腺癌", + "code": "C16.x02" + }, + { + "name": "乏力", + "std_name": "乏力", + "code": "R53.x00" + }, + { + "name": "乏力感", + "std_name": "乏力感", + "code": "R53.x00" + }, + { + "name": "乙型病毒性肝炎", + "std_name": "乙型病毒性肝炎", + "code": "B18.100" + }, + { + "name": "乙状结肠中分化腺癌", + "std_name": "乙状结肠中分化腺癌", + "code": "C18.702" + }, + { + "name": "乙状结肠低分化腺癌", + "std_name": "乙状结肠低分化腺癌", + "code": "C18.703" + }, + { + "name": "乙状结肠占位性病变", + "std_name": "乙状结肠占位性病变", + "code": "R90.801" + }, + { + "name": "乙状结肠癌", + "std_name": "乙状结肠癌", + "code": "C18.700" + }, + { + "name": "乙状结肠粘液腺癌", + "std_name": "乙状结肠粘液腺癌", + "code": "C18.704" + }, + { + "name": "乙状结肠腺癌", + "std_name": "乙状结肠腺癌", + "code": "C18.701" + }, + { + "name": "乳酸酸中毒", + "std_name": "乳酸酸中毒", + "code": "E87.200" + }, + { + "name": "低位直肠癌", + "std_name": "低位直肠癌", + "code": "C20.x00" + }, + { + "name": "低分化浆液性腺癌", + "std_name": "低分化浆液性腺癌", + "code": "C56.x03" + }, + { + "name": "低分化癌", + "std_name": "低分化癌", + "code": "C16.x09" + }, + { + "name": "低热", + "std_name": "低热", + "code": "R50.800" + }, + { + "name": "低级别腺管状腺瘤", + "std_name": "低级别腺管状腺瘤", + "code": "D12.x04" + }, + { + "name": "体重上降", + "std_name": "体重上降", + "code": "R63.400" + }, + { + "name": "体重减轻", + "std_name": "体重减轻", + "code": "R63.400" + }, + { + "name": "体重增加", + "std_name": "体重增加", + "code": "R63.500" + }, + { + "name": "体重无明显变化", + "std_name": "体重无明显变化", + "code": "Z71.x00" + }, + { + "name": "便秘", + "std_name": "便秘", + "code": "K59.000" + }, + { + "name": "便细", + "std_name": "便细", + "code": "R19.704" + }, + { + "name": "便血", + "std_name": "便血", + "code": "K92.200" + }, + { + "name": "偏瘫", + "std_name": "偏瘫", + "code": "G81.x00" + }, + { + "name": "充血", + "std_name": "充血", + "code": "R23.300" + }, + { + "name": "冒汗", + "std_name": "冒汗", + "code": "R61.x00" + }, + { + "name": "冠心病", + "std_name": "冠心病", + "code": "I25.100" + }, + { + "name": "冠状动脉粥样硬化性心脏病", + "std_name": "冠状动脉粥样硬化性心脏病", + "code": "I25.100" + }, + { + "name": "冰凉", + "std_name": "冰凉", + "code": "R23.801" + }, + { + "name": "出血", + "std_name": "出血", + "code": "R58.x00" + }, + { + "name": "刺痛", + "std_name": "刺痛", + "code": "R20.100" + }, + { + "name": "前列腺增生", + "std_name": "前列腺增生", + "code": "N40.x00" + }, + { + "name": "前列腺增生症", + "std_name": "前列腺增生症", + "code": "N40.x00" + }, + { + "name": "前列腺癌", + "std_name": "前列腺癌", + "code": "C61.x00" + }, + { + "name": "包块", + "std_name": "包块", + "code": "R22.x00" + }, + { + "name": "十二指肠球炎", + "std_name": "十二指肠球炎", + "code": "K29.801" + }, + { + "name": "十二指肠球部炎症", + "std_name": "十二指肠球部炎症", + "code": "K29.801" + }, + { + "name": "十二指肠癌术后", + "std_name": "十二指肠癌术后", + "code": "Z90.403" + }, + { + "name": "升结肠癌", + "std_name": "升结肠癌", + "code": "C18.200" + }, + { + "name": "印戒细胞癌", + "std_name": "印戒细胞癌", + "code": "C16.x05" + }, + { + "name": "卵巢恶性下皮性肿瘤", + "std_name": "卵巢恶性下皮性肿瘤", + "code": "C56.x00" + }, + { + "name": "卵巢恶性肿瘤", + "std_name": "卵巢恶性肿瘤", + "code": "C56.x00" + }, + { + "name": "卵巢浆液性乳头状囊腺癌", + "std_name": "卵巢浆液性乳头状囊腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢癌", + "std_name": "卵巢癌", + "code": "C56.x00" + }, + { + "name": "卵巢转移", + "std_name": "卵巢转移", + "code": "C79.600" + }, + { + "name": "卵巢高级别浆液性乳头状癌", + "std_name": "卵巢高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "厌油", + "std_name": "厌油", + "code": "R63.002" + }, + { + "name": "原发性高血压", + "std_name": "原发性高血压", + "code": "I10.x00" + }, + { + "name": "反酸", + "std_name": "反酸", + "code": "R13.x00" + }, + { + "name": "发热", + "std_name": "发热", + "code": "R50.900" + }, + { + "name": "口干", + "std_name": "口干", + "code": "R68.200" + }, + { + "name": "口渴", + "std_name": "口渴", + "code": "R68.200" + }, + { + "name": "口腔溃疡", + "std_name": "口腔溃疡", + "code": "K12.000" + }, + { + "name": "右乳腺浸润性导管癌", + "std_name": "右乳腺浸润性导管癌", + "code": "C50.x01" + }, + { + "name": "右侧下颌窦炎症或息肉", + "std_name": "右侧下颌窦炎症或息肉", + "code": "J32.001" + }, + { + "name": "右大隐静脉曲张", + "std_name": "右大隐静脉曲张", + "code": "I83.x01" + }, + { + "name": "吞咽困难", + "std_name": "吞咽困难", + "code": "R13.x00" + }, + { + "name": "吻合口狭窄", + "std_name": "吻合口狭窄", + "code": "K91.200" + }, + { + "name": "呃逆", + "std_name": "呃逆", + "code": "R06.600" + }, + { + "name": "呕吐", + "std_name": "呕吐", + "code": "R11.x01" + }, + { + "name": "呕血", + "std_name": "呕血", + "code": "K92.000" + }, + { + "name": "呼吸困难", + "std_name": "呼吸困难", + "code": "R06.000" + }, + { + "name": "呼吸衰竭", + "std_name": "呼吸衰竭", + "code": "J96.x00" + }, + { + "name": "咯血", + "std_name": "咯血", + "code": "R04.200" + }, + { + "name": "咳嗽", + "std_name": "咳嗽", + "code": "R05.x00" + }, + { + "name": "咳痰", + "std_name": "咳痰", + "code": "R09.300" + }, + { + "name": "咳白色粘痰", + "std_name": "咳白色粘痰", + "code": "R09.301" + }, + { + "name": "咳血", + "std_name": "咳血", + "code": "R04.200" + }, + { + "name": "咳黄", + "std_name": "咳黄", + "code": "R09.303" + }, + { + "name": "咽痒", + "std_name": "咽痒", + "code": "R07.x02" + }, + { + "name": "咽痛", + "std_name": "咽痛", + "code": "R07.x03" + }, + { + "name": "哽噎感", + "std_name": "哽噎感", + "code": "R13.x02" + }, + { + "name": "喘累", + "std_name": "喘累", + "code": "R06.000" + }, + { + "name": "嗳气", + "std_name": "嗳气", + "code": "R14.x02" + }, + { + "name": "囊性畸胎瘤", + "std_name": "囊性畸胎瘤", + "code": "D27.x00" + }, + { + "name": "四支血管病变", + "std_name": "四支血管病变", + "code": "I25.x00" + }, + { + "name": "回盲部淋巴瘤术后", + "std_name": "回盲部淋巴瘤术后", + "code": "Z90.800" + }, + { + "name": "回盲部癌", + "std_name": "回盲部癌", + "code": "C18.000" + }, + { + "name": "声嘶", + "std_name": "声嘶", + "code": "R49.000" + }, + { + "name": "外骶管囊肿", + "std_name": "外骶管囊肿", + "code": "G96.100" + }, + { + "name": "多尿", + "std_name": "多尿", + "code": "R35.x00" + }, + { + "name": "多汗", + "std_name": "多汗", + "code": "R61.x00" + }, + { + "name": "夜尿次数增多", + "std_name": "夜尿次数增多", + "code": "R35.100" + }, + { + "name": "大便不成形", + "std_name": "大便不成形", + "code": "R19.700" + }, + { + "name": "大便带血", + "std_name": "大便带血", + "code": "K92.200" + }, + { + "name": "大便带鲜血", + "std_name": "大便带鲜血", + "code": "K92.200" + }, + { + "name": "大便干燥", + "std_name": "大便干燥", + "code": "K59.000" + }, + { + "name": "大便干结", + "std_name": "大便干结", + "code": "K59.000" + }, + { + "name": "大便未解", + "std_name": "大便未解", + "code": "K59.001" + }, + { + "name": "大便次数增多", + "std_name": "大便次数增多", + "code": "R19.703" + }, + { + "name": "大便次数多", + "std_name": "大便次数多", + "code": "R19.703" + }, + { + "name": "大便结燥", + "std_name": "大便结燥", + "code": "K59.000" + }, + { + "name": "大汗", + "std_name": "大汗", + "code": "R61.000" + }, + { + "name": "大肠多发息肉", + "std_name": "大肠多发息肉", + "code": "K63.500" + }, + { + "name": "大部分为筛状粉刺型腺癌", + "std_name": "大部分为筛状粉刺型腺癌", + "code": "C16.x09" + }, + { + "name": "头昏", + "std_name": "头昏", + "code": "R42.x00" + }, + { + "name": "头昏痛", + "std_name": "头昏痛", + "code": "R51.x00" + }, + { + "name": "头晕", + "std_name": "头晕", + "code": "R42.x00" + }, + { + "name": "头疼", + "std_name": "头疼", + "code": "R51.x00" + }, + { + "name": "头痛", + "std_name": "头痛", + "code": "R51.x00" + }, + { + "name": "套细胞淋巴瘤", + "std_name": "套细胞淋巴瘤", + "code": "C83.100" + }, + { + "name": "子宫内膜复杂性增生", + "std_name": "子宫内膜复杂性增生", + "code": "N85.000" + }, + { + "name": "子宫内膜病变术后", + "std_name": "子宫内膜病变术后", + "code": "Z90.701" + }, + { + "name": "子宫内膜癌", + "std_name": "子宫内膜癌", + "code": "C54.x00" + }, + { + "name": "子宫平滑肌瘤", + "std_name": "子宫平滑肌瘤", + "code": "D25.x00" + }, + { + "name": "子宫肌瘤", + "std_name": "子宫肌瘤", + "code": "D25.x00" + }, + { + "name": "子宫肌间多发性平滑肌瘤", + "std_name": "子宫肌间多发性平滑肌瘤", + "code": "D25.100" + }, + { + "name": "子宫颈内生浸润型中分化粘液腺癌", + "std_name": "子宫颈内生浸润型中分化粘液腺癌", + "code": "C53.101" + }, + { + "name": "宫体肌间多发平滑肌瘤", + "std_name": "宫体肌间多发平滑肌瘤", + "code": "D25.100" + }, + { + "name": "宫体肌间平滑肌瘤", + "std_name": "宫体肌间平滑肌瘤", + "code": "D25.100" + }, + { + "name": "宫颈低分化鳞状细胞癌", + "std_name": "宫颈低分化鳞状细胞癌", + "code": "C53.903" + }, + { + "name": "宫颈癌", + "std_name": "宫颈癌", + "code": "C53.x00" + }, + { + "name": "宫颈腺癌", + "std_name": "宫颈腺癌", + "code": "C53.100" + }, + { + "name": "宫颈鳞癌", + "std_name": "宫颈鳞癌", + "code": "C53.900" + }, + { + "name": "宫颈鳞癌术后", + "std_name": "宫颈鳞癌术后", + "code": "Z90.700" + }, + { + "name": "寒战", + "std_name": "寒战", + "code": "R50.902" + }, + { + "name": "小便偏少", + "std_name": "小便偏少", + "code": "R34.x00" + }, + { + "name": "小便色偏黄", + "std_name": "小便色偏黄", + "code": "R82.x00" + }, + { + "name": "小便色黄", + "std_name": "小便色黄", + "code": "R82.x00" + }, + { + "name": "小便量偏少", + "std_name": "小便量偏少", + "code": "R34.x00" + }, + { + "name": "小便量少", + "std_name": "小便量少", + "code": "R34.x00" + }, + { + "name": "小便量约少", + "std_name": "小便量约少", + "code": "R34.x00" + }, + { + "name": "小肠癌", + "std_name": "小肠癌", + "code": "C17.x00" + }, + { + "name": "尿毒症", + "std_name": "尿毒症", + "code": "N19.x04" + }, + { + "name": "尿痛", + "std_name": "尿痛", + "code": "R30.x00" + }, + { + "name": "尿路感染", + "std_name": "尿路感染", + "code": "N39.000" + }, + { + "name": "尿频", + "std_name": "尿频", + "code": "R35.000" + }, + { + "name": "左下叶感染", + "std_name": "左下叶感染", + "code": "J98.400" + }, + { + "name": "左卵巢浆液性乳头状腺癌", + "std_name": "左卵巢浆液性乳头状腺癌", + "code": "C56.x01" + }, + { + "name": "左卵巢高级别浆液性乳头状囊腺癌", + "std_name": "左卵巢高级别浆液性乳头状囊腺癌", + "code": "C56.x02" + }, + { + "name": "左肾囊肿", + "std_name": "左肾囊肿", + "code": "N28.101" + }, + { + "name": "左肾小结石", + "std_name": "左肾小结石", + "code": "N20.000" + }, + { + "name": "幽门梗阻", + "std_name": "幽门梗阻", + "code": "K31.100" + }, + { + "name": "律齐", + "std_name": "律齐", + "code": "R00.x01" + }, + { + "name": "心功能不全", + "std_name": "心功能不全", + "code": "I50.900" + }, + { + "name": "心包囊肿", + "std_name": "心包囊肿", + "code": "Q34.800" + }, + { + "name": "心包积液", + "std_name": "心包积液", + "code": "I31.300" + }, + { + "name": "心律失常", + "std_name": "心律失常", + "code": "I49.x00" + }, + { + "name": "心悸", + "std_name": "心悸", + "code": "R00.200" + }, + { + "name": "心慌", + "std_name": "心慌", + "code": "R00.200" + }, + { + "name": "心房纤颤", + "std_name": "心房纤颤", + "code": "I48.x00" + }, + { + "name": "心房颤动", + "std_name": "心房颤动", + "code": "I48.x00" + }, + { + "name": "心累", + "std_name": "心累", + "code": "R00.200" + }, + { + "name": "心累气促", + "std_name": "心累气促", + "code": "R06.000" + }, + { + "name": "怒张", + "std_name": "怒张", + "code": "R23.400" + }, + { + "name": "急性单纯性阑尾炎", + "std_name": "急性单纯性阑尾炎", + "code": "K35.200" + }, + { + "name": "急性胰腺炎", + "std_name": "急性胰腺炎", + "code": "K85.900" + }, + { + "name": "急性脑梗死", + "std_name": "急性脑梗死", + "code": "I63.x01" + }, + { + "name": "急性阑尾炎", + "std_name": "急性阑尾炎", + "code": "K35.x00" + }, + { + "name": "恶心", + "std_name": "恶心", + "code": "R11.x00" + }, + { + "name": "恶性苗勒氏管混合瘤", + "std_name": "恶性苗勒氏管混合瘤", + "code": "C54.200" + }, + { + "name": "感冒", + "std_name": "感冒", + "code": "J00.x00" + }, + { + "name": "感染性休克", + "std_name": "感染性休克", + "code": "R57.200" + }, + { + "name": "慢性宫颈炎", + "std_name": "慢性宫颈炎", + "code": "M74.600" + }, + { + "name": "慢性肺源性心脏病", + "std_name": "慢性肺源性心脏病", + "code": "I27.900" + }, + { + "name": "慢性肾功能不全", + "std_name": "慢性肾功能不全", + "code": "N19.x01" + }, + { + "name": "慢性肾脏病", + "std_name": "慢性肾脏病", + "code": "N18.x00" + }, + { + "name": "慢性胆囊炎", + "std_name": "慢性胆囊炎", + "code": "K81.100" + }, + { + "name": "慢性胰腺炎", + "std_name": "慢性胰腺炎", + "code": "K86.100" + }, + { + "name": "慢性萎缩性胃炎", + "std_name": "慢性萎缩性胃炎", + "code": "K29.400" + }, + { + "name": "慢性阑尾炎", + "std_name": "慢性阑尾炎", + "code": "K36.x00" + }, + { + "name": "慢性阻塞性肺疾病", + "std_name": "慢性阻塞性肺疾病", + "code": "J44.x00" + }, + { + "name": "慢性非萎缩性胃炎", + "std_name": "慢性非萎缩性胃炎", + "code": "K29.301" + }, + { + "name": "慢支炎", + "std_name": "慢支炎", + "code": "J42.x00" + }, + { + "name": "憋气", + "std_name": "憋气", + "code": "R06.800" + }, + { + "name": "房颤", + "std_name": "房颤", + "code": "I48.x00" + }, + { + "name": "抽搐", + "std_name": "抽搐", + "code": "R56.800" + }, + { + "name": "排便次数增多", + "std_name": "排便次数增多", + "code": "R19.703" + }, + { + "name": "排尿困难", + "std_name": "排尿困难", + "code": "R39.100" + }, + { + "name": "支气管哮喘", + "std_name": "支气管哮喘", + "code": "J45.x00" + }, + { + "name": "支气管囊肿", + "std_name": "支气管囊肿", + "code": "J39.800" + }, + { + "name": "无力", + "std_name": "无力", + "code": "R53.100" + }, + { + "name": "时干时稀", + "std_name": "时干时稀", + "code": "R19.706" + }, + { + "name": "易怒", + "std_name": "易怒", + "code": "R45.400" + }, + { + "name": "易饥", + "std_name": "易饥", + "code": "R63.200" + }, + { + "name": "晕厥", + "std_name": "晕厥", + "code": "R55.x00" + }, + { + "name": "暴躁", + "std_name": "暴躁", + "code": "R45.500" + }, + { + "name": "未分化癌及黏液腺癌", + "std_name": "未分化癌及黏液腺癌", + "code": "C16.x08" + }, + { + "name": "末端回肠粘连狭窄", + "std_name": "末端回肠粘连狭窄", + "code": "K56.500" + }, + { + "name": "梅毒", + "std_name": "梅毒", + "code": "A53.900" + }, + { + "name": "横结肠癌", + "std_name": "横结肠癌", + "code": "C18.400" + }, + { + "name": "残胃癌", + "std_name": "残胃癌", + "code": "C16.x00" + }, + { + "name": "气促", + "std_name": "气促", + "code": "R06.800" + }, + { + "name": "气促不适", + "std_name": "气促不适", + "code": "R06.800" + }, + { + "name": "气喘", + "std_name": "气喘", + "code": "R06.000" + }, + { + "name": "气短", + "std_name": "气短", + "code": "R06.800" + }, + { + "name": "水肿", + "std_name": "水肿", + "code": "R60.x00" + }, + { + "name": "水肿增厚", + "std_name": "水肿增厚", + "code": "R60.x00" + }, + { + "name": "泛酸", + "std_name": "泛酸", + "code": "R13.x00" + }, + { + "name": "流涕", + "std_name": "流涕", + "code": "R09.800" + }, + { + "name": "流血", + "std_name": "流血", + "code": "R58.x00" + }, + { + "name": "浅表血管曲张", + "std_name": "浅表血管曲张", + "code": "I83.x03" + }, + { + "name": "浆液性囊腺癌", + "std_name": "浆液性囊腺癌", + "code": "C56.x01" + }, + { + "name": "浮肿", + "std_name": "浮肿", + "code": "R60.x00" + }, + { + "name": "消化道出血", + "std_name": "消化道出血", + "code": "K92.200" + }, + { + "name": "消瘦", + "std_name": "消瘦", + "code": "R63.400" + }, + { + "name": "淋巴瘤", + "std_name": "淋巴瘤", + "code": "C85.900" + }, + { + "name": "淋巴结淋巴组织增生", + "std_name": "淋巴结淋巴组织增生", + "code": "R59.000" + }, + { + "name": "淋巴结转移癌", + "std_name": "淋巴结转移癌", + "code": "C77.x00" + }, + { + "name": "渗出", + "std_name": "渗出", + "code": "R23.800" + }, + { + "name": "渗液", + "std_name": "渗液", + "code": "R23.800" + }, + { + "name": "溃疡型低分化腺癌", + "std_name": "溃疡型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "溃疡性结肠炎", + "std_name": "溃疡性结肠炎", + "code": "K51.x00" + }, + { + "name": "潮热", + "std_name": "潮热", + "code": "R61.000" + }, + { + "name": "灼热", + "std_name": "灼热", + "code": "R23.802" + }, + { + "name": "炎性肉芽肿", + "std_name": "炎性肉芽肿", + "code": "L92.900" + }, + { + "name": "烦躁", + "std_name": "烦躁", + "code": "R45.100" + }, + { + "name": "烧心", + "std_name": "烧心", + "code": "R12.x00" + }, + { + "name": "电解质紊乱", + "std_name": "电解质紊乱", + "code": "E87.x00" + }, + { + "name": "畏冷", + "std_name": "畏冷", + "code": "R50.901" + }, + { + "name": "畏寒", + "std_name": "畏寒", + "code": "R50.901" + }, + { + "name": "畸形", + "std_name": "畸形", + "code": "Q79.x00" + }, + { + "name": "疲乏", + "std_name": "疲乏", + "code": "R53.x00" + }, + { + "name": "疼痛", + "std_name": "疼痛", + "code": "R52.x00" + }, + { + "name": "痛经", + "std_name": "痛经", + "code": "N94.600" + }, + { + "name": "痰呈白色泡沫痰", + "std_name": "痰呈白色泡沫痰", + "code": "R09.302" + }, + { + "name": "瘀斑", + "std_name": "瘀斑", + "code": "R23.300" + }, + { + "name": "瘀点", + "std_name": "瘀点", + "code": "R23.300" + }, + { + "name": "瘙痒", + "std_name": "瘙痒", + "code": "L29.x00" + }, + { + "name": "癌结节", + "std_name": "癌结节", + "code": "R22.x02" + }, + { + "name": "癌肉瘤", + "std_name": "癌肉瘤", + "code": "C16.x11" + }, + { + "name": "皮疹", + "std_name": "皮疹", + "code": "R21.x02" + }, + { + "name": "皮肤瘙痒", + "std_name": "皮肤瘙痒", + "code": "L29.x00" + }, + { + "name": "盆腔内占位性病变", + "std_name": "盆腔内占位性病变", + "code": "R90.800" + }, + { + "name": "盆腔内囊实性占位病变", + "std_name": "盆腔内囊实性占位病变", + "code": "R90.800" + }, + { + "name": "盲肠癌", + "std_name": "盲肠癌", + "code": "C18.100" + }, + { + "name": "直肠中分化腺癌", + "std_name": "直肠中分化腺癌", + "code": "C20.x03" + }, + { + "name": "直肠多发息肉", + "std_name": "直肠多发息肉", + "code": "K62.100" + }, + { + "name": "直肠癌", + "std_name": "直肠癌", + "code": "C20.x00" + }, + { + "name": "直肠癌伴肝转移", + "std_name": "直肠癌伴肝转移", + "code": "C78.700" + }, + { + "name": "直肠癌术后", + "std_name": "直肠癌术后", + "code": "Z90.401" + }, + { + "name": "直肠癌术后吻合口瘘", + "std_name": "直肠癌术后吻合口瘘", + "code": "K91.800" + }, + { + "name": "直肠癌根治术后", + "std_name": "直肠癌根治术后", + "code": "Z90.401" + }, + { + "name": "直肠癌(浆膜上层)", + "std_name": "直肠癌(浆膜上层)", + "code": "C20.x00" + }, + { + "name": "直肠腺癌", + "std_name": "直肠腺癌", + "code": "C20.x01" + }, + { + "name": "直肠腺癌(中度分化)", + "std_name": "直肠腺癌(中度分化)", + "code": "C20.x03" + }, + { + "name": "直肠隆起型中分化管状腺癌", + "std_name": "直肠隆起型中分化管状腺癌", + "code": "C20.x03" + }, + { + "name": "直肠高分化腺癌", + "std_name": "直肠高分化腺癌", + "code": "C20.x04" + }, + { + "name": "眼花", + "std_name": "眼花", + "code": "H53.100" + }, + { + "name": "眼黄", + "std_name": "眼黄", + "code": "R17.x00" + }, + { + "name": "睡眠差", + "std_name": "睡眠差", + "code": "G47.x00" + }, + { + "name": "矽肺", + "std_name": "矽肺", + "code": "J62.x00" + }, + { + "name": "稀水样大便", + "std_name": "稀水样大便", + "code": "R19.701" + }, + { + "name": "站立不稳", + "std_name": "站立不稳", + "code": "R26.800" + }, + { + "name": "筛状粉刺型腺癌", + "std_name": "筛状粉刺型腺癌", + "code": "C16.x09" + }, + { + "name": "管状腺癌", + "std_name": "管状腺癌", + "code": "C16.x01" + }, + { + "name": "粘液", + "std_name": "粘液", + "code": "R19.502" + }, + { + "name": "粘液性囊腺癌", + "std_name": "粘液性囊腺癌", + "code": "C56.x05" + }, + { + "name": "粘膜慢性炎", + "std_name": "粘膜慢性炎", + "code": "K29.700" + }, + { + "name": "精神", + "std_name": "精神", + "code": "R45.x00" + }, + { + "name": "精神不振", + "std_name": "精神不振", + "code": "R45.802" + }, + { + "name": "精神变差", + "std_name": "精神变差", + "code": "R45.803" + }, + { + "name": "精神差", + "std_name": "精神差", + "code": "R45.801" + }, + { + "name": "精神欠佳", + "std_name": "精神欠佳", + "code": "R45.800" + }, + { + "name": "精神状态差", + "std_name": "精神状态差", + "code": "R45.804" + }, + { + "name": "精神略差", + "std_name": "精神略差", + "code": "R45.805" + }, + { + "name": "精神稍差", + "std_name": "精神稍差", + "code": "R45.806" + }, + { + "name": "糖尿病", + "std_name": "糖尿病", + "code": "E11.x00" + }, + { + "name": "紫绀", + "std_name": "紫绀", + "code": "R23.000" + }, + { + "name": "红肿", + "std_name": "红肿", + "code": "R23.300" + }, + { + "name": "纳差", + "std_name": "纳差", + "code": "R63.000" + }, + { + "name": "结肠中分化腺癌", + "std_name": "结肠中分化腺癌", + "code": "C18.x03" + }, + { + "name": "结肠多发息肉", + "std_name": "结肠多发息肉", + "code": "K63.500" + }, + { + "name": "结肠息肉", + "std_name": "结肠息肉", + "code": "K63.500" + }, + { + "name": "结肠术后", + "std_name": "结肠术后", + "code": "Z90.400" + }, + { + "name": "结肠癌", + "std_name": "结肠癌", + "code": "C18.x00" + }, + { + "name": "结肠肝曲癌", + "std_name": "结肠肝曲癌", + "code": "C18.300" + }, + { + "name": "结肠肿瘤", + "std_name": "结肠肿瘤", + "code": "D12.x00" + }, + { + "name": "结肠脾曲癌", + "std_name": "结肠脾曲癌", + "code": "C18.500" + }, + { + "name": "结肠腺癌", + "std_name": "结肠腺癌", + "code": "C18.x01" + }, + { + "name": "结肠腺癌(中低分化)", + "std_name": "结肠腺癌(中低分化)", + "code": "C18.x02" + }, + { + "name": "结肠腺管状腺瘤", + "std_name": "结肠腺管状腺瘤", + "code": "D12.x01" + }, + { + "name": "缺铁性贫血", + "std_name": "缺铁性贫血", + "code": "D50.900" + }, + { + "name": "耳鸣", + "std_name": "耳鸣", + "code": "H93.100" + }, + { + "name": "肛门坠胀", + "std_name": "肛门坠胀", + "code": "R19.801" + }, + { + "name": "肝囊肿", + "std_name": "肝囊肿", + "code": "K76.100" + }, + { + "name": "肝多发囊肿", + "std_name": "肝多发囊肿", + "code": "K76.100" + }, + { + "name": "肝左后叶上段及两肾囊肿", + "std_name": "肝左后叶上段及两肾囊肿", + "code": "K76.100" + }, + { + "name": "肝曲结肠粘液腺癌", + "std_name": "肝曲结肠粘液腺癌", + "code": "C18.302" + }, + { + "name": "肝炎", + "std_name": "肝炎", + "code": "K75.901" + }, + { + "name": "肝癌", + "std_name": "肝癌", + "code": "C22.000" + }, + { + "name": "肝硬化", + "std_name": "肝硬化", + "code": "K74.600" + }, + { + "name": "肝转移", + "std_name": "肝转移", + "code": "C78.700" + }, + { + "name": "肝转移瘤", + "std_name": "肝转移瘤", + "code": "C78.701" + }, + { + "name": "肠低分化腺癌(印戒细胞癌)", + "std_name": "肠低分化腺癌(印戒细胞癌)", + "code": "C18.x02" + }, + { + "name": "肠梗阻", + "std_name": "肠梗阻", + "code": "K56.x00" + }, + { + "name": "肠瘘", + "std_name": "肠瘘", + "code": "K63.200" + }, + { + "name": "肠穿孔", + "std_name": "肠穿孔", + "code": "K63.100" + }, + { + "name": "肠隆起型中分化管状腺癌", + "std_name": "肠隆起型中分化管状腺癌", + "code": "C18.x03" + }, + { + "name": "肢体抽搐", + "std_name": "肢体抽搐", + "code": "R56.800" + }, + { + "name": "肺气肿", + "std_name": "肺气肿", + "code": "J43.x00" + }, + { + "name": "肺源性心脏病", + "std_name": "肺源性心脏病", + "code": "I27.900" + }, + { + "name": "肺炎", + "std_name": "肺炎", + "code": "J18.x00" + }, + { + "name": "肺癌", + "std_name": "肺癌", + "code": "C34.x00" + }, + { + "name": "肺结核", + "std_name": "肺结核", + "code": "A16.200" + }, + { + "name": "肺部感染", + "std_name": "肺部感染", + "code": "J98.400" + }, + { + "name": "肾功能不全", + "std_name": "肾功能不全", + "code": "N19.x00" + }, + { + "name": "肾囊肿", + "std_name": "肾囊肿", + "code": "N28.100" + }, + { + "name": "肾性贫血", + "std_name": "肾性贫血", + "code": "D63.800" + }, + { + "name": "肿块", + "std_name": "肿块", + "code": "R22.x00" + }, + { + "name": "肿痛", + "std_name": "肿痛", + "code": "R22.x03" + }, + { + "name": "胀痛", + "std_name": "胀痛", + "code": "R14.x01" + }, + { + "name": "胃中至低分化管状腺癌", + "std_name": "胃中至低分化管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃低分化腺癌", + "std_name": "胃低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃低粘附性癌", + "std_name": "胃低粘附性癌", + "code": "C16.x06" + }, + { + "name": "胃体中下部溃疡", + "std_name": "胃体中下部溃疡", + "code": "K25.x00" + }, + { + "name": "胃体大弯侧溃疡型低分化腺癌", + "std_name": "胃体大弯侧溃疡型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃体小弯腺癌(中度分化)", + "std_name": "胃体小弯腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃体癌", + "std_name": "胃体癌", + "code": "C16.200" + }, + { + "name": "胃体癌伴腹腔种植转移", + "std_name": "胃体癌伴腹腔种植转移", + "code": "C78.600" + }, + { + "name": "胃体癌慢性萎缩性胃炎", + "std_name": "胃体癌慢性萎缩性胃炎", + "code": "C16.x00" + }, + { + "name": "胃体管状腺癌", + "std_name": "胃体管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃体肿瘤", + "std_name": "胃体肿瘤", + "code": "D13.100" + }, + { + "name": "胃印戒细胞癌", + "std_name": "胃印戒细胞癌", + "code": "C16.x05" + }, + { + "name": "胃息肉", + "std_name": "胃息肉", + "code": "D13.101" + }, + { + "name": "胃恶性肿瘤", + "std_name": "胃恶性肿瘤", + "code": "C16.x00" + }, + { + "name": "胃恶性肿瘤术后", + "std_name": "胃恶性肿瘤术后", + "code": "Z90.300" + }, + { + "name": "胃癌", + "std_name": "胃癌", + "code": "C16.x00" + }, + { + "name": "胃癌伴腹腔种植转移", + "std_name": "胃癌伴腹腔种植转移", + "code": "C78.600" + }, + { + "name": "胃癌术后", + "std_name": "胃癌术后", + "code": "Z90.300" + }, + { + "name": "胃癌术后肝转移", + "std_name": "胃癌术后肝转移", + "code": "C78.700" + }, + { + "name": "胃窦低分化腺癌", + "std_name": "胃窦低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃窦大弯侧腺癌(中度分化)", + "std_name": "胃窦大弯侧腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦小弯腺癌(中度分化)", + "std_name": "胃窦小弯腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦溃疡", + "std_name": "胃窦溃疡", + "code": "K25.x00" + }, + { + "name": "胃窦溃疡型低黏附性癌", + "std_name": "胃窦溃疡型低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃窦溃疡型隆起性病变", + "std_name": "胃窦溃疡型隆起性病变", + "code": "K25.x00" + }, + { + "name": "胃窦癌", + "std_name": "胃窦癌", + "code": "C16.300" + }, + { + "name": "胃窦腺癌", + "std_name": "胃窦腺癌", + "code": "C16.x03" + }, + { + "name": "胃粘液腺癌", + "std_name": "胃粘液腺癌", + "code": "C16.x07" + }, + { + "name": "胃纳可", + "std_name": "胃纳可", + "code": "R63.x02" + }, + { + "name": "胃纳差", + "std_name": "胃纳差", + "code": "R63.000" + }, + { + "name": "胃纳略差", + "std_name": "胃纳略差", + "code": "R63.000" + }, + { + "name": "胃肠息肉", + "std_name": "胃肠息肉", + "code": "K31.700" + }, + { + "name": "胃肠道间质瘤", + "std_name": "胃肠道间质瘤", + "code": "C49.x07" + }, + { + "name": "胃肿瘤", + "std_name": "胃肿瘤", + "code": "C16.x00" + }, + { + "name": "胃腺癌", + "std_name": "胃腺癌", + "code": "C16.x01" + }, + { + "name": "胃角溃疡型粘液腺癌", + "std_name": "胃角溃疡型粘液腺癌", + "code": "C16.x07" + }, + { + "name": "胃隆起型高分化腺癌", + "std_name": "胃隆起型高分化腺癌", + "code": "C16.x04" + }, + { + "name": "胆囊息肉", + "std_name": "胆囊息肉", + "code": "K82.000" + }, + { + "name": "胆囊炎", + "std_name": "胆囊炎", + "code": "K81.x00" + }, + { + "name": "胸中段食管癌", + "std_name": "胸中段食管癌", + "code": "C15.x00" + }, + { + "name": "胸椎骨质增生", + "std_name": "胸椎骨质增生", + "code": "M47.x00" + }, + { + "name": "胸痛", + "std_name": "胸痛", + "code": "R07.x01" + }, + { + "name": "胸腔积液", + "std_name": "胸腔积液", + "code": "J94.804" + }, + { + "name": "胸闷", + "std_name": "胸闷", + "code": "R07.x00" + }, + { + "name": "脂肪瘤", + "std_name": "脂肪瘤", + "code": "D17.x00" + }, + { + "name": "脂肪肝", + "std_name": "脂肪肝", + "code": "K76.000" + }, + { + "name": "脑梗死", + "std_name": "脑梗死", + "code": "I63.x00" + }, + { + "name": "脑萎缩", + "std_name": "脑萎缩", + "code": "G31.100" + }, + { + "name": "脓肿", + "std_name": "脓肿", + "code": "L02.x00" + }, + { + "name": "脓血", + "std_name": "脓血", + "code": "R19.500" + }, + { + "name": "脱发", + "std_name": "脱发", + "code": "L65.900" + }, + { + "name": "脱屑", + "std_name": "脱屑", + "code": "L92.800" + }, + { + "name": "脾大", + "std_name": "脾大", + "code": "R16.100" + }, + { + "name": "腰痛", + "std_name": "腰痛", + "code": "M54.500" + }, + { + "name": "腹水", + "std_name": "腹水", + "code": "R18.x00" + }, + { + "name": "腹泻", + "std_name": "腹泻", + "code": "R19.700" + }, + { + "name": "腹痛", + "std_name": "腹痛", + "code": "R10.x00" + }, + { + "name": "腹胀", + "std_name": "腹胀", + "code": "R14.x00" + }, + { + "name": "腹胀胀", + "std_name": "腹胀胀", + "code": "R14.x00" + }, + { + "name": "腹腔积液", + "std_name": "腹腔积液", + "code": "R18.x00" + }, + { + "name": "腹膜外肿瘤", + "std_name": "腹膜外肿瘤", + "code": "C76.300" + }, + { + "name": "腺鳞癌", + "std_name": "腺鳞癌", + "code": "C16.x12" + }, + { + "name": "膀胱浸润性癌", + "std_name": "膀胱浸润性癌", + "code": "C67.x00" + }, + { + "name": "膀胱癌", + "std_name": "膀胱癌", + "code": "C67.x00" + }, + { + "name": "艾滋病", + "std_name": "艾滋病", + "code": "B24.x01" + }, + { + "name": "苍白", + "std_name": "苍白", + "code": "R23.100" + }, + { + "name": "营养不良", + "std_name": "营养不良", + "code": "E46.x00" + }, + { + "name": "血凝块", + "std_name": "血凝块", + "code": "R58.x00" + }, + { + "name": "血尿", + "std_name": "血尿", + "code": "R31.x00" + }, + { + "name": "视物模糊", + "std_name": "视物模糊", + "code": "H53.800" + }, + { + "name": "视蒙", + "std_name": "视蒙", + "code": "H53.100" + }, + { + "name": "记忆力减退", + "std_name": "记忆力减退", + "code": "R41.300" + }, + { + "name": "贫血", + "std_name": "贫血", + "code": "D64.900" + }, + { + "name": "贲门癌", + "std_name": "贲门癌", + "code": "C16.000" + }, + { + "name": "贲门腺癌", + "std_name": "贲门腺癌", + "code": "C16.000" + }, + { + "name": "贲门腺癌(中度分化)", + "std_name": "贲门腺癌(中度分化)", + "code": "C16.000" + }, + { + "name": "身目黄染", + "std_name": "身目黄染", + "code": "R17.x00" + }, + { + "name": "轻度贫血", + "std_name": "轻度贫血", + "code": "D64.903" + }, + { + "name": "轻度食管静脉曲张", + "std_name": "轻度食管静脉曲张", + "code": "I85.x00" + }, + { + "name": "返酸", + "std_name": "返酸", + "code": "R13.x00" + }, + { + "name": "进食少", + "std_name": "进食少", + "code": "R63.001" + }, + { + "name": "进食障碍", + "std_name": "进食障碍", + "code": "R63.300" + }, + { + "name": "造口旁疝", + "std_name": "造口旁疝", + "code": "K94.100" + }, + { + "name": "酒精性脂肪肝", + "std_name": "酒精性脂肪肝", + "code": "K70.000" + }, + { + "name": "酮症酸中毒", + "std_name": "酮症酸中毒", + "code": "E10.100" + }, + { + "name": "酸痛", + "std_name": "酸痛", + "code": "M79.100" + }, + { + "name": "里急后重", + "std_name": "里急后重", + "code": "R19.800" + }, + { + "name": "里急后重,无恶心", + "std_name": "里急后重,无恶心", + "code": "R19.800" + }, + { + "name": "重度营养不良", + "std_name": "重度营养不良", + "code": "E43.x00" + }, + { + "name": "重度贫血", + "std_name": "重度贫血", + "code": "D64.901" + }, + { + "name": "量少", + "std_name": "量少", + "code": "N92.600" + }, + { + "name": "钝痛", + "std_name": "钝痛", + "code": "R10.x04" + }, + { + "name": "阑尾周围炎", + "std_name": "阑尾周围炎", + "code": "K36.x00" + }, + { + "name": "阑尾炎", + "std_name": "阑尾炎", + "code": "K37.x00" + }, + { + "name": "阑尾粘膜慢性炎", + "std_name": "阑尾粘膜慢性炎", + "code": "K36.x00" + }, + { + "name": "阵发性隐痛", + "std_name": "阵发性隐痛", + "code": "R10.x05" + }, + { + "name": "降结肠癌", + "std_name": "降结肠癌", + "code": "C18.600" + }, + { + "name": "隆起", + "std_name": "隆起", + "code": "R22.x02" + }, + { + "name": "隐痛", + "std_name": "隐痛", + "code": "R10.x03" + }, + { + "name": "震颤", + "std_name": "震颤", + "code": "R25.100" + }, + { + "name": "静脉曲张", + "std_name": "静脉曲张", + "code": "I83.906" + }, + { + "name": "非霍奇金淋巴瘤", + "std_name": "非霍奇金淋巴瘤", + "code": "C85.900" + }, + { + "name": "颜色改变", + "std_name": "颜色改变", + "code": "R23.800" + }, + { + "name": "食欲不佳", + "std_name": "食欲不佳", + "code": "R63.000" + }, + { + "name": "食欲不振", + "std_name": "食欲不振", + "code": "R63.000" + }, + { + "name": "食欲减退", + "std_name": "食欲减退", + "code": "R63.000" + }, + { + "name": "食欲欠佳", + "std_name": "食欲欠佳", + "code": "R63.000" + }, + { + "name": "食管上段癌", + "std_name": "食管上段癌", + "code": "C15.x00" + }, + { + "name": "食管下段癌", + "std_name": "食管下段癌", + "code": "C15.x00" + }, + { + "name": "食管下段鳞癌", + "std_name": "食管下段鳞癌", + "code": "C15.x02" + }, + { + "name": "食管中上段鳞癌", + "std_name": "食管中上段鳞癌", + "code": "C15.x02" + }, + { + "name": "食管炎", + "std_name": "食管炎", + "code": "K20.x00" + }, + { + "name": "食管癌术后", + "std_name": "食管癌术后", + "code": "Z90.100" + }, + { + "name": "食管胃交界溃疡型低分化腺癌", + "std_name": "食管胃交界溃疡型低分化腺癌", + "code": "C16.002" + }, + { + "name": "食管胃交界溃疡型管状腺癌", + "std_name": "食管胃交界溃疡型管状腺癌", + "code": "C16.001" + }, + { + "name": "食管胃交界腺癌", + "std_name": "食管胃交界腺癌", + "code": "C16.000" + }, + { + "name": "食管髓质型高分化鳞状细胞癌", + "std_name": "食管髓质型高分化鳞状细胞癌", + "code": "C15.x04" + }, + { + "name": "食管鳞状细胞癌", + "std_name": "食管鳞状细胞癌", + "code": "C15.x02" + }, + { + "name": "饥饿感", + "std_name": "饥饿感", + "code": "R63.200" + }, + { + "name": "骨痛", + "std_name": "骨痛", + "code": "M79.600" + }, + { + "name": "骶管囊肿", + "std_name": "骶管囊肿", + "code": "G96.100" + }, + { + "name": "高分化子宫内膜样腺癌", + "std_name": "高分化子宫内膜样腺癌", + "code": "C54.100" + }, + { + "name": "高热", + "std_name": "高热", + "code": "R50.903" + }, + { + "name": "高级别浆液性乳头状癌", + "std_name": "高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "高级别浆液性癌", + "std_name": "高级别浆液性癌", + "code": "C56.x02" + }, + { + "name": "高脂血症", + "std_name": "高脂血症", + "code": "E78.500" + }, + { + "name": "高血压", + "std_name": "高血压", + "code": "I10.x00" + }, + { + "name": "麻木", + "std_name": "麻木", + "code": "R20.200" + }, + { + "name": "黄染", + "std_name": "黄染", + "code": "R17.x00" + }, + { + "name": "黄疸", + "std_name": "黄疸", + "code": "R17.x00" + }, + { + "name": "黏液腺癌", + "std_name": "黏液腺癌", + "code": "C16.x07" + }, + { + "name": "黑便", + "std_name": "黑便", + "code": "K92.100" + }, + { + "name": "黑曚", + "std_name": "黑曚", + "code": "H53.100" + }, + { + "name": "黑朦", + "std_name": "黑朦", + "code": "H53.100" + }, + { + "name": "(两侧卵巢)高级别浆液性乳头状癌", + "std_name": "(两侧卵巢)高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "(两侧附件)高级别浆液性乳头状癌", + "std_name": "(两侧附件)高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "(乙状结肠)腺癌", + "std_name": "(乙状结肠)腺癌", + "code": "C18.701" + }, + { + "name": "(右附件)高级别浆液性乳头状癌", + "std_name": "(右附件)高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "(右)乳腺浸润性导管癌", + "std_name": "(右)乳腺浸润性导管癌", + "code": "C50.x01" + }, + { + "name": "(大网膜)纤维脂肪组织内浸润的低分化腺癌", + "std_name": "(大网膜)纤维脂肪组织内浸润的低分化腺癌", + "code": "C78.600" + }, + { + "name": "(横结肠)肠管状腺瘤", + "std_name": "(横结肠)肠管状腺瘤", + "code": "D12.x01" + }, + { + "name": "(直肠)中分化腺癌", + "std_name": "(直肠)中分化腺癌", + "code": "C20.x03" + }, + { + "name": "(直肠)腺癌(中度分化)", + "std_name": "(直肠)腺癌(中度分化)", + "code": "C20.x03" + }, + { + "name": "(肝曲)肠管状腺瘤", + "std_name": "(肝曲)肠管状腺瘤", + "code": "D12.x01" + } +] \ No newline at end of file diff --git a/runtime/ops/mapper/medcleanstd_full_operator/normalizer/normalizer_npu.py b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/normalizer_npu.py new file mode 100644 index 00000000..f82f8eab --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/normalizer_npu.py @@ -0,0 +1,467 @@ +import os +import torch +import torch_npu +import numpy as np +import faiss +import json +import re +# 直接使用 sentence_transformers(避免 modelscope 的 Python 3.9 兼容性问题) +from sentence_transformers import SentenceTransformer +# 屏蔽警告 +import warnings +warnings.filterwarnings("ignore") + +RULE_TEXT_TRANSLATION = str.maketrans({ + "(": "(", + ")": ")", + "【": "[", + "】": "]", + ",": ",", + ":": ":", + ";": ";", + "“": "\"", + "”": "\"", + "‘": "'", + "’": "'", +}) + +RULE_TEXT_TRANSLATION = str.maketrans({ + "\uFF08": "(", + "\uFF09": ")", + "\u3010": "[", + "\u3011": "]", + "\uFF0C": ",", + "\uFF1A": ":", + "\uFF1B": ";", + "\u201C": "\"", + "\u201D": "\"", + "\u2018": "'", + "\u2019": "'", +}) + + +def normalize_term_text(text): + text = (text or "").strip().lower() + if not text: + return "" + text = text.translate(RULE_TEXT_TRANSLATION) + return re.sub(r"\s+", "", text) + +class MedicalNormalizer: + def __init__(self, model_dir, batch_size=24, use_l1_cache=True): + # 1. 路径检查 + if not os.path.exists(model_dir): + raise ValueError(f"❌ 路径不存在: {model_dir}") + + # 检查关键文件是否存在 + config_path = os.path.join(model_dir, 'config.json') + if not os.path.exists(config_path): + raise ValueError(f"❌ 错误:在 {model_dir} 下找不到 config.json,请确认路径正确。") + + # 批处理大小配置(用于向量编码) + self.batch_size = batch_size + # 是否启用 L1 缓存(高频词精确匹配) + self.use_l1_cache = use_l1_cache + + print(f">>> [Normalizer] 正在加载本地向量模型: {model_dir} (batch_size={batch_size}, use_l1_cache={use_l1_cache})") + + # 2. 硬件设备检测 + # 优先检测昇腾 NPU,其次检测 CUDA GPU,最后使用 CPU + if hasattr(torch, 'npu') and torch.npu.is_available(): + self.device = 'npu:0' # 使用 'gpu' 表示加速设备 + print(f">>> [Device] 使用昇腾 NPU ({torch.npu.get_device_name(0)})") + else: + self.device = 'cpu' + print(">>> [Device] 使用 CPU") + + # 3. 加载向量化模型 + try: + self.encoder = SentenceTransformer(model_dir, device=self.device) + print(">>> [Normalizer] 模型加载成功!") + except Exception as e: + print(f"❌ 模型加载失败: {e}") + print("提示:请确保安装了依赖 pip install sentence-transformers faiss-cpu (或 faiss-gpu 如果使用 CUDA)") + raise e + + # 4. 初始化知识库 (模拟 ICD-10 数据) + self._init_knowledge_base() + self._init_curated_rules() + + def _init_knowledge_base(self): + """ + 初始化标准术语库 + 这里模拟了一些数据,实际生产中应从数据库加载 + """ + print(">>> [Index] 正在构建标准库索引...") + + # 从 JSON 文件加载 L1 缓存和标准术语库 + script_dir = os.path.dirname(os.path.abspath(__file__)) + + # --- L1: 内存缓存 (高频词精确匹配,按需启用) --- + if self.use_l1_cache: + l1_cache_path = os.path.join(script_dir, "l1_cache.json") + with open(l1_cache_path, 'r', encoding='utf-8') as f: + raw = json.load(f) + + # 统一转换为: + # self.l1_cache: { name: {"std_name": ..., "code": ...}, ... } + # 兼容老格式: + # 1) { name: code, ... } + # 2) [ {"name": "...", "code": "..."}, ... ] + # 3) [ {"name": "...", "std_name": "...", "code": "..."}, ... ] + mapping = {} + if isinstance(raw, dict): + for name, code in raw.items(): + if name is None or code is None: + continue + name_s = str(name) + code_s = str(code) + mapping[name_s] = { + "std_name": name_s, # 老格式默认 std_name = name + "code": code_s, + } + elif isinstance(raw, list): + for item in raw: + if not isinstance(item, dict): + continue + name = item.get("name") + code = item.get("code") + if name is None or code is None: + continue + std_name = item.get("std_name") or name + mapping[str(name)] = { + "std_name": str(std_name), + "code": str(code), + } + else: + print(f">>> [Warning] 未识别的 l1_cache 格式: {type(raw)}, 已忽略 L1 缓存") + + self.l1_cache = mapping + print(f">>> [Index] 已加载 L1 缓存,共 {len(self.l1_cache)} 条高频术语") + else: + # 禁用 L1 缓存时,使用空字典占位,后续逻辑统一判断 self.use_l1_cache + self.l1_cache = {} + print(">>> [Index] 已禁用 L1 缓存,仅使用向量检索") + + # --- L2: 向量库 (模糊匹配) --- + # 标准词列表 + std_terms_path = os.path.join(script_dir, "std_terms.json") + with open(std_terms_path, 'r', encoding='utf-8') as f: + self.std_terms = json.load(f) + + # 尝试从磁盘加载已构建的索引,避免重复构建 + index_path = os.path.join(script_dir, "std_terms.index") + if os.path.exists(index_path): + # 直接从文件加载 Faiss 索引(CPU) + self.index = faiss.read_index(index_path) + self.dim = self.index.d + print(f">>> [Index] 已从文件加载索引: {index_path}") + else: + # 1. 计算所有标准词的向量 + std_names = [item["name"] for item in self.std_terms] + vectors = self._get_embeddings(std_names) + + # 2. 构建 Faiss 索引(CPU) + self.dim = vectors.shape[1] + # 使用内积索引 (IndexFlatIP)。因为向量已归一化,内积等价于余弦相似度 + self.index = faiss.IndexFlatIP(self.dim) + + self.index.add(vectors) + # 将索引保存到磁盘,供下次直接加载 + faiss.write_index(self.index, index_path) + print(f">>> [Index] 索引构建完成并已保存到: {index_path},包含 {len(self.std_terms)} 条术语") + + def _init_curated_rules(self): + self.curated_rules = {} + rules_path = os.environ.get("MEDCLEANSTD_TERM_RULES_JSON", "").strip() + if not rules_path: + return + if not os.path.exists(rules_path): + print(f">>> [Rules] 跳过静态规则,文件不存在: {rules_path}") + return + + try: + with open(rules_path, "r", encoding="utf-8") as f: + raw_rules = json.load(f) + except Exception as exc: + print(f">>> [Rules] 读取静态规则失败: {exc}") + return + + loaded = 0 + for item in raw_rules if isinstance(raw_rules, list) else []: + text = (item.get("text") or "").strip() + std_name = (item.get("std_name") or "").strip() + std_code = (item.get("std_code") or "").strip() + normalized_text = normalize_term_text(text) + if not normalized_text or not std_name or not std_code: + continue + if normalized_text in self.curated_rules: + continue + self.curated_rules[normalized_text] = { + "std_name": std_name, + "std_code": std_code, + } + loaded += 1 + + print(f">>> [Rules] 已加载 {loaded} 条静态标准化规则: {rules_path}") + + def _get_embeddings(self, texts): + """ + 将文本转换为向量(支持分批处理以控制显存占用) + :param texts: 字符串或字符串列表 + :return: numpy array,形状为 (n, dim),已归一化 + """ + # sentence_transformers 可以直接处理字符串或列表 + if isinstance(texts, str): + texts = [texts] + + # 如果文本数量较少,直接处理 + if len(texts) <= self.batch_size: + embeddings = self.encoder.encode( + texts, + convert_to_numpy=True, + normalize_embeddings=True, # 自动归一化 + show_progress_bar=False, + batch_size=self.batch_size + ) + else: + # 分批处理,避免一次性占用过多显存 + all_embeddings = [] + for i in range(0, len(texts), self.batch_size): + batch_texts = texts[i:i + self.batch_size] + batch_embeddings = self.encoder.encode( + batch_texts, + convert_to_numpy=True, + normalize_embeddings=True, + show_progress_bar=False, + batch_size=self.batch_size + ) + all_embeddings.append(batch_embeddings) + embeddings = np.vstack(all_embeddings) + + # 确保是 float32 类型(Faiss 要求) + vecs = np.array(embeddings, dtype='float32') + + return vecs + + def normalize(self, text): + """ + 核心接口:标准化 + :param text: 输入实体文本 (如 "尤下腹痛"),或字符串列表 + :return: 标准化结果字典,或结果字典列表 + """ + # 支持批量输入:如果传入列表,走并行标准化流程 + if isinstance(text, (list, tuple)): + return self.normalize_batch(list(text)) + + if not text: + return None + + # 复用批量接口,避免重复代码 + return self.normalize_batch([text])[0] + + def normalize_batch(self, texts): + """ + 并行标准化多个实体 + :param texts: 字符串列表 + :return: 与输入一一对应的结果字典列表 + """ + if not texts: + return [] + + # 预分配结果列表 + results = [None] * len(texts) + + # 需要走向量检索的样本索引和文本 + pending_indices = [] + pending_texts = [] + + for i, t in enumerate(texts): + if not t: + results[i] = None + continue + + # 1. 先查 L1 缓存(O(1) 查表,极快;可通过 use_l1_cache 关闭) + normalized_text = normalize_term_text(t) + + if normalized_text in self.curated_rules: + entry = self.curated_rules[normalized_text] + results[i] = { + "std_name": entry["std_name"], + "std_code": entry["std_code"], + "score": 1.0, + "source": "Curated_Rule" + } + elif self.use_l1_cache and t in self.l1_cache: + entry = self.l1_cache[t] + # 兼容老格式:entry 可能是 str(code) + if isinstance(entry, dict): + std_name = entry.get("std_name", t) + code = entry.get("code") + else: + std_name = t + code = entry + results[i] = { + "std_name": std_name, + "std_code": code, + "score": 1.0, + "source": "L1_Cache" + } + else: + pending_indices.append(i) + pending_texts.append(t) + + # 2. 对未命中缓存的文本,使用向量模型 + Faiss 批量并行检索 + if pending_texts: + query_vecs = self._get_embeddings(pending_texts) # 形状 (n, dim) + + # 并行批量搜索:如果查询向量数量很大,分批搜索以避免内存问题 + # Faiss 的 search 方法本身已经支持批量并行搜索 + search_batch_size = 2000 # 每次搜索的向量数量上限 + + if len(query_vecs) <= search_batch_size: + # 一次性批量搜索(并行) + D, I = self._search_batch(query_vecs, 1) + self._process_search_results(D, I, pending_indices, results) + else: + # 分批搜索,每批并行处理 + for i in range(0, len(query_vecs), search_batch_size): + batch_vecs = query_vecs[i:i + search_batch_size] + batch_indices = pending_indices[i:i + search_batch_size] + + # 批量并行搜索 + D, I = self._search_batch(batch_vecs, 1) + self._process_search_results(D, I, batch_indices, results) + + return results + + def normalize_batch(self, texts): + if not texts: + return [] + + results = [None] * len(texts) + pending_indices = [] + pending_texts = [] + + for i, t in enumerate(texts): + if not t: + results[i] = None + continue + + normalized_text = normalize_term_text(t) + if normalized_text in self.curated_rules: + entry = self.curated_rules[normalized_text] + results[i] = { + "std_name": entry["std_name"], + "std_code": entry["std_code"], + "score": 1.0, + "source": "Curated_Rule", + } + continue + + if self.use_l1_cache and t in self.l1_cache: + entry = self.l1_cache[t] + if isinstance(entry, dict): + std_name = entry.get("std_name", t) + code = entry.get("code") + else: + std_name = t + code = entry + results[i] = { + "std_name": std_name, + "std_code": code, + "score": 1.0, + "source": "L1_Cache", + } + continue + + pending_indices.append(i) + pending_texts.append(t) + + if pending_texts: + query_vecs = self._get_embeddings(pending_texts) + search_batch_size = 2000 + if len(query_vecs) <= search_batch_size: + D, I = self._search_batch(query_vecs, 1) + self._process_search_results(D, I, pending_indices, results) + else: + for i in range(0, len(query_vecs), search_batch_size): + batch_vecs = query_vecs[i:i + search_batch_size] + batch_indices = pending_indices[i:i + search_batch_size] + D, I = self._search_batch(batch_vecs, 1) + self._process_search_results(D, I, batch_indices, results) + + return results + + def _search_batch(self, query_vecs, k): + """ + 批量并行搜索(Faiss 内部已优化并行) + :param query_vecs: 查询向量,形状 (n, dim) + :param k: 返回 Top-k 结果 + :return: (D, I) 距离和索引 + """ + # Faiss 的 search 方法对批量查询已经是并行的 + # 如果索引在 GPU 上,会自动使用 GPU 并行加速 + D, I = self.index.search(query_vecs, k) + return D, I + + def _process_search_results(self, D, I, pending_indices, results): + """ + 处理搜索结果并填充到结果列表 + :param D: 距离矩阵 + :param I: 索引矩阵 + :param pending_indices: 待处理索引列表 + :param results: 结果列表(会被修改) + """ + threshold = 0.75 + + for j, idx_in_original in enumerate(pending_indices): + score = float(D[j][0]) + term_idx = int(I[j][0]) + + if score > threshold: + match_term = self.std_terms[term_idx] + results[idx_in_original] = { + "std_name": match_term["name"], + "std_code": match_term["code"], + "score": round(score, 4), + "source": "Vector_Retrieval" + } + else: + results[idx_in_original] = { + "std_name": None, + "std_code": None, + "score": round(score, 4), + "source": "Unmapped_Low_Score" + } + +# --- 单元测试 --- +if __name__ == "__main__": + # 指向您本地的具体路径 + local_path = "./model/bge-small-zh-v1.5" + + # 防止设备冲突(昇腾使用 ASCEND_RT_VISIBLE_DEVICES,CUDA 使用 CUDA_VISIBLE_DEVICES) + # os.environ["ASCEND_RT_VISIBLE_DEVICES"] = "0" # 昇腾 NPU + # os.environ["CUDA_VISIBLE_DEVICES"] = "1" # NVIDIA GPU + + try: + norm = MedicalNormalizer(local_path) + + print("\n" + "="*60) + print(f"{'原词':<12} | {'标准词':<12} | {'ICD编码':<8} | {'分数':<6} | {'来源'}") + print("-" * 60) + + test_cases = [ + "急性阑尾炎", # 在缓存里 + "尤下腹痛", # 错别字 -> 右下腹疼痛 + "头孢", # 模糊 -> 头孢菌素类药物 + "肚子疼", # 语义 -> 右下腹疼痛 (可能) + "未知的火星病" # 应该不匹配 + ] + + for text in test_cases: + res = norm.normalize(text) + print(f"{text:<12} | {str(res['std_name']):<12} | {str(res['std_code']):<8} | {res['score']:<6} | {res['source']}") + + except Exception as e: + print(f"\n❌ 运行出错: {e}") diff --git a/runtime/ops/mapper/medcleanstd_full_operator/normalizer/std_terms.index b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/std_terms.index new file mode 100644 index 00000000..1e24fd01 Binary files /dev/null and b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/std_terms.index differ diff --git a/runtime/ops/mapper/medcleanstd_full_operator/normalizer/std_terms.json b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/std_terms.json new file mode 100644 index 00000000..04f4923e --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/normalizer/std_terms.json @@ -0,0 +1,8134 @@ +[ + { + "name": "1 型糖尿病", + "code": "E10.x00" + }, + { + "name": "2 型呼吸衰竭", + "code": "J96.100" + }, + { + "name": "2 型糖尿病", + "code": "E11.x00" + }, + { + "name": "AFP 升高", + "code": "R97.100" + }, + { + "name": "Addison 病", + "code": "E27.100" + }, + { + "name": "B 细胞淋巴瘤", + "code": "C85.100" + }, + { + "name": "B 超异常", + "code": "R93.x04" + }, + { + "name": "B 超示肿瘤", + "code": "R93.x04" + }, + { + "name": "Barrett 食管", + "code": "K22.700" + }, + { + "name": "C 反应蛋白升高", + "code": "R79.803" + }, + { + "name": "CA125 升高", + "code": "R97.300" + }, + { + "name": "CA19-9 升高", + "code": "R97.200" + }, + { + "name": "CA72-4 升高", + "code": "R97.800" + }, + { + "name": "CEA 升高", + "code": "R97.000" + }, + { + "name": "CIN", + "code": "D06.x00" + }, + { + "name": "COPD", + "code": "J44.x00" + }, + { + "name": "CRP 升高", + "code": "R79.803" + }, + { + "name": "CT 检查异常", + "code": "R93.x01" + }, + { + "name": "CT 示肿瘤", + "code": "R93.x01" + }, + { + "name": "CYFRA21-1 升高", + "code": "R97.802" + }, + { + "name": "D 二聚体升高", + "code": "R79.805" + }, + { + "name": "DIC", + "code": "D65.x00" + }, + { + "name": "DVT", + "code": "I82.x00" + }, + { + "name": "ER 阳性", + "code": "R97.x03" + }, + { + "name": "ER 阴性", + "code": "R97.x04" + }, + { + "name": "G-6-PD 酶缺乏症", + "code": "D55.000" + }, + { + "name": "GIST", + "code": "C49.x07" + }, + { + "name": "HE4 升高", + "code": "R97.804" + }, + { + "name": "HER2 阳性", + "code": "R97.x01" + }, + { + "name": "HER2 阴性", + "code": "R97.x02" + }, + { + "name": "I 型呼吸衰竭", + "code": "J96.000" + }, + { + "name": "I 型呼吸衰竭", + "code": "J96.000" + }, + { + "name": "II 型呼吸衰竭", + "code": "J96.100" + }, + { + "name": "III°房室传导阻滞", + "code": "I45.100" + }, + { + "name": "II°房室传导阻滞", + "code": "I44.100" + }, + { + "name": "IPMN", + "code": "D13.600" + }, + { + "name": "I°房室传导阻滞", + "code": "I45.100" + }, + { + "name": "Ki-67 升高", + "code": "R97.x07" + }, + { + "name": "Ki67 指数升高", + "code": "R97.x07" + }, + { + "name": "Ki67 阳性细胞数约 50%", + "code": "R97.x07" + }, + { + "name": "MALT 淋巴瘤", + "code": "C85.103" + }, + { + "name": "MODS", + "code": "R68.800" + }, + { + "name": "MOF", + "code": "R68.800" + }, + { + "name": "MRI 检查异常", + "code": "R93.x03" + }, + { + "name": "MRI 示肿瘤", + "code": "R93.x03" + }, + { + "name": "NK/T 细胞淋巴瘤", + "code": "C85.300" + }, + { + "name": "NSE 升高", + "code": "R97.801" + }, + { + "name": "PCI 术后", + "code": "Z95.500" + }, + { + "name": "PCT 升高", + "code": "R79.804" + }, + { + "name": "PE", + "code": "I26.x00" + }, + { + "name": "PET-CT 示肿瘤", + "code": "R93.x09" + }, + { + "name": "PKU", + "code": "E70.100" + }, + { + "name": "PR 阳性", + "code": "R97.x05" + }, + { + "name": "PR 阴性", + "code": "R97.x06" + }, + { + "name": "PSA 升高", + "code": "R97.400" + }, + { + "name": "SCC 升高", + "code": "R97.803" + }, + { + "name": "SIADH", + "code": "E22.200" + }, + { + "name": "SPN", + "code": "D13.600" + }, + { + "name": "ST-T 改变", + "code": "R94.301" + }, + { + "name": "T 细胞淋巴瘤", + "code": "C85.200" + }, + { + "name": "TIA", + "code": "G45.x00" + }, + { + "name": "VIP 瘤", + "code": "C7A.011" + }, + { + "name": "X 线检查异常", + "code": "R93.x00" + }, + { + "name": "一般情况可", + "code": "Z71.x02" + }, + { + "name": "一般情况好", + "code": "Z71.x01" + }, + { + "name": "三尖瓣关闭不全", + "code": "I36.200" + }, + { + "name": "三尖瓣反流", + "code": "I36.200" + }, + { + "name": "三尖瓣狭窄", + "code": "I36.100" + }, + { + "name": "上呼吸道感染", + "code": "J06.x00" + }, + { + "name": "上消化道出血", + "code": "K92.201" + }, + { + "name": "上肢水肿", + "code": "R60.100" + }, + { + "name": "上肢酸痛", + "code": "M79.102" + }, + { + "name": "上肢静脉曲张", + "code": "I83.x00" + }, + { + "name": "上腔静脉综合征", + "code": "I87.100" + }, + { + "name": "上腹包块", + "code": "R19.000" + }, + { + "name": "上腹痛", + "code": "R10.100" + }, + { + "name": "上腹腹胀", + "code": "R14.x00" + }, + { + "name": "下消化道出血", + "code": "K92.202" + }, + { + "name": "下肢动脉硬化闭塞症", + "code": "I70.200" + }, + { + "name": "下肢动脉粥样硬化", + "code": "I70.200" + }, + { + "name": "下肢水肿", + "code": "R60.000" + }, + { + "name": "下肢酸痛", + "code": "M79.103" + }, + { + "name": "下肢静脉曲张", + "code": "I83.x00" + }, + { + "name": "下肢静脉血栓", + "code": "I82.400" + }, + { + "name": "下腔静脉栓塞", + "code": "I82.200" + }, + { + "name": "下腹包块", + "code": "R19.000" + }, + { + "name": "下腹疼痛", + "code": "R10.x00" + }, + { + "name": "下腹腹胀", + "code": "R14.x00" + }, + { + "name": "下颌窦息肉", + "code": "J33.000" + }, + { + "name": "下颌窦炎", + "code": "J32.001" + }, + { + "name": "不完全性肠梗阻", + "code": "K56.x01" + }, + { + "name": "不稳定型心绞痛", + "code": "I20.000" + }, + { + "name": "不能平卧", + "code": "R06.802" + }, + { + "name": "不规则发热", + "code": "R50.905" + }, + { + "name": "丙型病毒性肝炎", + "code": "B18.200" + }, + { + "name": "丙肝肝硬化", + "code": "K74.603" + }, + { + "name": "两侧上肢静脉曲张", + "code": "I83.x00" + }, + { + "name": "两侧卵巢癌", + "code": "C56.x00" + }, + { + "name": "两侧卵巢高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "两侧筛窦炎", + "code": "J32.000" + }, + { + "name": "两侧附件高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "两肺上叶感染", + "code": "J98.400" + }, + { + "name": "两肺感染", + "code": "J18.x00" + }, + { + "name": "两肺结节", + "code": "R91.x00" + }, + { + "name": "两肺结节待查肝囊肿", + "code": "R91.x00" + }, + { + "name": "两肾多发囊肿", + "code": "N28.100" + }, + { + "name": "两肾积水", + "code": "N13.x00" + }, + { + "name": "中 - 低分化腺癌", + "code": "C16.x02" + }, + { + "name": "中 - 低分化腺癌", + "code": "C16.x02" + }, + { + "name": "中下腹痛", + "code": "R10.200" + }, + { + "name": "中下腹部闷痛", + "code": "R10.x00" + }, + { + "name": "中位直肠癌", + "code": "C20.x00" + }, + { + "name": "中低分化腺癌", + "code": "C16.x02" + }, + { + "name": "中分化子宫内膜样腺癌", + "code": "C54.102" + }, + { + "name": "中分化癌", + "code": "C16.x10" + }, + { + "name": "中医治疗", + "code": "Z50.300" + }, + { + "name": "中央型肺癌", + "code": "C34.x00" + }, + { + "name": "中度发热", + "code": "R50.801" + }, + { + "name": "中度贫血", + "code": "D64.902" + }, + { + "name": "中度食管静脉曲张", + "code": "I85.x01" + }, + { + "name": "中性粒细胞百分比升高", + "code": "D72.801" + }, + { + "name": "中至低分化腺癌", + "code": "C16.x02" + }, + { + "name": "中药治疗", + "code": "Z50.301" + }, + { + "name": "中风", + "code": "I64.x00" + }, + { + "name": "中高分化腺癌", + "code": "C16.x03" + }, + { + "name": "为进一步化疗入院", + "code": "Z51.100" + }, + { + "name": "主动脉夹层", + "code": "I71.000" + }, + { + "name": "主动脉球钙化", + "code": "I70.x02" + }, + { + "name": "主动脉瓣关闭不全", + "code": "I35.100" + }, + { + "name": "主动脉瓣反流", + "code": "I35.100" + }, + { + "name": "主动脉瓣狭窄", + "code": "I35.000" + }, + { + "name": "主动脉瘤", + "code": "I71.x00" + }, + { + "name": "主动脉硬化", + "code": "I70.000" + }, + { + "name": "主动脉钙化", + "code": "I70.x02" + }, + { + "name": "乏力", + "code": "R53.x00" + }, + { + "name": "乏力感", + "code": "R53.x00" + }, + { + "name": "乏力纳差", + "code": "R53.x00" + }, + { + "name": "乏力纳差偶有嗳气", + "code": "R53.x00" + }, + { + "name": "乙型病毒性肝炎", + "code": "B18.100" + }, + { + "name": "乙状结肠中分化腺癌", + "code": "C18.702" + }, + { + "name": "乙状结肠低分化腺癌", + "code": "C18.703" + }, + { + "name": "乙状结肠占位", + "code": "R90.801" + }, + { + "name": "乙状结肠占位性病变", + "code": "R90.801" + }, + { + "name": "乙状结肠癌", + "code": "C18.700" + }, + { + "name": "乙状结肠粘液腺癌", + "code": "C18.704" + }, + { + "name": "乙状结肠腺癌", + "code": "C18.701" + }, + { + "name": "乙状结肠腺癌", + "code": "C18.701" + }, + { + "name": "乙肝肝硬化", + "code": "K74.602" + }, + { + "name": "乳头内陷", + "code": "N64.x00" + }, + { + "name": "乳头溢液", + "code": "N64.x00" + }, + { + "name": "乳头溢血", + "code": "N64.x00" + }, + { + "name": "乳头状管状腺癌", + "code": "C16.x01" + }, + { + "name": "乳头状腺癌", + "code": "C16.x15" + }, + { + "name": "乳头皲裂", + "code": "N64.x00" + }, + { + "name": "乳糜尿", + "code": "R82.x00" + }, + { + "name": "乳腺 HER2 阳性", + "code": "C50.x01" + }, + { + "name": "乳腺 Luminal A 型", + "code": "C50.x01" + }, + { + "name": "乳腺 Luminal B 型", + "code": "C50.x01" + }, + { + "name": "乳腺 Paget 病", + "code": "C50.x01" + }, + { + "name": "乳腺三阴性癌", + "code": "C50.x01" + }, + { + "name": "乳腺保乳术后", + "code": "Z90.100" + }, + { + "name": "乳腺分叶状肿瘤", + "code": "D24.x00" + }, + { + "name": "乳腺分泌粘液癌", + "code": "C50.x03" + }, + { + "name": "乳腺包块", + "code": "N60.x00" + }, + { + "name": "乳腺化生性癌", + "code": "C50.x01" + }, + { + "name": "乳腺占位", + "code": "N60.x00" + }, + { + "name": "乳腺印戒细胞癌", + "code": "C50.x01" + }, + { + "name": "乳腺叶状肿瘤", + "code": "D24.x00" + }, + { + "name": "乳腺囊性增生", + "code": "N60.x00" + }, + { + "name": "乳腺囊肿", + "code": "N60.x00" + }, + { + "name": "乳腺增生", + "code": "N60.x00" + }, + { + "name": "乳腺增生症", + "code": "N60.x00" + }, + { + "name": "乳腺导管内乳头状瘤", + "code": "D24.x00" + }, + { + "name": "乳腺导管原位癌", + "code": "D05.x00" + }, + { + "name": "乳腺导管扩张症", + "code": "N60.x00" + }, + { + "name": "乳腺小叶原位癌", + "code": "D05.x01" + }, + { + "name": "乳腺小管癌", + "code": "C50.x01" + }, + { + "name": "乳腺恶性肿瘤", + "code": "C50.x00" + }, + { + "name": "乳腺改良根治术后", + "code": "Z90.100" + }, + { + "name": "乳腺术后", + "code": "Z90.100" + }, + { + "name": "乳腺浸润性导管癌", + "code": "C50.x01" + }, + { + "name": "乳腺浸润性导管癌 II 级", + "code": "C50.x01" + }, + { + "name": "乳腺浸润性导管癌 III 级", + "code": "C50.x01" + }, + { + "name": "乳腺浸润性小叶癌", + "code": "C50.x02" + }, + { + "name": "乳腺炎", + "code": "N61.x00" + }, + { + "name": "乳腺癌", + "code": "C50.x00" + }, + { + "name": "乳腺癌术后", + "code": "Z90.100" + }, + { + "name": "乳腺粘液癌", + "code": "C50.x01" + }, + { + "name": "乳腺纤维瘤", + "code": "D24.x00" + }, + { + "name": "乳腺纤维腺瘤", + "code": "D24.x00" + }, + { + "name": "乳腺结节", + "code": "N63.x00" + }, + { + "name": "乳腺肉瘤样癌", + "code": "C50.x05" + }, + { + "name": "乳腺肿物", + "code": "N60.x00" + }, + { + "name": "乳腺脓肿", + "code": "N61.x00" + }, + { + "name": "乳腺腺鳞癌", + "code": "C50.x04" + }, + { + "name": "乳腺髓样癌", + "code": "C50.x01" + }, + { + "name": "乳酸酸中毒", + "code": "E87.200" + }, + { + "name": "二尖瓣关闭不全", + "code": "I34.000" + }, + { + "name": "二尖瓣反流", + "code": "I34.000" + }, + { + "name": "二尖瓣狭窄", + "code": "I34.200" + }, + { + "name": "二尖瓣脱垂", + "code": "I34.100" + }, + { + "name": "代谢性碱中毒", + "code": "E87.300" + }, + { + "name": "代谢性酸中毒", + "code": "E87.200" + }, + { + "name": "代谢综合征", + "code": "E88.800" + }, + { + "name": "休克", + "code": "R57.x00" + }, + { + "name": "伯基特淋巴瘤", + "code": "C83.700" + }, + { + "name": "低中分化腺癌", + "code": "C16.x02" + }, + { + "name": "低位直肠癌", + "code": "C20.x00" + }, + { + "name": "低分化子宫内膜样腺癌", + "code": "C54.103" + }, + { + "name": "低分化浆液性腺癌", + "code": "C56.x03" + }, + { + "name": "低分化癌", + "code": "C16.x09" + }, + { + "name": "低分化腺癌印戒细胞癌", + "code": "C16.x05" + }, + { + "name": "低密度脂蛋白升高", + "code": "E78.x02" + }, + { + "name": "低密度脂蛋白高", + "code": "E78.000" + }, + { + "name": "低氯血症", + "code": "E87.800" + }, + { + "name": "低热", + "code": "R50.800" + }, + { + "name": "低级别腺管状腺瘤", + "code": "D12.x04" + }, + { + "name": "低血压", + "code": "I95.x00" + }, + { + "name": "低血容量性休克", + "code": "R57.100" + }, + { + "name": "低血糖", + "code": "E16.200" + }, + { + "name": "低血糖症", + "code": "E16.200" + }, + { + "name": "低钙血症", + "code": "E83.501" + }, + { + "name": "低钠血症", + "code": "E87.100" + }, + { + "name": "低钾血症", + "code": "E87.600" + }, + { + "name": "体位性低血压", + "code": "I95.100" + }, + { + "name": "体检", + "code": "Z00.000" + }, + { + "name": "体重上升", + "code": "R63.500" + }, + { + "name": "体重上降", + "code": "R63.400" + }, + { + "name": "体重下降", + "code": "R63.400" + }, + { + "name": "体重减轻", + "code": "R63.400" + }, + { + "name": "体重增加", + "code": "R63.500" + }, + { + "name": "体重无明显变化", + "code": "Z71.x00" + }, + { + "name": "体重过低", + "code": "R63.600" + }, + { + "name": "便秘", + "code": "K59.000" + }, + { + "name": "便细", + "code": "R19.704" + }, + { + "name": "便血", + "code": "K92.200" + }, + { + "name": "便频", + "code": "R19.703" + }, + { + "name": "便鲜血", + "code": "K92.200" + }, + { + "name": "倦怠", + "code": "R53.x01" + }, + { + "name": "假性动脉瘤", + "code": "I72.x00" + }, + { + "name": "偏瘫", + "code": "G81.x00" + }, + { + "name": "僵硬", + "code": "R29.100" + }, + { + "name": "充血", + "code": "R23.300" + }, + { + "name": "克罗恩病", + "code": "K50.x00" + }, + { + "name": "免疫治疗", + "code": "Z51.802" + }, + { + "name": "免疫治疗后", + "code": "Z51.800" + }, + { + "name": "免疫组化阳性", + "code": "R97.x00" + }, + { + "name": "入睡困难", + "code": "G47.000" + }, + { + "name": "入院", + "code": "Z76.800" + }, + { + "name": "入院化疗", + "code": "Z51.100" + }, + { + "name": "全子宫两附件宫颈内生浸润性鳞状细胞癌 II 级", + "code": "C53.901" + }, + { + "name": "全子宫切除术后", + "code": "Z90.702" + }, + { + "name": "全胃切除术后", + "code": "Z90.302" + }, + { + "name": "全身无力", + "code": "R53.100" + }, + { + "name": "全身水肿", + "code": "R60.100" + }, + { + "name": "全身淋巴结肿大", + "code": "R59.100" + }, + { + "name": "全身瘙痒", + "code": "L29.900" + }, + { + "name": "全身黄染", + "code": "R17.x00" + }, + { + "name": "共济失调", + "code": "R27.000" + }, + { + "name": "关节疼痛", + "code": "M25.500" + }, + { + "name": "关节痛", + "code": "M25.500" + }, + { + "name": "关节肿胀", + "code": "M25.400" + }, + { + "name": "内分泌治疗", + "code": "Z51.803" + }, + { + "name": "内分泌治疗中", + "code": "Z51.803" + }, + { + "name": "内分泌治疗后", + "code": "Z51.803" + }, + { + "name": "内镜检查异常", + "code": "R93.x05" + }, + { + "name": "冒汗", + "code": "R61.x00" + }, + { + "name": "冠心病", + "code": "I25.100" + }, + { + "name": "冠心病 冠脉支架及起搏器置入术后", + "code": "Z95.500" + }, + { + "name": "冠心病 冠脉支架术后", + "code": "Z95.500" + }, + { + "name": "冠心病冠脉支架及起搏器置入术后高血压", + "code": "I25.100" + }, + { + "name": "冠状动脉四支血管病变", + "code": "I25.x00" + }, + { + "name": "冠状动脉支架植入术后", + "code": "Z95.500" + }, + { + "name": "冠状动脉硬化", + "code": "I25.x00" + }, + { + "name": "冠状动脉粥样硬化", + "code": "I25.000" + }, + { + "name": "冠状动脉粥样硬化性心脏病", + "code": "I25.100" + }, + { + "name": "冠状动脉钙化", + "code": "I25.800" + }, + { + "name": "冠脉支架及起搏器置入术后", + "code": "Z95.500" + }, + { + "name": "冠脉支架术后", + "code": "Z95.500" + }, + { + "name": "冠脉支架置入术后", + "code": "Z95.500" + }, + { + "name": "冰冷", + "code": "R62.x00" + }, + { + "name": "冰凉", + "code": "R23.801" + }, + { + "name": "出汗", + "code": "R61.x00" + }, + { + "name": "出血", + "code": "R58.x00" + }, + { + "name": "出血性胃炎", + "code": "K29.002" + }, + { + "name": "出血点", + "code": "R23.301" + }, + { + "name": "出院", + "code": "Z76.801" + }, + { + "name": "分泌物增多", + "code": "N94.801" + }, + { + "name": "分泌粘液癌", + "code": "C50.x01" + }, + { + "name": "切口愈合良好", + "code": "Z48.000" + }, + { + "name": "切口甲级愈合", + "code": "Z48.001" + }, + { + "name": "刺痛", + "code": "R20.100" + }, + { + "name": "前列腺增生", + "code": "N40.x00" + }, + { + "name": "前列腺增生症", + "code": "N40.x00" + }, + { + "name": "前列腺炎", + "code": "N41.x00" + }, + { + "name": "前列腺特异性抗原升高", + "code": "R97.400" + }, + { + "name": "前列腺癌", + "code": "C61.x00" + }, + { + "name": "前列腺肥大", + "code": "N40.x00" + }, + { + "name": "前列腺腺癌", + "code": "C61.x01" + }, + { + "name": "剧痛", + "code": "R52.x01" + }, + { + "name": "副神经节瘤", + "code": "D35.500" + }, + { + "name": "功能性消化不良", + "code": "K30.x01" + }, + { + "name": "动脉瘘", + "code": "I77.000" + }, + { + "name": "动脉粥样硬化", + "code": "I70.x00" + }, + { + "name": "动静脉瘘", + "code": "I77.000" + }, + { + "name": "包块", + "code": "R22.x00" + }, + { + "name": "化疗", + "code": "Z51.100" + }, + { + "name": "化疗中", + "code": "Z51.100" + }, + { + "name": "化疗前评估", + "code": "Z51.100" + }, + { + "name": "化疗后", + "code": "Z51.100" + }, + { + "name": "十二指肠乳头癌", + "code": "C17.000" + }, + { + "name": "十二指肠乳头部浸润型管状腺癌 II-III 级", + "code": "C17.001" + }, + { + "name": "十二指肠乳头部腺癌", + "code": "C17.001" + }, + { + "name": "十二指肠术后", + "code": "Z90.403" + }, + { + "name": "十二指肠溃疡", + "code": "K26.x00" + }, + { + "name": "十二指肠溃疡 S2 期", + "code": "K26.400" + }, + { + "name": "十二指肠溃疡伴出血", + "code": "K26.001" + }, + { + "name": "十二指肠溃疡伴穿孔", + "code": "K26.101" + }, + { + "name": "十二指肠溃疡愈合期", + "code": "K26.400" + }, + { + "name": "十二指肠溃疡瘢痕期", + "code": "K26.500" + }, + { + "name": "十二指肠溃疡(S2 期)", + "code": "K26.400" + }, + { + "name": "十二指肠炎", + "code": "K29.800" + }, + { + "name": "十二指肠球炎", + "code": "K29.801" + }, + { + "name": "十二指肠球部炎症", + "code": "K29.801" + }, + { + "name": "十二指肠癌", + "code": "C17.000" + }, + { + "name": "十二指肠癌术后", + "code": "Z90.403" + }, + { + "name": "十二指肠腺癌", + "code": "C17.001" + }, + { + "name": "升结肠癌", + "code": "C18.200" + }, + { + "name": "升结肠腺癌", + "code": "C18.201" + }, + { + "name": "午后低热", + "code": "R50.802" + }, + { + "name": "单纯性甲状腺肿", + "code": "E04.000" + }, + { + "name": "单纯性肾囊肿", + "code": "N28.100" + }, + { + "name": "卡波西肉瘤", + "code": "C46.x00" + }, + { + "name": "印戒细胞癌", + "code": "C16.x05" + }, + { + "name": "卵巢中 - 低分化腺癌", + "code": "C56.x02" + }, + { + "name": "卵巢中低分化浆液性乳头状腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢中低分化腺癌", + "code": "C56.x02" + }, + { + "name": "卵巢中分化浆液性乳头状腺癌", + "code": "C56.x02" + }, + { + "name": "卵巢中分化腺癌", + "code": "C56.x02" + }, + { + "name": "卵巢交界性肿瘤", + "code": "D39.100" + }, + { + "name": "卵巢低分化浆液性乳头状腺癌", + "code": "C56.x03" + }, + { + "name": "卵巢低分化腺癌", + "code": "C56.x03" + }, + { + "name": "卵巢低级别浆液性乳头状囊腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢冠囊肿", + "code": "N83.800" + }, + { + "name": "卵巢功能减退", + "code": "E28.300" + }, + { + "name": "卵巢占位", + "code": "N83.800" + }, + { + "name": "卵巢囊性肿瘤", + "code": "D27.x00" + }, + { + "name": "卵巢囊肿", + "code": "N83.200" + }, + { + "name": "卵巢囊腺瘤", + "code": "D27.x00" + }, + { + "name": "卵巢囊腺癌", + "code": "C56.x00" + }, + { + "name": "卵巢增大", + "code": "N83.800" + }, + { + "name": "卵巢巧克力囊肿", + "code": "N80.100" + }, + { + "name": "卵巢恶性上皮性肿瘤", + "code": "C56.x00" + }, + { + "name": "卵巢恶性下皮性肿瘤", + "code": "C56.x00" + }, + { + "name": "卵巢恶性肿瘤", + "code": "C56.x00" + }, + { + "name": "卵巢恶性苗勒氏管混合瘤", + "code": "C55.x03" + }, + { + "name": "卵巢恶性苗勒管混合瘤", + "code": "C56.x06" + }, + { + "name": "卵巢早衰", + "code": "E28.300" + }, + { + "name": "卵巢浆液性乳头状囊腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢浆液性乳头状腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢浆液性乳头状腺癌 IIIC 期", + "code": "C56.x01" + }, + { + "name": "卵巢浆液性囊腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢浆液性腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢浆液性腺癌 IIIC 期", + "code": "C56.x01" + }, + { + "name": "卵巢畸胎瘤", + "code": "D27.x00" + }, + { + "name": "卵巢癌", + "code": "C56.x00" + }, + { + "name": "卵巢癌 IA 期", + "code": "C56.x01" + }, + { + "name": "卵巢癌 IB 期", + "code": "C56.x01" + }, + { + "name": "卵巢癌 IC 期", + "code": "C56.x01" + }, + { + "name": "卵巢癌 IIIC 期", + "code": "C56.x01" + }, + { + "name": "卵巢癌术后", + "code": "Z90.704" + }, + { + "name": "卵巢粘液性囊腺癌", + "code": "C56.x03" + }, + { + "name": "卵巢粘液性囊腺癌 IA 期", + "code": "C56.x03" + }, + { + "name": "卵巢粘液性囊腺癌术后", + "code": "Z90.704" + }, + { + "name": "卵巢粘液性腺癌", + "code": "C56.x05" + }, + { + "name": "卵巢肿物", + "code": "N83.800" + }, + { + "name": "卵巢肿瘤", + "code": "C56.x00" + }, + { + "name": "卵巢腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢良性肿瘤", + "code": "D27.x00" + }, + { + "name": "卵巢转移", + "code": "C79.600" + }, + { + "name": "卵巢转移癌", + "code": "C79.600" + }, + { + "name": "卵巢高分化浆液性乳头状腺癌", + "code": "C56.x04" + }, + { + "name": "卵巢高分化腺癌", + "code": "C56.x04" + }, + { + "name": "卵巢高级别浆液性乳头状囊腺癌", + "code": "C56.x01" + }, + { + "name": "卵巢高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "压痛", + "code": "R10.x06" + }, + { + "name": "厌油", + "code": "R63.002" + }, + { + "name": "厌食", + "code": "R63.001" + }, + { + "name": "原发性肝癌", + "code": "C22.000" + }, + { + "name": "原发性醛固酮增多症", + "code": "E26.x00" + }, + { + "name": "原发性高血压", + "code": "I10.x00" + }, + { + "name": "原醛", + "code": "E26.x00" + }, + { + "name": "双侧乳腺癌", + "code": "C50.x00" + }, + { + "name": "双侧卵巢囊肿", + "code": "N83.200" + }, + { + "name": "双侧卵巢癌", + "code": "C56.x00" + }, + { + "name": "双侧卵巢高级别浆液性乳头状囊腺癌", + "code": "C56.x02" + }, + { + "name": "双肩酸痛", + "code": "M79.104" + }, + { + "name": "双肾囊肿", + "code": "N28.100" + }, + { + "name": "双肾结石", + "code": "N20.000" + }, + { + "name": "反流性食管炎", + "code": "K21.001" + }, + { + "name": "反流性食管炎 A 级", + "code": "K21.002" + }, + { + "name": "反流性食管炎 B 级", + "code": "K21.003" + }, + { + "name": "反流性食管炎 C 级", + "code": "K21.004" + }, + { + "name": "反流性食管炎 D 级", + "code": "K21.005" + }, + { + "name": "反跳痛", + "code": "R10.001" + }, + { + "name": "反酸", + "code": "R13.x00" + }, + { + "name": "发热", + "code": "R50.900" + }, + { + "name": "发绀", + "code": "R23.000" + }, + { + "name": "变异型心绞痛", + "code": "I20.100" + }, + { + "name": "口唇紫绀", + "code": "R23.001" + }, + { + "name": "口干", + "code": "R68.200" + }, + { + "name": "口底癌", + "code": "C04.x00" + }, + { + "name": "口渴", + "code": "R68.200" + }, + { + "name": "口腔溃疡", + "code": "K12.000" + }, + { + "name": "口腔粘膜溃疡", + "code": "K12.000" + }, + { + "name": "右上肺腺癌", + "code": "C34.x01" + }, + { + "name": "右下叶感染", + "code": "J18.x00" + }, + { + "name": "右下肺腺癌", + "code": "C34.x01" + }, + { + "name": "右乳分泌粘液癌", + "code": "C50.x03" + }, + { + "name": "右乳分泌粘液癌印戒细胞癌", + "code": "C50.x03" + }, + { + "name": "右乳腺浸润性导管癌", + "code": "C50.x01" + }, + { + "name": "右乳腺癌", + "code": "C50.x00" + }, + { + "name": "右侧下颌窦炎症或息肉", + "code": "J32.001" + }, + { + "name": "右侧顶叶软化灶", + "code": "G93.000" + }, + { + "name": "右侧顶叶软化灶脑白质脱髓鞘改变脑萎缩", + "code": "G93.000" + }, + { + "name": "右半结肠腺癌", + "code": "C18.x08" + }, + { + "name": "右卵巢囊肿", + "code": "N83.202" + }, + { + "name": "右卵巢癌", + "code": "C56.x00" + }, + { + "name": "右卵巢粘液性囊腺癌", + "code": "C56.x05" + }, + { + "name": "右卵巢粘液性囊腺癌 IA 期术后", + "code": "Z90.704" + }, + { + "name": "右卵巢腺癌", + "code": "C56.x01" + }, + { + "name": "右卵巢高级别浆液性乳头状囊腺癌", + "code": "C56.x02" + }, + { + "name": "右大隐静脉曲张", + "code": "I83.x01" + }, + { + "name": "右束支传导阻滞", + "code": "I45.100" + }, + { + "name": "右肾囊肿", + "code": "N28.102" + }, + { + "name": "右肾小结石", + "code": "N20.000" + }, + { + "name": "右肾积水", + "code": "N13.x00" + }, + { + "name": "右肾结石", + "code": "N20.000" + }, + { + "name": "右附件高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "吞咽困难", + "code": "R13.x00" + }, + { + "name": "听力下降", + "code": "H91.900" + }, + { + "name": "听力减退", + "code": "H91.900" + }, + { + "name": "吻合口炎", + "code": "K91.100" + }, + { + "name": "吻合口狭窄", + "code": "K91.200" + }, + { + "name": "呃逆", + "code": "R06.600" + }, + { + "name": "呕吐", + "code": "R11.x01" + }, + { + "name": "呕吐咖啡色物", + "code": "K92.001" + }, + { + "name": "呕血", + "code": "K92.000" + }, + { + "name": "呛咳", + "code": "R06.800" + }, + { + "name": "周围型肺癌", + "code": "C34.x00" + }, + { + "name": "呼吸困难", + "code": "R06.000" + }, + { + "name": "呼吸急促", + "code": "R06.000" + }, + { + "name": "呼吸性碱中毒", + "code": "E87.202" + }, + { + "name": "呼吸性酸中毒", + "code": "E87.201" + }, + { + "name": "呼吸衰竭", + "code": "J96.x00" + }, + { + "name": "咯血", + "code": "R04.200" + }, + { + "name": "咳嗽", + "code": "R05.x00" + }, + { + "name": "咳痰", + "code": "R09.300" + }, + { + "name": "咳白色泡沫痰", + "code": "R09.302" + }, + { + "name": "咳白色粘痰", + "code": "R09.301" + }, + { + "name": "咳血", + "code": "R04.200" + }, + { + "name": "咳黄", + "code": "R09.303" + }, + { + "name": "咳黄痰", + "code": "R09.303" + }, + { + "name": "咽痒", + "code": "R07.x02" + }, + { + "name": "咽痛", + "code": "R07.x03" + }, + { + "name": "咽部不适", + "code": "R07.x04" + }, + { + "name": "咽部充血", + "code": "R23.301" + }, + { + "name": "哮喘", + "code": "J45.x00" + }, + { + "name": "哮鸣音", + "code": "R09.803" + }, + { + "name": "哽噎感", + "code": "R13.x02" + }, + { + "name": "啰音", + "code": "R09.800" + }, + { + "name": "喉癌", + "code": "C32.x00" + }, + { + "name": "喉鳞状细胞癌", + "code": "C32.x01" + }, + { + "name": "喘息", + "code": "R06.000" + }, + { + "name": "喘累", + "code": "R06.000" + }, + { + "name": "嗜睡", + "code": "R40.000" + }, + { + "name": "嗜铬细胞瘤", + "code": "D35.000" + }, + { + "name": "嗳气", + "code": "R14.x02" + }, + { + "name": "囊性畸胎瘤", + "code": "D27.x00" + }, + { + "name": "四支血管病变", + "code": "I25.x00" + }, + { + "name": "四肢无力", + "code": "R53.100" + }, + { + "name": "四肢瘫", + "code": "G82.500" + }, + { + "name": "回盲部中低分化腺癌", + "code": "C18.002" + }, + { + "name": "回盲部息肉", + "code": "K63.501" + }, + { + "name": "回盲部淋巴瘤术后", + "code": "Z90.800" + }, + { + "name": "回盲部癌", + "code": "C18.000" + }, + { + "name": "回盲部结外粘膜相关淋巴组织边缘区 B 细胞淋巴瘤", + "code": "C85.103" + }, + { + "name": "回盲部腺癌", + "code": "C18.001" + }, + { + "name": "回盲部腺癌中低分化", + "code": "C18.002" + }, + { + "name": "回肠癌", + "code": "C17.200" + }, + { + "name": "回肠腺癌", + "code": "C17.201" + }, + { + "name": "坏死", + "code": "R02.x00" + }, + { + "name": "坏疽", + "code": "R02.x00" + }, + { + "name": "坠胀感", + "code": "R19.801" + }, + { + "name": "垂体瘤", + "code": "D35.200" + }, + { + "name": "垂体腺瘤", + "code": "D35.200" + }, + { + "name": "增强 CT 异常", + "code": "R93.x02" + }, + { + "name": "增强 CT 示肿瘤", + "code": "R93.x02" + }, + { + "name": "增生", + "code": "M89.800" + }, + { + "name": "增生性息肉", + "code": "K62.101" + }, + { + "name": "墨菲征阳性", + "code": "R10.800" + }, + { + "name": "墨菲氏征阳性", + "code": "R19.800" + }, + { + "name": "声嘶", + "code": "R49.000" + }, + { + "name": "声音嘶哑", + "code": "R49.000" + }, + { + "name": "壶腹周围癌", + "code": "C24.100" + }, + { + "name": "壶腹癌", + "code": "C24.100" + }, + { + "name": "壶腹部鳞状细胞癌", + "code": "C24.100" + }, + { + "name": "壶腹部鳞状细胞癌低度分化", + "code": "C24.101" + }, + { + "name": "壶腹鳞状细胞癌", + "code": "C24.100" + }, + { + "name": "复发性口腔溃疡", + "code": "K12.001" + }, + { + "name": "复查", + "code": "Z09.x01" + }, + { + "name": "外周 T 细胞淋巴瘤", + "code": "C85.500" + }, + { + "name": "外阴瘙痒", + "code": "L29.000" + }, + { + "name": "外骶管囊肿", + "code": "G96.100" + }, + { + "name": "多器官功能衰竭", + "code": "R68.800" + }, + { + "name": "多囊卵巢", + "code": "E28.200" + }, + { + "name": "多囊卵巢综合征", + "code": "E28.200" + }, + { + "name": "多囊肝", + "code": "Q44.600" + }, + { + "name": "多囊肾", + "code": "Q61.x00" + }, + { + "name": "多尿", + "code": "R35.x00" + }, + { + "name": "多支血管病变", + "code": "I25.x00" + }, + { + "name": "多梦", + "code": "F51.100" + }, + { + "name": "多梦易醒", + "code": "G47.800" + }, + { + "name": "多汗", + "code": "R61.x00" + }, + { + "name": "多食", + "code": "R63.200" + }, + { + "name": "多饮", + "code": "R63.100" + }, + { + "name": "夜尿增多", + "code": "R35.100" + }, + { + "name": "夜尿次数增多", + "code": "R35.100" + }, + { + "name": "夜间阵发性呼吸困难", + "code": "R06.001" + }, + { + "name": "大便不成形", + "code": "R19.700" + }, + { + "name": "大便变细", + "code": "R19.704" + }, + { + "name": "大便带血", + "code": "K92.200" + }, + { + "name": "大便带鲜血", + "code": "K92.200" + }, + { + "name": "大便干燥", + "code": "K59.000" + }, + { + "name": "大便干结", + "code": "K59.000" + }, + { + "name": "大便性状改变", + "code": "R19.705" + }, + { + "name": "大便时干时稀", + "code": "R19.706" + }, + { + "name": "大便未解", + "code": "K59.001" + }, + { + "name": "大便次数增多", + "code": "R19.703" + }, + { + "name": "大便次数多", + "code": "R19.703" + }, + { + "name": "大便溏", + "code": "R19.700" + }, + { + "name": "大便潜血阳性", + "code": "R19.500" + }, + { + "name": "大便结燥", + "code": "K59.000" + }, + { + "name": "大动脉炎", + "code": "M31.500" + }, + { + "name": "大汗", + "code": "R61.000" + }, + { + "name": "大细胞神经内分泌癌", + "code": "C7A.005" + }, + { + "name": "大网膜纤维脂肪组织内浸润的低分化腺癌", + "code": "C78.600" + }, + { + "name": "大网膜转移癌", + "code": "C78.600" + }, + { + "name": "大肠多发息肉", + "code": "K63.500" + }, + { + "name": "大肠息肉", + "code": "K63.500" + }, + { + "name": "大肠溃疡型管状腺癌 II 级", + "code": "C18.x02" + }, + { + "name": "大肠癌", + "code": "C18.x00" + }, + { + "name": "大肠腺癌", + "code": "C18.x01" + }, + { + "name": "大部分为筛状粉刺型腺癌", + "code": "C16.x09" + }, + { + "name": "大隐静脉曲张", + "code": "I83.x01" + }, + { + "name": "失声", + "code": "R49.001" + }, + { + "name": "失眠", + "code": "F51.000" + }, + { + "name": "失血性休克", + "code": "R57.100" + }, + { + "name": "失血性贫血", + "code": "D62.x00" + }, + { + "name": "失语", + "code": "R47.000" + }, + { + "name": "头昏", + "code": "R42.x00" + }, + { + "name": "头昏痛", + "code": "R51.x00" + }, + { + "name": "头晕", + "code": "R42.x00" + }, + { + "name": "头疼", + "code": "R51.x00" + }, + { + "name": "头痛", + "code": "R51.x00" + }, + { + "name": "套细胞淋巴瘤", + "code": "C83.100" + }, + { + "name": "妊娠", + "code": "Z33.x00" + }, + { + "name": "妊娠期糖尿病", + "code": "O24.x00" + }, + { + "name": "姑息治疗", + "code": "Z51.500" + }, + { + "name": "子宫体癌", + "code": "C54.x00" + }, + { + "name": "子宫内膜增生", + "code": "N85.000" + }, + { + "name": "子宫内膜复杂性增生", + "code": "N85.000" + }, + { + "name": "子宫内膜异位症", + "code": "N80.x00" + }, + { + "name": "子宫内膜息肉", + "code": "N84.000" + }, + { + "name": "子宫内膜样腺癌", + "code": "C54.100" + }, + { + "name": "子宫内膜病变术后", + "code": "Z90.701" + }, + { + "name": "子宫内膜癌", + "code": "C54.x00" + }, + { + "name": "子宫内膜癌肉瘤", + "code": "C55.x03" + }, + { + "name": "子宫内膜间质肉瘤", + "code": "C55.x02" + }, + { + "name": "子宫多发肌瘤", + "code": "D25.x00" + }, + { + "name": "子宫平滑肌瘤", + "code": "D25.x00" + }, + { + "name": "子宫平滑肌肉瘤", + "code": "C55.x01" + }, + { + "name": "子宫恶性苗勒氏管混合瘤", + "code": "C54.200" + }, + { + "name": "子宫恶性苗勒氏管混合瘤 IIIA 期", + "code": "C54.200" + }, + { + "name": "子宫恶性苗勒管混合瘤", + "code": "C55.x03" + }, + { + "name": "子宫恶性苗勒管混合瘤 IIIA 期", + "code": "C55.x03" + }, + { + "name": "子宫癌肉瘤", + "code": "C55.x03" + }, + { + "name": "子宫肉瘤", + "code": "C55.x00" + }, + { + "name": "子宫肌瘤", + "code": "D25.x00" + }, + { + "name": "子宫肌间多发性平滑肌瘤", + "code": "D25.100" + }, + { + "name": "子宫腺肌症", + "code": "N80.000" + }, + { + "name": "子宫颈内生浸润型中分化粘液腺癌", + "code": "C53.101" + }, + { + "name": "子宫颈癌", + "code": "C53.x00" + }, + { + "name": "完全性肠梗阻", + "code": "K56.x02" + }, + { + "name": "定向力障碍", + "code": "R41.100" + }, + { + "name": "定期复查", + "code": "Z09.x01" + }, + { + "name": "室上性心动过速", + "code": "I47.100" + }, + { + "name": "室性心动过速", + "code": "I47.200" + }, + { + "name": "室性早搏", + "code": "I49.300" + }, + { + "name": "室速", + "code": "I47.200" + }, + { + "name": "室颤", + "code": "I46.x00" + }, + { + "name": "宫体肌间多发平滑肌瘤", + "code": "D25.100" + }, + { + "name": "宫体肌间平滑肌瘤", + "code": "D25.100" + }, + { + "name": "宫外孕", + "code": "O00.x00" + }, + { + "name": "宫颈 CIN", + "code": "D06.x00" + }, + { + "name": "宫颈 CINIII 级", + "code": "D06.900" + }, + { + "name": "宫颈上皮内瘤变", + "code": "D06.x00" + }, + { + "name": "宫颈中分化腺癌", + "code": "C53.101" + }, + { + "name": "宫颈中分化鳞状细胞癌", + "code": "C53.902" + }, + { + "name": "宫颈低分化腺癌", + "code": "C53.102" + }, + { + "name": "宫颈低分化鳞状细胞癌", + "code": "C53.903" + }, + { + "name": "宫颈低级别上皮内瘤变", + "code": "N87.000" + }, + { + "name": "宫颈内生浸润性鳞状细胞癌 II 级", + "code": "C53.901" + }, + { + "name": "宫颈内膜异位症", + "code": "N80.x00" + }, + { + "name": "宫颈内膜腺癌", + "code": "C53.100" + }, + { + "name": "宫颈占位", + "code": "N86.x00" + }, + { + "name": "宫颈原位癌", + "code": "D06.900" + }, + { + "name": "宫颈囊肿", + "code": "N88.800" + }, + { + "name": "宫颈平滑肌瘤", + "code": "D26.x00" + }, + { + "name": "宫颈息肉", + "code": "N84.000" + }, + { + "name": "宫颈息肉术后", + "code": "Z90.700" + }, + { + "name": "宫颈恶性肿瘤", + "code": "C53.900" + }, + { + "name": "宫颈接触性出血", + "code": "N86.x00" + }, + { + "name": "宫颈浸润型鳞状细胞癌", + "code": "C53.901" + }, + { + "name": "宫颈浸润型鳞状细胞癌 II 级", + "code": "C53.901" + }, + { + "name": "宫颈炎", + "code": "M74.600" + }, + { + "name": "宫颈癌", + "code": "C53.x00" + }, + { + "name": "宫颈癌术后", + "code": "Z90.700" + }, + { + "name": "宫颈癌术后化疗", + "code": "Z51.100" + }, + { + "name": "宫颈癌术后放疗", + "code": "Z51.000" + }, + { + "name": "宫颈癌根治术后", + "code": "Z90.700" + }, + { + "name": "宫颈糜烂", + "code": "N86.x00" + }, + { + "name": "宫颈纳囊", + "code": "N88.800" + }, + { + "name": "宫颈纳氏囊肿", + "code": "N88.800" + }, + { + "name": "宫颈肥大", + "code": "N88.800" + }, + { + "name": "宫颈肿物", + "code": "N86.x00" + }, + { + "name": "宫颈肿瘤", + "code": "D26.x00" + }, + { + "name": "宫颈腺癌", + "code": "C53.100" + }, + { + "name": "宫颈腺癌 (IB1 期,II 级)", + "code": "C53.x01" + }, + { + "name": "宫颈腺癌 IB1 期", + "code": "C53.100" + }, + { + "name": "宫颈腺癌 IB1 期 II 级", + "code": "C53.100" + }, + { + "name": "宫颈腺癌 IB1 期 II 级术后", + "code": "Z90.700" + }, + { + "name": "宫颈腺癌 II 级", + "code": "C53.100" + }, + { + "name": "宫颈腺癌术后", + "code": "Z90.700" + }, + { + "name": "宫颈良性肿瘤", + "code": "D26.x00" + }, + { + "name": "宫颈锥切术后", + "code": "Z90.700" + }, + { + "name": "宫颈高分化鳞状细胞癌", + "code": "C53.904" + }, + { + "name": "宫颈高级别上皮内瘤变", + "code": "N87.100" + }, + { + "name": "宫颈鳞状上皮内病变", + "code": "N87.x00" + }, + { + "name": "宫颈鳞状细胞癌", + "code": "C53.901" + }, + { + "name": "宫颈鳞状细胞癌 II 级", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌", + "code": "C53.900" + }, + { + "name": "宫颈鳞癌 IB1 期", + "code": "C53.900" + }, + { + "name": "宫颈鳞癌 IB1 期 II 级", + "code": "C53.900" + }, + { + "name": "宫颈鳞癌 IB1 期 II 级术后", + "code": "Z90.700" + }, + { + "name": "宫颈鳞癌 IB1 期术后", + "code": "Z90.700" + }, + { + "name": "宫颈鳞癌 IB1 期术后", + "code": "Z90.700" + }, + { + "name": "宫颈鳞癌 IB2 期", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌 II 级", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌 IIA 期", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌 IIB 期", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌 IIIA 期", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌 IIIB 期", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌 IV 期", + "code": "C53.901" + }, + { + "name": "宫颈鳞癌术后", + "code": "Z90.700" + }, + { + "name": "宫颈鳞癌(IB1 期,II 级)", + "code": "C53.901" + }, + { + "name": "寒战", + "code": "R50.902" + }, + { + "name": "对症支持治疗", + "code": "Z51.805" + }, + { + "name": "小便偏少", + "code": "R34.x00" + }, + { + "name": "小便色偏黄", + "code": "R82.x00" + }, + { + "name": "小便色黄", + "code": "R82.x00" + }, + { + "name": "小便量偏少", + "code": "R34.x00" + }, + { + "name": "小便量减少", + "code": "R34.x00" + }, + { + "name": "小便量少", + "code": "R34.x00" + }, + { + "name": "小便量约少", + "code": "R34.x00" + }, + { + "name": "小便黄染", + "code": "R82.x00" + }, + { + "name": "小细胞神经内分泌癌", + "code": "C7A.004" + }, + { + "name": "小细胞肺癌", + "code": "C34.x03" + }, + { + "name": "小肠癌", + "code": "C17.x00" + }, + { + "name": "小肠腺癌", + "code": "C17.x01" + }, + { + "name": "少尿", + "code": "R34.x00" + }, + { + "name": "尘肺", + "code": "J62.x00" + }, + { + "name": "尿后余沥", + "code": "R39.800" + }, + { + "name": "尿失禁", + "code": "R32.x00" + }, + { + "name": "尿少", + "code": "R34.x00" + }, + { + "name": "尿崩症", + "code": "E23.200" + }, + { + "name": "尿急", + "code": "R35.100" + }, + { + "name": "尿毒症", + "code": "N19.x04" + }, + { + "name": "尿潴留", + "code": "R33.x00" + }, + { + "name": "尿痛", + "code": "R30.x00" + }, + { + "name": "尿素氮升高", + "code": "R79.802" + }, + { + "name": "尿色深黄", + "code": "R82.x01" + }, + { + "name": "尿色黄", + "code": "R82.x00" + }, + { + "name": "尿路上皮癌", + "code": "C67.x01" + }, + { + "name": "尿路刺激征", + "code": "R39.x00" + }, + { + "name": "尿路感染", + "code": "N39.000" + }, + { + "name": "尿道炎", + "code": "N34.x00" + }, + { + "name": "尿酸升高", + "code": "E79.000" + }, + { + "name": "尿酸高", + "code": "E79.000" + }, + { + "name": "尿频", + "code": "R35.000" + }, + { + "name": "尿黄", + "code": "R82.x00" + }, + { + "name": "局部淋巴结肿大", + "code": "R59.000" + }, + { + "name": "局部瘙痒", + "code": "L29.800" + }, + { + "name": "局部红肿", + "code": "R23.301" + }, + { + "name": "左上肺腺癌", + "code": "C34.x01" + }, + { + "name": "左下叶感染", + "code": "J98.400" + }, + { + "name": "左下肺腺癌", + "code": "C34.x01" + }, + { + "name": "左乳腺癌", + "code": "C50.x00" + }, + { + "name": "左半结肠大肠回盲部结外粘膜相关淋巴组织边缘区 B 细胞淋巴瘤", + "code": "C85.103" + }, + { + "name": "左半结肠腺癌", + "code": "C18.x07" + }, + { + "name": "左卵巢中低分化浆液性乳头状腺癌", + "code": "C56.x04" + }, + { + "name": "左卵巢囊肿", + "code": "N83.201" + }, + { + "name": "左卵巢浆液性乳头状囊腺癌", + "code": "C56.x01" + }, + { + "name": "左卵巢浆液性乳头状腺癌", + "code": "C56.x01" + }, + { + "name": "左卵巢癌", + "code": "C56.x00" + }, + { + "name": "左卵巢腺癌", + "code": "C56.x01" + }, + { + "name": "左卵巢高级别浆液性乳头状囊腺癌", + "code": "C56.x02" + }, + { + "name": "左束支传导阻滞", + "code": "I45.100" + }, + { + "name": "左肾囊肿", + "code": "N28.101" + }, + { + "name": "左肾小结石", + "code": "N20.000" + }, + { + "name": "左肾积水", + "code": "N13.x00" + }, + { + "name": "左肾结石", + "code": "N20.000" + }, + { + "name": "巧克力囊肿", + "code": "N80.100" + }, + { + "name": "巨大胃黏膜肥厚症", + "code": "K29.601" + }, + { + "name": "巩膜黄染", + "code": "R17.x02" + }, + { + "name": "巴雷特食管", + "code": "K22.700" + }, + { + "name": "帕金森病", + "code": "G20.x00" + }, + { + "name": "干啰音", + "code": "R09.802" + }, + { + "name": "平滑肌肉瘤", + "code": "C49.x02" + }, + { + "name": "平衡障碍", + "code": "R27.x00" + }, + { + "name": "幽门梗阻", + "code": "K31.100" + }, + { + "name": "幽门狭窄", + "code": "K31.100" + }, + { + "name": "库欣综合征", + "code": "E24.x00" + }, + { + "name": "康复治疗", + "code": "Z50.x00" + }, + { + "name": "异位妊娠", + "code": "O00.x00" + }, + { + "name": "弥散性血管内凝血", + "code": "D65.x00" + }, + { + "name": "弥漫大 B 细胞淋巴瘤", + "code": "C85.101" + }, + { + "name": "强直", + "code": "R29.100" + }, + { + "name": "律齐", + "code": "R00.x01" + }, + { + "name": "心力衰竭", + "code": "I50.x00" + }, + { + "name": "心功能不全", + "code": "I50.900" + }, + { + "name": "心功能不全 I 级", + "code": "I50.900" + }, + { + "name": "心功能不全 II 级", + "code": "I50.900" + }, + { + "name": "心功能不全 III 级", + "code": "I50.900" + }, + { + "name": "心功能不全 IV 级", + "code": "I50.900" + }, + { + "name": "心动过缓", + "code": "R00.100" + }, + { + "name": "心动过速", + "code": "R00.000" + }, + { + "name": "心包囊肿", + "code": "Q34.800" + }, + { + "name": "心包积液", + "code": "I31.300" + }, + { + "name": "心室颤动", + "code": "I46.x00" + }, + { + "name": "心律不齐", + "code": "R00.100" + }, + { + "name": "心律失常", + "code": "I49.x00" + }, + { + "name": "心律失常 心房纤颤", + "code": "I48.x00" + }, + { + "name": "心律失常心房纤颤伴 II°房室传导阻滞 2.原发性高血压", + "code": "I48.x01" + }, + { + "name": "心律齐", + "code": "R00.x01" + }, + { + "name": "心悸", + "code": "R00.200" + }, + { + "name": "心悸心慌", + "code": "R00.200" + }, + { + "name": "心慌", + "code": "R00.200" + }, + { + "name": "心房纤颤", + "code": "I48.x00" + }, + { + "name": "心房纤颤伴 II°房室传导阻滞", + "code": "I48.x01" + }, + { + "name": "心房纤颤伴 II°房室传导阻滞 2.原发性高血压", + "code": "I48.x01" + }, + { + "name": "心房颤动", + "code": "I48.x00" + }, + { + "name": "心源性休克", + "code": "R57.000" + }, + { + "name": "心电图异常", + "code": "R94.300" + }, + { + "name": "心累", + "code": "R00.200" + }, + { + "name": "心累气促", + "code": "R06.000" + }, + { + "name": "心累气促活动后加重伴颜面及两上肢水肿", + "code": "R06.000" + }, + { + "name": "心绞痛", + "code": "I20.x00" + }, + { + "name": "心肌供血不足", + "code": "I25.600" + }, + { + "name": "心肌梗死", + "code": "I21.x00" + }, + { + "name": "心肌梗死后", + "code": "I25.200" + }, + { + "name": "心肌炎", + "code": "I40.x00" + }, + { + "name": "心肌病", + "code": "I42.x00" + }, + { + "name": "心肌缺血", + "code": "I25.600" + }, + { + "name": "心肌缺血改变", + "code": "I25.600" + }, + { + "name": "心脏供血不足", + "code": "I25.600" + }, + { + "name": "心脏停搏", + "code": "I46.x00" + }, + { + "name": "心脏杂音", + "code": "R01.x00" + }, + { + "name": "心脏瓣膜病", + "code": "I37.x00" + }, + { + "name": "心脏起搏器置入术后", + "code": "Z95.000" + }, + { + "name": "心脏骤停", + "code": "I46.x00" + }, + { + "name": "心音低钝", + "code": "R00.801" + }, + { + "name": "心音遥远", + "code": "R00.802" + }, + { + "name": "怒张", + "code": "R23.400" + }, + { + "name": "怕冷", + "code": "R50.901" + }, + { + "name": "急性 ST 段抬高型心肌梗死", + "code": "I21.x00" + }, + { + "name": "急性下壁心肌梗死", + "code": "I21.x00" + }, + { + "name": "急性乳腺炎", + "code": "N61.x00" + }, + { + "name": "急性前壁心肌梗死", + "code": "I21.x00" + }, + { + "name": "急性十二指肠溃疡", + "code": "K26.000" + }, + { + "name": "急性单纯性阑尾炎", + "code": "K35.200" + }, + { + "name": "急性宫颈炎", + "code": "N72.x00" + }, + { + "name": "急性左心衰竭", + "code": "I50.100" + }, + { + "name": "急性心力衰竭", + "code": "I50.100" + }, + { + "name": "急性心肌梗死", + "code": "I21.x01" + }, + { + "name": "急性疼痛", + "code": "G89.100" + }, + { + "name": "急性肾功能不全", + "code": "N19.x02" + }, + { + "name": "急性胃溃疡", + "code": "K25.000" + }, + { + "name": "急性胃炎", + "code": "K29.000" + }, + { + "name": "急性胆囊炎", + "code": "K81.000" + }, + { + "name": "急性胆管炎", + "code": "K83.000" + }, + { + "name": "急性胰腺炎", + "code": "K85.x01" + }, + { + "name": "急性脑梗死", + "code": "I63.x01" + }, + { + "name": "急性阑尾炎", + "code": "K35.x00" + }, + { + "name": "急性非 ST 段抬高型心肌梗死", + "code": "I21.400" + }, + { + "name": "急诊", + "code": "R99.x00" + }, + { + "name": "恶心", + "code": "R11.x00" + }, + { + "name": "恶性心包积液", + "code": "C78.800" + }, + { + "name": "恶性胃肠道间质瘤", + "code": "C49.x07" + }, + { + "name": "恶性胸腔积液", + "code": "C78.000" + }, + { + "name": "恶性胸膜间皮瘤", + "code": "C45.x00" + }, + { + "name": "恶性腹水", + "code": "C78.600" + }, + { + "name": "恶性苗勒氏管混合瘤", + "code": "C54.200" + }, + { + "name": "恶性苗勒管混合瘤", + "code": "C55.x03" + }, + { + "name": "恶病质", + "code": "R64.x00" + }, + { + "name": "情绪不稳", + "code": "R45.600" + }, + { + "name": "情绪低落", + "code": "F32.x00" + }, + { + "name": "惊厥", + "code": "R56.800" + }, + { + "name": "意识障碍", + "code": "R41.000" + }, + { + "name": "感冒", + "code": "J00.x00" + }, + { + "name": "感染性休克", + "code": "R57.800" + }, + { + "name": "感染性休克 代偿期", + "code": "R57.800" + }, + { + "name": "感染性休克代偿期", + "code": "R57.800" + }, + { + "name": "慢性丙型病毒性肝炎", + "code": "B18.200" + }, + { + "name": "慢性乙型病毒性肝炎", + "code": "B18.100" + }, + { + "name": "慢性乳腺炎", + "code": "N61.x00" + }, + { + "name": "慢性十二指肠溃疡", + "code": "K26.100" + }, + { + "name": "慢性宫颈炎", + "code": "M74.600" + }, + { + "name": "慢性心力衰竭", + "code": "I50.900" + }, + { + "name": "慢性心功能不全", + "code": "I50.x00" + }, + { + "name": "慢性支气管", + "code": "J42.x00" + }, + { + "name": "慢性支气管炎", + "code": "J42.x00" + }, + { + "name": "慢性浅表性胃炎", + "code": "K29.302" + }, + { + "name": "慢性疼痛", + "code": "G89.400" + }, + { + "name": "慢性肝炎", + "code": "K73.x01" + }, + { + "name": "慢性肺源性心脏病", + "code": "I27.900" + }, + { + "name": "慢性肾功能不全", + "code": "N19.x01" + }, + { + "name": "慢性肾脏病", + "code": "N18.x00" + }, + { + "name": "慢性肾脏病 5 期", + "code": "N18.500" + }, + { + "name": "慢性肾脏病 5 期肾性贫血", + "code": "N18.500" + }, + { + "name": "慢性胃溃疡", + "code": "K25.100" + }, + { + "name": "慢性胃炎", + "code": "K29.300" + }, + { + "name": "慢性胆囊炎", + "code": "K81.100" + }, + { + "name": "慢性胆管炎", + "code": "K83.000" + }, + { + "name": "慢性胰腺炎", + "code": "K86.100" + }, + { + "name": "慢性胰腺炎急性发作", + "code": "K86.101" + }, + { + "name": "慢性膀胱炎", + "code": "N30.200" + }, + { + "name": "慢性膀胱炎膀胱憩室", + "code": "N30.200" + }, + { + "name": "慢性萎缩性胃炎", + "code": "K29.400" + }, + { + "name": "慢性阑尾炎", + "code": "K36.x00" + }, + { + "name": "慢性阻塞性肺疾病", + "code": "J44.x00" + }, + { + "name": "慢性非萎缩性胃炎", + "code": "K29.301" + }, + { + "name": "慢支炎", + "code": "J42.x00" + }, + { + "name": "慢阻肺", + "code": "J44.x00" + }, + { + "name": "憋气", + "code": "R06.800" + }, + { + "name": "截瘫", + "code": "G82.x00" + }, + { + "name": "房室传导阻滞", + "code": "I44.x00" + }, + { + "name": "房性早搏", + "code": "I49.100" + }, + { + "name": "房颤", + "code": "I48.x00" + }, + { + "name": "房颤伴 II°房室传导阻滞", + "code": "I48.x00" + }, + { + "name": "手术后状态", + "code": "Z98.800" + }, + { + "name": "手术治疗", + "code": "Z51.800" + }, + { + "name": "手脚冰凉", + "code": "R23.801" + }, + { + "name": "手脚麻木", + "code": "R20.201" + }, + { + "name": "打嗝", + "code": "R06.600" + }, + { + "name": "扩张型心肌病", + "code": "I42.000" + }, + { + "name": "抑郁", + "code": "F32.x00" + }, + { + "name": "抑郁状态", + "code": "F32.x00" + }, + { + "name": "抗利尿激素分泌不当综合征", + "code": "E22.200" + }, + { + "name": "抗感染治疗", + "code": "Z51.804" + }, + { + "name": "抽搐", + "code": "R56.800" + }, + { + "name": "拟行化疗", + "code": "Z51.100" + }, + { + "name": "持续性疼痛", + "code": "R52.x03" + }, + { + "name": "排便次数增多", + "code": "R19.703" + }, + { + "name": "排尿困难", + "code": "R39.100" + }, + { + "name": "排血便", + "code": "K92.200" + }, + { + "name": "排黑便", + "code": "K92.100" + }, + { + "name": "搏动", + "code": "R00.x00" + }, + { + "name": "搏动减弱", + "code": "R00.800" + }, + { + "name": "支气管哮喘", + "code": "J45.x00" + }, + { + "name": "支气管囊肿", + "code": "J39.800" + }, + { + "name": "支气管扩张", + "code": "J47.x00" + }, + { + "name": "支气管炎", + "code": "J40.x00" + }, + { + "name": "支气管肺炎", + "code": "J18.000" + }, + { + "name": "支气管镜检查异常", + "code": "R93.x08" + }, + { + "name": "放射治疗", + "code": "Z51.000" + }, + { + "name": "放疗", + "code": "Z51.000" + }, + { + "name": "放疗中", + "code": "Z51.000" + }, + { + "name": "放疗后", + "code": "Z51.000" + }, + { + "name": "斑丘疹", + "code": "R21.x01" + }, + { + "name": "新辅助化疗后", + "code": "Z51.103" + }, + { + "name": "无力", + "code": "R53.100" + }, + { + "name": "无尿", + "code": "R34.x01" + }, + { + "name": "早搏", + "code": "I49.x00" + }, + { + "name": "早醒", + "code": "G47.001" + }, + { + "name": "时干时稀", + "code": "R19.706" + }, + { + "name": "昏睡", + "code": "R40.100" + }, + { + "name": "昏迷", + "code": "R40.200" + }, + { + "name": "易怒", + "code": "R45.400" + }, + { + "name": "易醒", + "code": "G47.800" + }, + { + "name": "易饥", + "code": "R63.200" + }, + { + "name": "晕厥", + "code": "R55.x00" + }, + { + "name": "暴躁", + "code": "R45.500" + }, + { + "name": "曲张", + "code": "I83.x00" + }, + { + "name": "月经异常", + "code": "N92.x00" + }, + { + "name": "月经紊乱", + "code": "N92.x00" + }, + { + "name": "期前收缩", + "code": "I49.x00" + }, + { + "name": "未分化癌", + "code": "C80.x00" + }, + { + "name": "未分化癌及黏液腺癌", + "code": "C16.x08" + }, + { + "name": "末端回肠粘连狭窄", + "code": "K56.500" + }, + { + "name": "术后", + "code": "Z98.800" + }, + { + "name": "术后复查", + "code": "Z09.x01" + }, + { + "name": "术后疼痛", + "code": "G89.200" + }, + { + "name": "杂音", + "code": "R01.x00" + }, + { + "name": "束支传导阻滞", + "code": "I45.x00" + }, + { + "name": "板状腹", + "code": "R10.002" + }, + { + "name": "构音障碍", + "code": "R47.100" + }, + { + "name": "柏油样便", + "code": "K92.100" + }, + { + "name": "查体", + "code": "Z00.000" + }, + { + "name": "根治术后", + "code": "Z90.x00" + }, + { + "name": "桥本甲状腺炎", + "code": "E06.300" + }, + { + "name": "梗阻性黄疸", + "code": "K83.100" + }, + { + "name": "椎基底动脉供血不足", + "code": "G46.x01" + }, + { + "name": "横纹肌肉瘤", + "code": "C49.x01" + }, + { + "name": "横结肠癌", + "code": "C18.400" + }, + { + "name": "横结肠肠管状腺瘤", + "code": "D12.x01" + }, + { + "name": "横结肠腺癌", + "code": "C18.401" + }, + { + "name": "步态异常", + "code": "R26.x00" + }, + { + "name": "死亡", + "code": "R99.x00" + }, + { + "name": "残胃癌", + "code": "C16.x00" + }, + { + "name": "残胃腺癌", + "code": "C16.x01" + }, + { + "name": "毛发脱落", + "code": "L65.900" + }, + { + "name": "气促", + "code": "R06.800" + }, + { + "name": "气促不适", + "code": "R06.800" + }, + { + "name": "气促加重", + "code": "R06.800" + }, + { + "name": "气促明显", + "code": "R06.800" + }, + { + "name": "气喘", + "code": "R06.000" + }, + { + "name": "气短", + "code": "R06.800" + }, + { + "name": "气胸", + "code": "J93.x00" + }, + { + "name": "气过水声", + "code": "R19.800" + }, + { + "name": "水肿", + "code": "R60.x00" + }, + { + "name": "水肿增厚", + "code": "R60.x00" + }, + { + "name": "治愈", + "code": "Z71.x05" + }, + { + "name": "泌乳素瘤", + "code": "D35.200" + }, + { + "name": "泛酸", + "code": "R13.x00" + }, + { + "name": "活动受限", + "code": "R29.x00" + }, + { + "name": "活动后气促", + "code": "R06.801" + }, + { + "name": "流产", + "code": "O03.x00" + }, + { + "name": "流涕", + "code": "R09.800" + }, + { + "name": "流血", + "code": "R58.x00" + }, + { + "name": "浅表淋巴结肿大", + "code": "R59.000" + }, + { + "name": "浅表血管曲张", + "code": "I83.x03" + }, + { + "name": "浆液性囊腺癌", + "code": "C56.x01" + }, + { + "name": "浆细胞性乳腺炎", + "code": "N61.x00" + }, + { + "name": "浮肿", + "code": "R60.x00" + }, + { + "name": "消化不良", + "code": "K30.x00" + }, + { + "name": "消化性溃疡", + "code": "K27.x00" + }, + { + "name": "消化性溃疡伴出血", + "code": "K27.000" + }, + { + "name": "消化性溃疡伴穿孔", + "code": "K27.100" + }, + { + "name": "消化道出血", + "code": "K92.200" + }, + { + "name": "消瘦", + "code": "R63.400" + }, + { + "name": "液波震颤", + "code": "R18.x02" + }, + { + "name": "淋巴母细胞淋巴瘤", + "code": "C86.x00" + }, + { + "name": "淋巴瘤", + "code": "C85.900" + }, + { + "name": "淋巴瘤术后", + "code": "Z90.801" + }, + { + "name": "淋巴组织增生", + "code": "R59.000" + }, + { + "name": "淋巴细胞计数降低", + "code": "D72.802" + }, + { + "name": "淋巴结增生", + "code": "R59.000" + }, + { + "name": "淋巴结淋巴组织增生", + "code": "R59.000" + }, + { + "name": "淋巴结肿大", + "code": "R59.x00" + }, + { + "name": "淋巴结转移", + "code": "C77.x00" + }, + { + "name": "淋巴结转移癌", + "code": "C77.x00" + }, + { + "name": "深部脓肿", + "code": "L02.x01" + }, + { + "name": "深静脉血栓", + "code": "I82.x00" + }, + { + "name": "深静脉血栓形成", + "code": "I82.x00" + }, + { + "name": "混合型腺神经内分泌癌", + "code": "C16.x17" + }, + { + "name": "混合性高脂血症", + "code": "E78.200" + }, + { + "name": "渗出", + "code": "R23.800" + }, + { + "name": "渗液", + "code": "R23.800" + }, + { + "name": "渗血", + "code": "R58.x01" + }, + { + "name": "湿啰音", + "code": "R09.801" + }, + { + "name": "溃烂", + "code": "L97.x00" + }, + { + "name": "溃疡", + "code": "L97.x00" + }, + { + "name": "溃疡型乳头状 - 管状腺癌 II 级", + "code": "C16.x01" + }, + { + "name": "溃疡型乳头状管状腺癌 II 级", + "code": "C16.x01" + }, + { + "name": "溃疡型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "溃疡性结肠炎", + "code": "K51.x00" + }, + { + "name": "滑膜肉瘤", + "code": "C49.x05" + }, + { + "name": "滤泡性淋巴瘤", + "code": "C82.x00" + }, + { + "name": "潮热", + "code": "R61.000" + }, + { + "name": "灼热", + "code": "R23.802" + }, + { + "name": "炎性息肉", + "code": "K62.103" + }, + { + "name": "炎性肉芽肿", + "code": "L92.900" + }, + { + "name": "烦躁", + "code": "R45.100" + }, + { + "name": "烦躁不安", + "code": "R45.100" + }, + { + "name": "烧心", + "code": "R12.x00" + }, + { + "name": "烧灼感", + "code": "R23.802" + }, + { + "name": "焦虑", + "code": "F41.x00" + }, + { + "name": "焦虑状态", + "code": "F41.x00" + }, + { + "name": "牙龈癌", + "code": "C03.x00" + }, + { + "name": "甘油三酯高", + "code": "E78.100" + }, + { + "name": "甲亢", + "code": "E05.x00" + }, + { + "name": "甲减", + "code": "E03.x00" + }, + { + "name": "甲状旁腺功能亢进", + "code": "E21.x00" + }, + { + "name": "甲状旁腺功能减退", + "code": "E20.x00" + }, + { + "name": "甲状腺乳头状癌", + "code": "C73.x01" + }, + { + "name": "甲状腺乳头状腺癌", + "code": "C73.x01" + }, + { + "name": "甲状腺功能亢进", + "code": "E05.x00" + }, + { + "name": "甲状腺功能减退", + "code": "E03.x00" + }, + { + "name": "甲状腺未分化癌", + "code": "C73.x04" + }, + { + "name": "甲状腺术后", + "code": "Z90.800" + }, + { + "name": "甲状腺滤泡状癌", + "code": "C73.x02" + }, + { + "name": "甲状腺炎", + "code": "E06.x00" + }, + { + "name": "甲状腺癌", + "code": "C73.x00" + }, + { + "name": "甲状腺结节", + "code": "E04.100" + }, + { + "name": "甲状腺肿", + "code": "E04.x00" + }, + { + "name": "甲状腺肿大", + "code": "E04.x00" + }, + { + "name": "甲状腺髓样癌", + "code": "C73.x03" + }, + { + "name": "甲胎蛋白升高", + "code": "R97.100" + }, + { + "name": "电解质紊乱", + "code": "E87.x00" + }, + { + "name": "畏冷", + "code": "R50.901" + }, + { + "name": "畏寒", + "code": "R50.901" + }, + { + "name": "畸形", + "code": "Q79.x00" + }, + { + "name": "疲乏", + "code": "R53.x00" + }, + { + "name": "疲倦", + "code": "R53.x00" + }, + { + "name": "疲劳", + "code": "R53.x00" + }, + { + "name": "疲劳感", + "code": "R53.x00" + }, + { + "name": "疼痛", + "code": "R52.x00" + }, + { + "name": "疼痛不适", + "code": "R52.x00" + }, + { + "name": "病态窦房结综合征", + "code": "I49.500" + }, + { + "name": "病情好转", + "code": "Z71.x04" + }, + { + "name": "病情稳定", + "code": "Z71.x03" + }, + { + "name": "病毒性心肌炎", + "code": "I40.000" + }, + { + "name": "病理示中分化腺癌", + "code": "C16.x03" + }, + { + "name": "病理示低分化腺癌", + "code": "C16.x02" + }, + { + "name": "病理示腺癌", + "code": "C16.x01" + }, + { + "name": "病理示高分化腺癌", + "code": "C16.x04" + }, + { + "name": "痉挛", + "code": "R56.801" + }, + { + "name": "痛经", + "code": "N94.600" + }, + { + "name": "痛风", + "code": "M10.x00" + }, + { + "name": "痛风性关节炎", + "code": "M10.x00" + }, + { + "name": "痛风石", + "code": "M10.x00" + }, + { + "name": "痰中带血", + "code": "R04.201" + }, + { + "name": "痰呈白色泡沫痰", + "code": "R09.302" + }, + { + "name": "痴呆", + "code": "F03.x00" + }, + { + "name": "瘀斑", + "code": "R23.300" + }, + { + "name": "瘀点", + "code": "R23.300" + }, + { + "name": "瘙痒", + "code": "L29.x00" + }, + { + "name": "瘙痒", + "code": "L29.x00" + }, + { + "name": "瘫痪", + "code": "R29.300" + }, + { + "name": "癌性低血糖", + "code": "E16.201" + }, + { + "name": "癌性心包积液", + "code": "C78.800" + }, + { + "name": "癌性恶病质", + "code": "R64.x00" + }, + { + "name": "癌性疼痛", + "code": "G89.300" + }, + { + "name": "癌性胸腔积液", + "code": "C78.000" + }, + { + "name": "癌性腹水", + "code": "C78.600" + }, + { + "name": "癌性高钙血症", + "code": "E83.501" + }, + { + "name": "癌术后", + "code": "Z90.x00" + }, + { + "name": "癌症术后", + "code": "Z90.x00" + }, + { + "name": "癌痛", + "code": "G89.300" + }, + { + "name": "癌结节", + "code": "R22.x02" + }, + { + "name": "癌肉瘤", + "code": "C16.x11" + }, + { + "name": "癌胚抗原升高", + "code": "R97.000" + }, + { + "name": "癫痫", + "code": "G40.x00" + }, + { + "name": "白带增多", + "code": "N94.801" + }, + { + "name": "白带异常", + "code": "N94.800" + }, + { + "name": "白细胞升高", + "code": "D72.800" + }, + { + "name": "白细胞增多", + "code": "D72.800" + }, + { + "name": "皮下脂肪瘤", + "code": "D17.x00" + }, + { + "name": "皮下脓肿", + "code": "L02.x00" + }, + { + "name": "皮下隆起", + "code": "R22.x02" + }, + { + "name": "皮疹", + "code": "R21.x00" + }, + { + "name": "皮肤巩膜黄染", + "code": "R17.x00" + }, + { + "name": "皮肤疹", + "code": "R21.x00" + }, + { + "name": "皮肤瘙痒", + "code": "L29.x00" + }, + { + "name": "皮肤粘膜黄染", + "code": "R17.x00" + }, + { + "name": "皮肤红肿", + "code": "R23.302" + }, + { + "name": "皮肤脱屑", + "code": "L92.800" + }, + { + "name": "皮肤隆起", + "code": "R22.x02" + }, + { + "name": "皮肤颜色改变", + "code": "R23.800" + }, + { + "name": "皮肤黄染", + "code": "R17.x01" + }, + { + "name": "皮质醇增多症", + "code": "E24.x00" + }, + { + "name": "盆腔内占位性病变", + "code": "R90.800" + }, + { + "name": "盆腔内囊实性占位病变", + "code": "R90.800" + }, + { + "name": "盆腔包块", + "code": "R90.800" + }, + { + "name": "盆腔占位", + "code": "R90.800" + }, + { + "name": "盗汗", + "code": "R61.100" + }, + { + "name": "盲肠癌", + "code": "C18.100" + }, + { + "name": "盲肠腺癌", + "code": "C18.101" + }, + { + "name": "直接胆红素升高", + "code": "R17.x01" + }, + { + "name": "直立性低血压", + "code": "I95.100" + }, + { + "name": "直肠 CA", + "code": "C20.x00" + }, + { + "name": "直肠 MT", + "code": "C20.x00" + }, + { + "name": "直肠中低分化腺癌", + "code": "C20.x02" + }, + { + "name": "直肠中分化腺癌", + "code": "C20.x03" + }, + { + "name": "直肠乳头状腺癌", + "code": "C20.x07" + }, + { + "name": "直肠低分化腺癌", + "code": "C20.x02" + }, + { + "name": "直肠印戒细胞癌", + "code": "C20.x06" + }, + { + "name": "直肠印戒细胞粘液腺癌", + "code": "C20.x05" + }, + { + "name": "直肠增生性息肉", + "code": "K62.101" + }, + { + "name": "直肠多发息肉", + "code": "K62.100" + }, + { + "name": "直肠息肉", + "code": "K62.100" + }, + { + "name": "直肠恶性肿瘤", + "code": "C20.x00" + }, + { + "name": "直肠恶性肿瘤术后", + "code": "Z90.401" + }, + { + "name": "直肠溃疡型管状腺癌 II 级", + "code": "C20.x03" + }, + { + "name": "直肠溃疡型管状腺癌 II 级", + "code": "C20.x03" + }, + { + "name": "直肠溃疡型腺癌", + "code": "C20.x02" + }, + { + "name": "直肠癌", + "code": "C20.x00" + }, + { + "name": "直肠癌伴肝转移", + "code": "C78.700" + }, + { + "name": "直肠癌术后", + "code": "Z90.401" + }, + { + "name": "直肠癌术后化疗", + "code": "Z51.100" + }, + { + "name": "直肠癌术后吻合口瘘", + "code": "K91.800" + }, + { + "name": "直肠癌根治术后", + "code": "Z90.401" + }, + { + "name": "直肠癌浆膜上层", + "code": "C20.x00" + }, + { + "name": "直肠癌(浆膜上层)", + "code": "C20.x00" + }, + { + "name": "直肠神经内分泌癌", + "code": "C7A.000" + }, + { + "name": "直肠管状腺癌", + "code": "C20.x01" + }, + { + "name": "直肠管状腺癌 II 级", + "code": "C20.x01" + }, + { + "name": "直肠粘液腺癌", + "code": "C20.x05" + }, + { + "name": "直肠腺瘤", + "code": "D12.800" + }, + { + "name": "直肠腺瘤伴低级别上皮内瘤变", + "code": "D12.801" + }, + { + "name": "直肠腺瘤伴高级别上皮内瘤变", + "code": "D12.802" + }, + { + "name": "直肠腺癌", + "code": "C20.x01" + }, + { + "name": "直肠腺癌 (中度分化)", + "code": "C20.x03" + }, + { + "name": "直肠腺癌中分化", + "code": "C20.x03" + }, + { + "name": "直肠腺癌中度分化", + "code": "C20.x03" + }, + { + "name": "直肠腺癌低分化", + "code": "C20.x02" + }, + { + "name": "直肠腺癌高分化", + "code": "C20.x04" + }, + { + "name": "直肠腺癌(中度分化)", + "code": "C20.x03" + }, + { + "name": "直肠腺管状腺瘤", + "code": "D12.803" + }, + { + "name": "直肠锯齿状息肉", + "code": "K62.102" + }, + { + "name": "直肠镜异常", + "code": "R93.x07" + }, + { + "name": "直肠隆起型中分化管状腺癌", + "code": "C20.x03" + }, + { + "name": "直肠隆起型管状腺癌 II 级", + "code": "C20.x03" + }, + { + "name": "直肠隆起型腺癌", + "code": "C20.x03" + }, + { + "name": "直肠高分化腺癌", + "code": "C20.x04" + }, + { + "name": "直肠黏液腺癌", + "code": "C20.x05" + }, + { + "name": "眼花", + "code": "H53.100" + }, + { + "name": "眼黄", + "code": "R17.x00" + }, + { + "name": "睡眠不佳", + "code": "G47.x00" + }, + { + "name": "睡眠不好", + "code": "G47.x00" + }, + { + "name": "睡眠差", + "code": "G47.x00" + }, + { + "name": "睡眠质量差", + "code": "G47.x00" + }, + { + "name": "睡眠障碍", + "code": "G47.x00" + }, + { + "name": "短暂性脑缺血发作", + "code": "G45.x00" + }, + { + "name": "矽肺", + "code": "J62.x00" + }, + { + "name": "神经内分泌瘤 G1", + "code": "C7A.002" + }, + { + "name": "神经内分泌瘤 G2", + "code": "C7A.003" + }, + { + "name": "神经内分泌癌", + "code": "C7A.000" + }, + { + "name": "神经内分泌癌 (G3,约占肿瘤体积 40%);部分为肉瘤样癌 (约占肿瘤体积 40%);部分为管状腺癌", + "code": "C7A.001" + }, + { + "name": "神经内分泌癌 G3", + "code": "C7A.001" + }, + { + "name": "神经内分泌癌 G3 约占肿瘤体积 40% 部分为肉瘤样癌约占肿瘤体积 40% 部分为管状腺癌", + "code": "C7A.001" + }, + { + "name": "神经内分泌肿瘤 G3", + "code": "C7A.001" + }, + { + "name": "神经内分泌肿瘤 G3 型", + "code": "C7A.001" + }, + { + "name": "神经内分泌肿瘤 G3 型神经内分泌癌", + "code": "C7A.001" + }, + { + "name": "神经内分泌肿瘤为 G3 型神经内分泌癌", + "code": "C7A.001" + }, + { + "name": "神经内分泌肿瘤为 G3 型(神经内分泌癌)", + "code": "C7A.001" + }, + { + "name": "移动性浊音", + "code": "R18.x01" + }, + { + "name": "移动性浊音阳性", + "code": "R18.x01" + }, + { + "name": "稀水样便", + "code": "R19.700" + }, + { + "name": "稀水样大便", + "code": "R19.701" + }, + { + "name": "稀烂便", + "code": "R19.702" + }, + { + "name": "稳定型心绞痛", + "code": "I20.800" + }, + { + "name": "空肠癌", + "code": "C17.100" + }, + { + "name": "空肠腺癌", + "code": "C17.101" + }, + { + "name": "空腹血糖升高", + "code": "R73.901" + }, + { + "name": "窦性心动过缓", + "code": "R00.101" + }, + { + "name": "窦性心动过速", + "code": "R00.001" + }, + { + "name": "窦性心律", + "code": "R00.x00" + }, + { + "name": "窦性心律不齐", + "code": "R00.100" + }, + { + "name": "站立不稳", + "code": "R26.800" + }, + { + "name": "端坐呼吸", + "code": "R06.002" + }, + { + "name": "筛状粉刺型腺癌", + "code": "C16.x09" + }, + { + "name": "筛窦炎", + "code": "J32.000" + }, + { + "name": "管型尿", + "code": "R82.x00" + }, + { + "name": "管状绒毛状腺瘤", + "code": "D12.x03" + }, + { + "name": "管状腺瘤", + "code": "D12.x01" + }, + { + "name": "管状腺癌", + "code": "C16.x01" + }, + { + "name": "类癌", + "code": "C7A.006" + }, + { + "name": "粘液", + "code": "R19.502" + }, + { + "name": "粘液便", + "code": "R19.502" + }, + { + "name": "粘液性囊腺癌", + "code": "C56.x05" + }, + { + "name": "粘膜慢性炎", + "code": "K29.700" + }, + { + "name": "粘膜相关淋巴组织边缘区 B 细胞淋巴瘤", + "code": "C85.103" + }, + { + "name": "粘连性肠梗阻", + "code": "K56.500" + }, + { + "name": "粪便隐血阳性", + "code": "R19.500" + }, + { + "name": "精神", + "code": "R45.x00" + }, + { + "name": "精神、睡眠稍差", + "code": "R53.x00" + }, + { + "name": "精神、胃纳、睡眠可", + "code": "R53.x00" + }, + { + "name": "精神不振", + "code": "R45.802" + }, + { + "name": "精神变差", + "code": "R45.803" + }, + { + "name": "精神可", + "code": "R45.x01" + }, + { + "name": "精神好", + "code": "R45.x02" + }, + { + "name": "精神差", + "code": "R45.801" + }, + { + "name": "精神欠佳", + "code": "R45.800" + }, + { + "name": "精神状态差", + "code": "R45.804" + }, + { + "name": "精神略差", + "code": "R45.805" + }, + { + "name": "精神睡眠可", + "code": "R45.x01" + }, + { + "name": "精神稍差", + "code": "R45.806" + }, + { + "name": "精神胃纳可", + "code": "R45.x01" + }, + { + "name": "精神胃纳睡眠可", + "code": "R45.x01" + }, + { + "name": "精神萎靡", + "code": "R45.807" + }, + { + "name": "精索静脉曲张", + "code": "I86.100" + }, + { + "name": "糖化血红蛋白升高", + "code": "R73.903" + }, + { + "name": "糖尿病", + "code": "E11.x00" + }, + { + "name": "糖尿病神经病变", + "code": "E11.400" + }, + { + "name": "糖尿病肾病", + "code": "E11.200" + }, + { + "name": "糖尿病视网膜病变", + "code": "E11.300" + }, + { + "name": "糖尿病足", + "code": "E11.500" + }, + { + "name": "糖尿病酮症酸中毒", + "code": "E10.100" + }, + { + "name": "糖类抗原 125 升高", + "code": "R97.300" + }, + { + "name": "糖类抗原 19-9 升高", + "code": "R97.200" + }, + { + "name": "糜烂", + "code": "R22.x00" + }, + { + "name": "糜烂性胃炎", + "code": "K29.001" + }, + { + "name": "紫癜", + "code": "D69.x00" + }, + { + "name": "紫绀", + "code": "R23.000" + }, + { + "name": "红细胞减少", + "code": "D72.804" + }, + { + "name": "红肿", + "code": "R23.300" + }, + { + "name": "纤维肉瘤", + "code": "C49.x04" + }, + { + "name": "纳差", + "code": "R63.000" + }, + { + "name": "纵隔占位", + "code": "D38.300" + }, + { + "name": "纵隔肿瘤", + "code": "D38.300" + }, + { + "name": "经量减少", + "code": "N92.600" + }, + { + "name": "经量增多", + "code": "N92.000" + }, + { + "name": "绒毛状腺瘤", + "code": "D12.x02" + }, + { + "name": "结外 MALT 淋巴瘤", + "code": "C85.103" + }, + { + "name": "结外粘膜相关淋巴组织边缘区 B 细胞淋巴瘤", + "code": "C85.103" + }, + { + "name": "结晶尿", + "code": "R82.x00" + }, + { + "name": "结核", + "code": "A15.x00" + }, + { + "name": "结核性胸膜炎", + "code": "A16.500" + }, + { + "name": "结直肠癌", + "code": "C18.x00" + }, + { + "name": "结肠中低分化腺癌", + "code": "C18.x02" + }, + { + "name": "结肠中分化腺癌", + "code": "C18.x03" + }, + { + "name": "结肠乳头状腺癌", + "code": "C18.x07" + }, + { + "name": "结肠低分化腺癌", + "code": "C18.x02" + }, + { + "name": "结肠印戒细胞癌", + "code": "C18.x06" + }, + { + "name": "结肠印戒细胞粘液腺癌", + "code": "C18.x05" + }, + { + "name": "结肠多发息肉", + "code": "K63.500" + }, + { + "name": "结肠息肉", + "code": "K63.500" + }, + { + "name": "结肠恶性肿瘤术后", + "code": "Z90.400" + }, + { + "name": "结肠憩室", + "code": "K57.x00" + }, + { + "name": "结肠憩室炎", + "code": "K57.x01" + }, + { + "name": "结肠术后", + "code": "Z90.400" + }, + { + "name": "结肠浸润型腺癌", + "code": "C18.x01" + }, + { + "name": "结肠溃疡型管状腺癌 II 级", + "code": "C18.x02" + }, + { + "name": "结肠溃疡型腺癌", + "code": "C18.x02" + }, + { + "name": "结肠炎", + "code": "K52.x00" + }, + { + "name": "结肠癌", + "code": "C18.x00" + }, + { + "name": "结肠癌伴肝转移", + "code": "C78.700" + }, + { + "name": "结肠癌术后化疗", + "code": "Z51.102" + }, + { + "name": "结肠癌术后肝转移", + "code": "C78.700" + }, + { + "name": "结肠癌术后肺转移", + "code": "C78.000" + }, + { + "name": "结肠癌术后腹腔转移", + "code": "C78.600" + }, + { + "name": "结肠管状绒毛状腺瘤", + "code": "D12.x03" + }, + { + "name": "结肠管状腺瘤", + "code": "D12.x01" + }, + { + "name": "结肠管状腺癌", + "code": "C18.x01" + }, + { + "name": "结肠管状腺癌 II 级", + "code": "C18.x01" + }, + { + "name": "结肠管状腺癌 II-III 级", + "code": "C18.x01" + }, + { + "name": "结肠粘液腺癌", + "code": "C18.x05" + }, + { + "name": "结肠绒毛状腺瘤", + "code": "D12.x02" + }, + { + "name": "结肠肝曲癌", + "code": "C18.300" + }, + { + "name": "结肠肿瘤", + "code": "D12.x00" + }, + { + "name": "结肠脾曲癌", + "code": "C18.500" + }, + { + "name": "结肠腺瘤", + "code": "D12.x00" + }, + { + "name": "结肠腺瘤伴不典型增生", + "code": "D12.x06" + }, + { + "name": "结肠腺瘤伴低级别上皮内瘤变", + "code": "D12.x04" + }, + { + "name": "结肠腺瘤伴高级别上皮内瘤变", + "code": "D12.x05" + }, + { + "name": "结肠腺癌", + "code": "C18.x01" + }, + { + "name": "结肠腺癌中低分化", + "code": "C18.x02" + }, + { + "name": "结肠腺癌(中低分化)", + "code": "C18.x02" + }, + { + "name": "结肠腺管状腺瘤", + "code": "D12.x01" + }, + { + "name": "结肠镜异常", + "code": "R93.x07" + }, + { + "name": "结肠隆起型中分化管状腺癌", + "code": "C18.x03" + }, + { + "name": "结肠隆起型管状腺癌 II 级", + "code": "C18.x03" + }, + { + "name": "结肠隆起型腺癌", + "code": "C18.x03" + }, + { + "name": "结肠高分化腺癌", + "code": "C18.x04" + }, + { + "name": "结肠黏液腺癌", + "code": "C18.x05" + }, + { + "name": "结膜充血", + "code": "H11.800" + }, + { + "name": "结节性多动脉炎", + "code": "M30.000" + }, + { + "name": "结节性甲状腺肿", + "code": "E04.100" + }, + { + "name": "绝经", + "code": "N95.100" + }, + { + "name": "绞痛", + "code": "R52.x00" + }, + { + "name": "继发性高血压", + "code": "I15.x00" + }, + { + "name": "综合治疗后", + "code": "Z51.800" + }, + { + "name": "缺血性心肌病", + "code": "I25.500" + }, + { + "name": "缺血性心肌病型", + "code": "I25.500" + }, + { + "name": "缺血性心肌病型心功能不全", + "code": "I25.500" + }, + { + "name": "缺铁性贫血", + "code": "D50.900" + }, + { + "name": "耳聋", + "code": "H91.900" + }, + { + "name": "耳鸣", + "code": "H93.100" + }, + { + "name": "肉瘤", + "code": "C49.x00" + }, + { + "name": "肉瘤样癌", + "code": "C16.x10" + }, + { + "name": "肉瘤样癌 (约占肿瘤体积 40%);部分为管状腺癌", + "code": "C16.x14" + }, + { + "name": "肉瘤样癌约占肿瘤体积 40% 部分为管状腺癌", + "code": "C16.x14" + }, + { + "name": "肉芽肿", + "code": "L92.900" + }, + { + "name": "肌力下降", + "code": "R53.100" + }, + { + "name": "肌卫", + "code": "R29.801" + }, + { + "name": "肌张力增高", + "code": "R29.300" + }, + { + "name": "肌张力降低", + "code": "R29.400" + }, + { + "name": "肌无力", + "code": "R53.100" + }, + { + "name": "肌痛", + "code": "M79.100" + }, + { + "name": "肌紧张", + "code": "R29.800" + }, + { + "name": "肌肉酸痛", + "code": "M79.100" + }, + { + "name": "肌酐升高", + "code": "R79.801" + }, + { + "name": "肛周脓肿", + "code": "K61.x00" + }, + { + "name": "肛门坠胀", + "code": "R19.801" + }, + { + "name": "肝内胆管癌", + "code": "C22.100" + }, + { + "name": "肝内胆管细胞癌", + "code": "C22.002" + }, + { + "name": "肝内胆管结石", + "code": "K80.500" + }, + { + "name": "肝功能不全", + "code": "K72.x00" + }, + { + "name": "肝右叶囊肿", + "code": "K76.102" + }, + { + "name": "肝囊肿", + "code": "K76.100" + }, + { + "name": "肝多发囊肿", + "code": "K76.100" + }, + { + "name": "肝大", + "code": "R16.000" + }, + { + "name": "肝局灶性结节增生", + "code": "K76.800" + }, + { + "name": "肝左叶囊肿", + "code": "K76.101" + }, + { + "name": "肝左后叶上段及两肾囊肿", + "code": "K76.100" + }, + { + "name": "肝恶性肿瘤", + "code": "C22.000" + }, + { + "name": "肝曲结肠癌", + "code": "C18.300" + }, + { + "name": "肝曲结肠粘液腺癌", + "code": "C18.302" + }, + { + "name": "肝曲结肠腺癌", + "code": "C18.301" + }, + { + "name": "肝曲肠管状腺瘤", + "code": "D12.x01" + }, + { + "name": "肝炎", + "code": "K73.x00" + }, + { + "name": "肝炎后肝硬化", + "code": "K74.601" + }, + { + "name": "肝癌", + "code": "C22.000" + }, + { + "name": "肝硬化", + "code": "K74.600" + }, + { + "name": "肝细胞癌", + "code": "C22.001" + }, + { + "name": "肝细胞肝癌", + "code": "C22.001" + }, + { + "name": "肝肿大", + "code": "R16.000" + }, + { + "name": "肝脏囊肿", + "code": "K76.100" + }, + { + "name": "肝脾肿大", + "code": "R16.200" + }, + { + "name": "肝腺瘤", + "code": "D13.400" + }, + { + "name": "肝血管瘤", + "code": "D18.001" + }, + { + "name": "肝衰竭", + "code": "K72.x00" + }, + { + "name": "肝转移", + "code": "C78.700" + }, + { + "name": "肝转移瘤", + "code": "C78.701" + }, + { + "name": "肝转移癌", + "code": "C78.700" + }, + { + "name": "肝门部胆管癌", + "code": "C22.101" + }, + { + "name": "肝颈静脉回流征阳性", + "code": "R23.401" + }, + { + "name": "肠低分化印戒细胞癌", + "code": "C18.x06" + }, + { + "name": "肠低分化腺癌(印戒细胞癌)", + "code": "C18.x02" + }, + { + "name": "肠型", + "code": "R19.800" + }, + { + "name": "肠梗阻", + "code": "K56.x00" + }, + { + "name": "肠溃疡型管状腺癌", + "code": "C18.x02" + }, + { + "name": "肠溃疡型管状腺癌 II 级", + "code": "C18.x02" + }, + { + "name": "肠瘘", + "code": "K63.200" + }, + { + "name": "肠神经内分泌癌", + "code": "C7A.000" + }, + { + "name": "肠穿孔", + "code": "K63.100" + }, + { + "name": "肠管状腺瘤", + "code": "D12.x01" + }, + { + "name": "肠粘连", + "code": "K66.000" + }, + { + "name": "肠粘连狭窄", + "code": "K56.500" + }, + { + "name": "肠系膜淋巴结肿大", + "code": "R59.x03" + }, + { + "name": "肠系膜淋巴结转移", + "code": "C77.400" + }, + { + "name": "肠镜异常", + "code": "R93.x07" + }, + { + "name": "肠镜检查异常", + "code": "R93.x07" + }, + { + "name": "肠镜示直肠癌", + "code": "C20.x00" + }, + { + "name": "肠镜示结肠癌", + "code": "C18.x00" + }, + { + "name": "肠隆起型中分化管状腺癌", + "code": "C18.x03" + }, + { + "name": "肠隆起型管状腺癌 II 级", + "code": "C18.x03" + }, + { + "name": "肠鸣音亢进", + "code": "R19.100" + }, + { + "name": "肠鸣音减弱", + "code": "R19.101" + }, + { + "name": "肠鸣音消失", + "code": "R19.102" + }, + { + "name": "肢体冰凉", + "code": "R23.801" + }, + { + "name": "肢体抽搐", + "code": "R56.800" + }, + { + "name": "肢体无力", + "code": "R53.x01" + }, + { + "name": "肢体活动障碍", + "code": "R29.x00" + }, + { + "name": "肢体畸形", + "code": "Q79.x00" + }, + { + "name": "肢体酸痛", + "code": "M79.101" + }, + { + "name": "肢体麻木", + "code": "R20.200" + }, + { + "name": "肢端肥大症", + "code": "E22.000" + }, + { + "name": "肥厚型心肌病", + "code": "I42.100" + }, + { + "name": "肥厚性胃炎", + "code": "K29.600" + }, + { + "name": "肥大", + "code": "M62.800" + }, + { + "name": "肥胖", + "code": "E66.x00" + }, + { + "name": "肥胖症", + "code": "E66.x00" + }, + { + "name": "肺上叶癌", + "code": "C34.x00" + }, + { + "name": "肺下叶癌", + "code": "C34.x00" + }, + { + "name": "肺不张", + "code": "J98.100" + }, + { + "name": "肺动脉瓣关闭不全", + "code": "I37.100" + }, + { + "name": "肺动脉瓣狭窄", + "code": "I37.000" + }, + { + "name": "肺占位", + "code": "R91.x01" + }, + { + "name": "肺囊肿", + "code": "J98.400" + }, + { + "name": "肺大疱", + "code": "J43.x01" + }, + { + "name": "肺大细胞癌", + "code": "C34.x04" + }, + { + "name": "肺小细胞癌", + "code": "C34.x03" + }, + { + "name": "肺小细胞肺癌", + "code": "C34.x03" + }, + { + "name": "肺心病", + "code": "I27.900" + }, + { + "name": "肺恶性肿瘤", + "code": "C34.x00" + }, + { + "name": "肺感染", + "code": "J98.400" + }, + { + "name": "肺术后", + "code": "Z90.200" + }, + { + "name": "肺栓塞", + "code": "I26.x00" + }, + { + "name": "肺气肿", + "code": "J43.x00" + }, + { + "name": "肺泡细胞癌", + "code": "C34.x01" + }, + { + "name": "肺源性心脏病", + "code": "I27.900" + }, + { + "name": "肺炎", + "code": "J18.x00" + }, + { + "name": "肺炎症", + "code": "J98.400" + }, + { + "name": "肺癌", + "code": "C34.x00" + }, + { + "name": "肺癌术后", + "code": "Z90.200" + }, + { + "name": "肺硬化性血管瘤", + "code": "D14.300" + }, + { + "name": "肺神经内分泌癌", + "code": "C7A.000" + }, + { + "name": "肺神经内分泌肿瘤", + "code": "C34.x07" + }, + { + "name": "肺类癌", + "code": "C34.x07" + }, + { + "name": "肺结核", + "code": "A16.200" + }, + { + "name": "肺结节", + "code": "R91.x00" + }, + { + "name": "肺结节待查", + "code": "R91.x00" + }, + { + "name": "肺肉瘤样癌", + "code": "C34.x06" + }, + { + "name": "肺肿块", + "code": "R91.x02" + }, + { + "name": "肺肿物", + "code": "R91.x00" + }, + { + "name": "肺肿瘤", + "code": "C34.x00" + }, + { + "name": "肺腺癌", + "code": "C34.x01" + }, + { + "name": "肺腺鳞癌", + "code": "C34.x05" + }, + { + "name": "肺良性肿瘤", + "code": "D14.300" + }, + { + "name": "肺转移", + "code": "C78.000" + }, + { + "name": "肺转移瘤", + "code": "C78.001" + }, + { + "name": "肺转移癌", + "code": "C78.000" + }, + { + "name": "肺部感染", + "code": "J98.400" + }, + { + "name": "肺部结节", + "code": "R91.x00" + }, + { + "name": "肺部肿块", + "code": "R91.x00" + }, + { + "name": "肺部阴影", + "code": "R91.x03" + }, + { + "name": "肺错构瘤", + "code": "D14.300" + }, + { + "name": "肺门癌", + "code": "C34.x00" + }, + { + "name": "肺非小细胞癌", + "code": "C34.x04" + }, + { + "name": "肺鳞状细胞癌", + "code": "C34.x02" + }, + { + "name": "肺鳞癌", + "code": "C34.x02" + }, + { + "name": "肾上腺意外瘤", + "code": "D35.000" + }, + { + "name": "肾上腺皮质功能亢进", + "code": "E27.x00" + }, + { + "name": "肾上腺皮质功能减退", + "code": "E27.x00" + }, + { + "name": "肾乳头状细胞癌", + "code": "C64.x02" + }, + { + "name": "肾乳头状腺癌", + "code": "C64.x02" + }, + { + "name": "肾功能不全", + "code": "N19.x00" + }, + { + "name": "肾区叩痛", + "code": "R19.800" + }, + { + "name": "肾囊肿", + "code": "N28.100" + }, + { + "name": "肾嫌色细胞癌", + "code": "C64.x03" + }, + { + "name": "肾小球肾炎", + "code": "N03.x00" + }, + { + "name": "肾小结石", + "code": "N20.000" + }, + { + "name": "肾性贫血", + "code": "D63.800" + }, + { + "name": "肾性高血压", + "code": "I15.000" + }, + { + "name": "肾炎", + "code": "N05.x00" + }, + { + "name": "肾病综合征", + "code": "N04.x00" + }, + { + "name": "肾积水", + "code": "N13.x00" + }, + { + "name": "肾细胞癌", + "code": "C64.x00" + }, + { + "name": "肾结石", + "code": "N20.000" + }, + { + "name": "肾肉瘤样癌", + "code": "C64.x04" + }, + { + "name": "肾衰竭", + "code": "N19.x03" + }, + { + "name": "肾透明细胞癌", + "code": "C64.x01" + }, + { + "name": "肿块", + "code": "R22.x00" + }, + { + "name": "肿痛", + "code": "R22.x03" + }, + { + "name": "肿瘤复发", + "code": "Z85.x00" + }, + { + "name": "肿瘤并发症", + "code": "C80.x00" + }, + { + "name": "肿瘤术后", + "code": "Z90.x00" + }, + { + "name": "肿瘤标志物升高", + "code": "R97.x00" + }, + { + "name": "肿瘤结节", + "code": "R22.x02" + }, + { + "name": "胀痛", + "code": "R14.x01" + }, + { + "name": "胃 CA", + "code": "C16.x00" + }, + { + "name": "胃 CA 术后", + "code": "Z90.300" + }, + { + "name": "胃 Ca", + "code": "C16.x00" + }, + { + "name": "胃 MT", + "code": "C16.x00" + }, + { + "name": "胃上皮性恶性肿瘤", + "code": "C16.x00" + }, + { + "name": "胃下垂", + "code": "K31.800" + }, + { + "name": "胃不典型增生", + "code": "K29.701" + }, + { + "name": "胃中低分化管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃中低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃中分化管状腺癌", + "code": "C16.x03" + }, + { + "name": "胃中分化腺癌", + "code": "C16.x03" + }, + { + "name": "胃中至低分化管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃乳头状腺癌", + "code": "C16.x15" + }, + { + "name": "胃低分化管状腺癌", + "code": "C16.x02" + }, + { + "name": "胃低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃低粘附性癌", + "code": "C16.x06" + }, + { + "name": "胃低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃体中下部溃疡", + "code": "K25.x00" + }, + { + "name": "胃体前壁及胃窦溃疡型管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "胃体前壁溃疡型管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃体及胃窦小弯侧早期隆起型 0-I 型低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃体及胃窦小弯侧早期隆起型(0-I 型)低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃体大弯侧溃疡型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃体大弯溃疡型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃体小弯 IIC 型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃体小弯早期 IIC 型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃体小弯早期(IIC 型)低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃体小弯腺癌 (中度分化)", + "code": "C16.x03" + }, + { + "name": "胃体小弯腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃体恶性肿瘤", + "code": "C16.200" + }, + { + "name": "胃体溃疡", + "code": "K25.x00" + }, + { + "name": "胃体溃疡型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃体癌", + "code": "C16.200" + }, + { + "name": "胃体癌伴慢性萎缩性胃炎", + "code": "C16.x00" + }, + { + "name": "胃体癌伴腹腔种植转移", + "code": "C78.600" + }, + { + "name": "胃体癌慢性萎缩性胃炎", + "code": "C16.x00" + }, + { + "name": "胃体管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃体肿瘤", + "code": "D13.100" + }, + { + "name": "胃体腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃体部管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃出血", + "code": "K92.203" + }, + { + "name": "胃印戒细胞癌", + "code": "C16.x05" + }, + { + "name": "胃大弯溃疡", + "code": "K25.x00" + }, + { + "name": "胃大弯癌", + "code": "C16.x10" + }, + { + "name": "胃大部切除术后", + "code": "Z90.301" + }, + { + "name": "胃大部切除术后残胃癌", + "code": "C16.x00" + }, + { + "name": "胃小弯 IIC 型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃小弯侧早期隆起型低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃小弯溃疡", + "code": "K25.x00" + }, + { + "name": "胃小弯癌", + "code": "C16.x09" + }, + { + "name": "胃底癌", + "code": "C16.100" + }, + { + "name": "胃异型增生", + "code": "K29.702" + }, + { + "name": "胃息肉", + "code": "D13.101" + }, + { + "name": "胃息肉", + "code": "K31.701" + }, + { + "name": "胃恶性肿瘤", + "code": "C16.x00" + }, + { + "name": "胃恶性肿瘤术后", + "code": "Z90.300" + }, + { + "name": "胃恶性肿瘤术后化疗", + "code": "Z51.101" + }, + { + "name": "胃恶性肿瘤术后放疗", + "code": "Z51.001" + }, + { + "name": "胃憩室", + "code": "K31.802" + }, + { + "name": "胃扩张", + "code": "K31.900" + }, + { + "name": "胃扭转", + "code": "K31.803" + }, + { + "name": "胃未分化癌", + "code": "C16.x08" + }, + { + "name": "胃术后", + "code": "Z90.300" + }, + { + "name": "胃梗阻", + "code": "K31.900" + }, + { + "name": "胃泌素瘤", + "code": "C7A.008" + }, + { + "name": "胃浸润型管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃溃疡", + "code": "K25.x00" + }, + { + "name": "胃溃疡 S2 期", + "code": "K25.400" + }, + { + "name": "胃溃疡伴出血", + "code": "K25.001" + }, + { + "name": "胃溃疡伴梗阻", + "code": "K25.200" + }, + { + "name": "胃溃疡伴穿孔", + "code": "K25.101" + }, + { + "name": "胃溃疡型低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃溃疡愈合期", + "code": "K25.400" + }, + { + "name": "胃溃疡瘢痕期", + "code": "K25.500" + }, + { + "name": "胃溃疡(S2 期)", + "code": "K25.400" + }, + { + "name": "胃炎", + "code": "K29.x00" + }, + { + "name": "胃瘘", + "code": "K31.804" + }, + { + "name": "胃癌", + "code": "C16.x00" + }, + { + "name": "胃癌伴肝转移", + "code": "C78.700" + }, + { + "name": "胃癌伴腹腔种植转移", + "code": "C78.600" + }, + { + "name": "胃癌术后", + "code": "Z90.300" + }, + { + "name": "胃癌术后复发", + "code": "C16.x00" + }, + { + "name": "胃癌术后肝转移", + "code": "C78.700" + }, + { + "name": "胃癌根治术后", + "code": "Z90.300" + }, + { + "name": "胃癌综合治疗后", + "code": "Z51.800" + }, + { + "name": "胃癌肉瘤", + "code": "C16.x16" + }, + { + "name": "胃神经内分泌癌", + "code": "C7A.000" + }, + { + "name": "胃穿孔", + "code": "K31.805" + }, + { + "name": "胃窦低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃窦多发息肉", + "code": "K31.701" + }, + { + "name": "胃窦多发息肉(I 型)", + "code": "K31.701" + }, + { + "name": "胃窦大弯侧腺癌 (中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦大弯侧腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦大弯腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦小弯侧溃疡型管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "胃窦小弯溃疡型管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "胃窦小弯腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦浸润型管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃窦浸润型管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "胃窦溃疡", + "code": "K25.x00" + }, + { + "name": "胃窦溃疡型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "胃窦溃疡型低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃窦溃疡型管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃窦溃疡型管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "胃窦溃疡型隆起性病变", + "code": "K25.x00" + }, + { + "name": "胃窦癌", + "code": "C16.300" + }, + { + "name": "胃窦腺癌", + "code": "C16.x03" + }, + { + "name": "胃窦腺癌 (中、低度分化)", + "code": "C16.x02" + }, + { + "name": "胃窦腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "胃窦腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦部 MT 伴胃周淋巴结转移", + "code": "C16.300" + }, + { + "name": "胃窦部腺癌", + "code": "C16.x03" + }, + { + "name": "胃窦部腺癌 (中、低度分化)", + "code": "C16.x02" + }, + { + "name": "胃窦部腺癌(中度分化)", + "code": "C16.x03" + }, + { + "name": "胃窦隆起", + "code": "K31.x00" + }, + { + "name": "胃管状绒毛状腺瘤", + "code": "D13.105" + }, + { + "name": "胃管状腺瘤", + "code": "D13.103" + }, + { + "name": "胃管状腺癌", + "code": "C16.x01" + }, + { + "name": "胃管状腺癌 II 级", + "code": "C16.x01" + }, + { + "name": "胃管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "胃管状腺癌 III 级", + "code": "C16.x01" + }, + { + "name": "胃粘液腺癌", + "code": "C16.x07" + }, + { + "name": "胃纳不佳", + "code": "R63.000" + }, + { + "name": "胃纳可", + "code": "R63.x02" + }, + { + "name": "胃纳差", + "code": "R63.000" + }, + { + "name": "胃纳欠佳", + "code": "R63.000" + }, + { + "name": "胃纳略差", + "code": "R63.000" + }, + { + "name": "胃绒毛状腺瘤", + "code": "D13.104" + }, + { + "name": "胃结石", + "code": "K31.801" + }, + { + "name": "胃肉瘤样癌", + "code": "C16.x14" + }, + { + "name": "胃肠息肉", + "code": "K31.700" + }, + { + "name": "胃肠道间质瘤", + "code": "C49.x07" + }, + { + "name": "胃肿瘤", + "code": "C16.x00" + }, + { + "name": "胃腺瘤", + "code": "D13.102" + }, + { + "name": "胃腺癌", + "code": "C16.x01" + }, + { + "name": "胃腺鳞癌", + "code": "C16.x12" + }, + { + "name": "胃良性肿瘤", + "code": "D13.100" + }, + { + "name": "胃角溃疡", + "code": "K25.x00" + }, + { + "name": "胃角溃疡 (S2 期)", + "code": "K25.400" + }, + { + "name": "胃角溃疡 S2 期", + "code": "K25.400" + }, + { + "name": "胃角溃疡型粘液腺癌", + "code": "C16.x07" + }, + { + "name": "胃轻瘫", + "code": "K31.200" + }, + { + "name": "胃部分切除术后", + "code": "Z90.303" + }, + { + "name": "胃镜异常", + "code": "R93.x06" + }, + { + "name": "胃镜检查异常", + "code": "R93.x06" + }, + { + "name": "胃镜示胃癌", + "code": "C16.x00" + }, + { + "name": "胃隆起型低黏附性癌", + "code": "C16.x06" + }, + { + "name": "胃隆起型病变", + "code": "K31.x00" + }, + { + "name": "胃隆起型腺癌", + "code": "C16.x03" + }, + { + "name": "胃隆起型高分化腺癌", + "code": "C16.x04" + }, + { + "name": "胃食管交界腺癌", + "code": "C16.000" + }, + { + "name": "胃食管反流病", + "code": "K21.000" + }, + { + "name": "胃高分化管状腺癌", + "code": "C16.x04" + }, + { + "name": "胃高分化腺癌", + "code": "C16.x04" + }, + { + "name": "胃黏液腺癌", + "code": "C16.x07" + }, + { + "name": "胃黏膜上皮内瘤变", + "code": "D00.700" + }, + { + "name": "胃黏膜低级别上皮内瘤变", + "code": "D00.701" + }, + { + "name": "胃黏膜肠化", + "code": "K29.700" + }, + { + "name": "胃黏膜高级别上皮内瘤变", + "code": "D00.702" + }, + { + "name": "胆囊切除术后", + "code": "Z90.402" + }, + { + "name": "胆囊息肉", + "code": "K82.000" + }, + { + "name": "胆囊息肉样病变", + "code": "K82.x00" + }, + { + "name": "胆囊恶性肿瘤", + "code": "C23.x00" + }, + { + "name": "胆囊炎", + "code": "K81.x00" + }, + { + "name": "胆囊癌", + "code": "C23.x00" + }, + { + "name": "胆囊结石", + "code": "K80.x00" + }, + { + "name": "胆囊腺癌", + "code": "C23.x00" + }, + { + "name": "胆固醇高", + "code": "E78.000" + }, + { + "name": "胆总管癌", + "code": "C24.000" + }, + { + "name": "胆总管结石", + "code": "K80.500" + }, + { + "name": "胆汁反流性胃炎", + "code": "K29.500" + }, + { + "name": "胆汁性肝硬化", + "code": "K74.300" + }, + { + "name": "胆源性胰腺炎", + "code": "K85.100" + }, + { + "name": "胆石症", + "code": "K80.x00" + }, + { + "name": "胆管恶性肿瘤", + "code": "C24.x00" + }, + { + "name": "胆管炎", + "code": "K83.000" + }, + { + "name": "胆管癌", + "code": "C22.100" + }, + { + "name": "胆管细胞癌", + "code": "C22.100" + }, + { + "name": "胆管结石", + "code": "K80.501" + }, + { + "name": "胆红素升高", + "code": "R17.x00" + }, + { + "name": "胆结石", + "code": "K80.x00" + }, + { + "name": "胰体尾癌", + "code": "C25.100" + }, + { + "name": "胰体癌", + "code": "C25.100" + }, + { + "name": "胰头癌", + "code": "C25.000" + }, + { + "name": "胰尾癌", + "code": "C25.200" + }, + { + "name": "胰岛素瘤", + "code": "C7A.009" + }, + { + "name": "胰岛细胞瘤", + "code": "C7A.007" + }, + { + "name": "胰腺假性囊肿", + "code": "K86.300" + }, + { + "name": "胰腺囊肿", + "code": "K86.300" + }, + { + "name": "胰腺囊腺瘤", + "code": "D13.600" + }, + { + "name": "胰腺囊腺癌", + "code": "C25.x01" + }, + { + "name": "胰腺实性假乳头状瘤", + "code": "D13.600" + }, + { + "name": "胰腺导管内乳头状瘤", + "code": "D13.600" + }, + { + "name": "胰腺导管内乳头状粘液性肿瘤", + "code": "D13.200" + }, + { + "name": "胰腺导管内乳头状粘液性肿瘤伴上皮重度不典型增生", + "code": "D13.201" + }, + { + "name": "胰腺导管内乳头状粘连性肿瘤伴上皮重度不典型增生", + "code": "D13.201" + }, + { + "name": "胰腺导管腺癌", + "code": "C25.x01" + }, + { + "name": "胰腺恶性肿瘤", + "code": "C25.x00" + }, + { + "name": "胰腺炎", + "code": "K85.x00" + }, + { + "name": "胰腺癌", + "code": "C25.x00" + }, + { + "name": "胰腺神经内分泌瘤", + "code": "D13.600" + }, + { + "name": "胰腺神经内分泌癌", + "code": "C7A.000" + }, + { + "name": "胰腺神经内分泌肿瘤", + "code": "C25.400" + }, + { + "name": "胰腺腺癌", + "code": "C25.x01" + }, + { + "name": "胰高血糖素瘤", + "code": "C7A.010" + }, + { + "name": "胸上段食管癌", + "code": "C15.x00" + }, + { + "name": "胸下段食管癌", + "code": "C15.x00" + }, + { + "name": "胸中段食管中 - 低分化鳞癌", + "code": "C15.x02" + }, + { + "name": "胸中段食管中低分化鳞癌", + "code": "C15.x02" + }, + { + "name": "胸中段食管癌", + "code": "C15.x00" + }, + { + "name": "胸主动脉瘤", + "code": "I71.200" + }, + { + "name": "胸椎骨质增生", + "code": "M47.x00" + }, + { + "name": "胸水", + "code": "J94.x00" + }, + { + "name": "胸痛", + "code": "R07.x01" + }, + { + "name": "胸腔积液", + "code": "J94.x00" + }, + { + "name": "胸膜炎", + "code": "R09.100" + }, + { + "name": "胸膜间皮瘤", + "code": "C45.x00" + }, + { + "name": "胸闷", + "code": "R07.x00" + }, + { + "name": "胸闷气促", + "code": "R07.x00" + }, + { + "name": "胸骨后烧灼感", + "code": "R12.x01" + }, + { + "name": "脂肪瘤", + "code": "D17.x00" + }, + { + "name": "脂肪肉瘤", + "code": "C49.x03" + }, + { + "name": "脂肪肝", + "code": "K76.000" + }, + { + "name": "脉搏减弱", + "code": "R00.800" + }, + { + "name": "脊髓压迫症", + "code": "G82.600" + }, + { + "name": "脐周痛", + "code": "R10.300" + }, + { + "name": "脑供血不足", + "code": "G46.x00" + }, + { + "name": "脑出血", + "code": "I61.x00" + }, + { + "name": "脑动脉硬化", + "code": "I67.100" + }, + { + "name": "脑卒中", + "code": "I64.x00" + }, + { + "name": "脑梗死", + "code": "I63.x00" + }, + { + "name": "脑梗死后遗症", + "code": "I69.x00" + }, + { + "name": "脑白质脱髓鞘", + "code": "G93.400" + }, + { + "name": "脑白质脱髓鞘改变", + "code": "G93.400" + }, + { + "name": "脑萎缩", + "code": "G31.100" + }, + { + "name": "脑软化灶", + "code": "G93.000" + }, + { + "name": "脓尿", + "code": "R82.x00" + }, + { + "name": "脓毒性休克", + "code": "R57.800" + }, + { + "name": "脓毒症", + "code": "A41.900" + }, + { + "name": "脓肿", + "code": "L02.x00" + }, + { + "name": "脓胸", + "code": "J86.x00" + }, + { + "name": "脓血", + "code": "R19.500" + }, + { + "name": "脓血便", + "code": "R19.501" + }, + { + "name": "脱发", + "code": "L65.900" + }, + { + "name": "脱屑", + "code": "L92.800" + }, + { + "name": "脱水", + "code": "E86.x00" + }, + { + "name": "脾功能亢进", + "code": "D73.100" + }, + { + "name": "脾大", + "code": "R16.100" + }, + { + "name": "脾曲结肠癌", + "code": "C18.500" + }, + { + "name": "脾曲结肠腺癌", + "code": "C18.501" + }, + { + "name": "脾肿大", + "code": "R16.100" + }, + { + "name": "腐蚀性胃炎", + "code": "K29.200" + }, + { + "name": "腰痛", + "code": "M54.500" + }, + { + "name": "腰背痛", + "code": "M54.900" + }, + { + "name": "腰酸", + "code": "M54.501" + }, + { + "name": "腹主动脉瘤", + "code": "I71.400" + }, + { + "name": "腹壁静脉曲张", + "code": "I83.x04" + }, + { + "name": "腹段食管癌", + "code": "C15.x00" + }, + { + "name": "腹水", + "code": "R18.x00" + }, + { + "name": "腹泻", + "code": "R19.700" + }, + { + "name": "腹痛", + "code": "R10.x00" + }, + { + "name": "腹胀", + "code": "R14.x00" + }, + { + "name": "腹胀胀", + "code": "R14.x00" + }, + { + "name": "腹腔淋巴结肿大", + "code": "R59.x02" + }, + { + "name": "腹腔积气", + "code": "R14.x03" + }, + { + "name": "腹腔积液", + "code": "R18.x00" + }, + { + "name": "腹膜后淋巴结肿大", + "code": "R59.x01" + }, + { + "name": "腹膜外肿瘤", + "code": "C76.300" + }, + { + "name": "腹膜转移", + "code": "C78.600" + }, + { + "name": "腹部不适", + "code": "R10.x01" + }, + { + "name": "腹部包块", + "code": "R19.000" + }, + { + "name": "腹部包块", + "code": "R19.000" + }, + { + "name": "腹部胀气", + "code": "R14.x00" + }, + { + "name": "腹部胀痛", + "code": "R14.x01" + }, + { + "name": "腹部闷痛", + "code": "R10.x02" + }, + { + "name": "腹部隐痛", + "code": "R10.x03" + }, + { + "name": "腺瘤性息肉", + "code": "D12.x00" + }, + { + "name": "腺癌为管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "腺神经内分泌癌", + "code": "C16.x17" + }, + { + "name": "腺管状腺瘤", + "code": "D12.x01" + }, + { + "name": "腺鳞癌", + "code": "C16.x12" + }, + { + "name": "膀胱刺激征", + "code": "R39.x00" + }, + { + "name": "膀胱尿路上皮癌", + "code": "C67.x01" + }, + { + "name": "膀胱憩室", + "code": "N32.300" + }, + { + "name": "膀胱浸润性尿路上皮癌", + "code": "C67.x01" + }, + { + "name": "膀胱浸润性癌", + "code": "C67.x00" + }, + { + "name": "膀胱炎", + "code": "N30.x00" + }, + { + "name": "膀胱炎伴膀胱憩室", + "code": "N30.200" + }, + { + "name": "膀胱癌", + "code": "C67.x00" + }, + { + "name": "膀胱结石", + "code": "N21.000" + }, + { + "name": "膀胱高级别尿路上皮癌", + "code": "C67.x02" + }, + { + "name": "自汗", + "code": "R61.100" + }, + { + "name": "舌癌", + "code": "C02.x00" + }, + { + "name": "舌鳞状细胞癌", + "code": "C02.x01" + }, + { + "name": "苍白", + "code": "R23.100" + }, + { + "name": "苗勒氏管混合瘤", + "code": "C55.x03" + }, + { + "name": "苗勒管混合瘤", + "code": "C55.x03" + }, + { + "name": "苯丙酮尿症", + "code": "E70.100" + }, + { + "name": "茶色尿", + "code": "R82.x02" + }, + { + "name": "萎缩", + "code": "M62.500" + }, + { + "name": "营养不良", + "code": "E46.x00" + }, + { + "name": "营养支持治疗", + "code": "Z51.806" + }, + { + "name": "葡萄糖 -6-磷酸脱氢酶缺乏症", + "code": "D55.000" + }, + { + "name": "虚弱", + "code": "R53.x00" + }, + { + "name": "蚕豆病", + "code": "D55.000" + }, + { + "name": "蛋白尿", + "code": "R80.x00" + }, + { + "name": "蠕动波", + "code": "R19.800" + }, + { + "name": "血凝块", + "code": "R58.x00" + }, + { + "name": "血小板减少", + "code": "D69.600" + }, + { + "name": "血小板增多", + "code": "D72.803" + }, + { + "name": "血尿", + "code": "R31.x00" + }, + { + "name": "血栓闭塞性脉管炎", + "code": "I73.100" + }, + { + "name": "血管免疫母细胞性 T 细胞淋巴瘤", + "code": "C86.500" + }, + { + "name": "血管曲张", + "code": "I83.x03" + }, + { + "name": "血管炎", + "code": "I77.600" + }, + { + "name": "血管肉瘤", + "code": "C49.x06" + }, + { + "name": "血管钙化", + "code": "I70.x00" + }, + { + "name": "血糖升高", + "code": "R73.900" + }, + { + "name": "血红蛋白降低", + "code": "D64.900" + }, + { + "name": "血肌酐升高", + "code": "R79.801" + }, + { + "name": "血胸", + "code": "J94.200" + }, + { + "name": "血脂异常", + "code": "E78.x00" + }, + { + "name": "血脂高", + "code": "E78.x00" + }, + { + "name": "行化疗", + "code": "Z51.100" + }, + { + "name": "视力下降", + "code": "H54.x00" + }, + { + "name": "视力模糊", + "code": "H53.800" + }, + { + "name": "视物模糊", + "code": "H53.800" + }, + { + "name": "视蒙", + "code": "H53.100" + }, + { + "name": "言语障碍", + "code": "R47.x00" + }, + { + "name": "认知障碍", + "code": "R41.800" + }, + { + "name": "记忆减退", + "code": "R41.300" + }, + { + "name": "记忆力下降", + "code": "R41.300" + }, + { + "name": "记忆力减退", + "code": "R41.300" + }, + { + "name": "记忆力障碍", + "code": "R41.300" + }, + { + "name": "谵妄", + "code": "R41.001" + }, + { + "name": "谷丙转氨酶升高", + "code": "R74.001" + }, + { + "name": "谷草转氨酶升高", + "code": "R74.002" + }, + { + "name": "败血症", + "code": "A41.900" + }, + { + "name": "贫血", + "code": "D64.900" + }, + { + "name": "贫血肾性贫血", + "code": "D63.800" + }, + { + "name": "贲门 - 胃体癌", + "code": "C16.000" + }, + { + "name": "贲门失弛缓症", + "code": "K22.000" + }, + { + "name": "贲门息肉", + "code": "K31.001" + }, + { + "name": "贲门息肉样隆起", + "code": "K31.002" + }, + { + "name": "贲门恶性肿瘤", + "code": "C16.000" + }, + { + "name": "贲门溃疡", + "code": "K25.x01" + }, + { + "name": "贲门炎", + "code": "K31.000" + }, + { + "name": "贲门癌", + "code": "C16.000" + }, + { + "name": "贲门胃体癌", + "code": "C16.000" + }, + { + "name": "贲门腺癌", + "code": "C16.000" + }, + { + "name": "贲门腺癌 (中度分化)", + "code": "C16.000" + }, + { + "name": "贲门腺癌 II 级", + "code": "C16.000" + }, + { + "name": "贲门腺癌(中度分化)", + "code": "C16.000" + }, + { + "name": "超声检查异常", + "code": "R93.x04" + }, + { + "name": "超声示肿瘤", + "code": "R93.x04" + }, + { + "name": "超重", + "code": "E66.x00" + }, + { + "name": "超高热", + "code": "R50.904" + }, + { + "name": "身目黄染", + "code": "R17.x00" + }, + { + "name": "转氨酶升高", + "code": "R74.000" + }, + { + "name": "转移性肝癌", + "code": "C78.700" + }, + { + "name": "转移结节", + "code": "C78.x00" + }, + { + "name": "转院", + "code": "Z75.300" + }, + { + "name": "软骨肉瘤", + "code": "C41.x00" + }, + { + "name": "轻度贫血", + "code": "D64.903" + }, + { + "name": "轻度食管静脉曲张", + "code": "I85.x00" + }, + { + "name": "辅助化疗后", + "code": "Z51.104" + }, + { + "name": "输尿管结石", + "code": "N20.100" + }, + { + "name": "边缘区 B 细胞淋巴瘤", + "code": "C85.102" + }, + { + "name": "过敏性休克", + "code": "T78.200" + }, + { + "name": "返酸", + "code": "R13.x00" + }, + { + "name": "进行性吞咽困难", + "code": "R13.x01" + }, + { + "name": "进食哽噎感", + "code": "R13.x03" + }, + { + "name": "进食困难", + "code": "R13.x00" + }, + { + "name": "进食少", + "code": "R63.001" + }, + { + "name": "进食梗阻感", + "code": "R13.x02" + }, + { + "name": "进食阻挡感", + "code": "R13.x03" + }, + { + "name": "进食障碍", + "code": "R63.300" + }, + { + "name": "远处转移", + "code": "C80.x00" + }, + { + "name": "远端胃", + "code": "C16.x00" + }, + { + "name": "远端胃上皮性恶性肿瘤", + "code": "C16.x00" + }, + { + "name": "远端胃胃体小弯早期 IIC 型低分化腺癌", + "code": "C16.x02" + }, + { + "name": "远端胃胃窦小弯侧溃疡型管状腺癌 II-III 级", + "code": "C16.x01" + }, + { + "name": "造口旁疝", + "code": "K94.100" + }, + { + "name": "遗尿", + "code": "R32.x00" + }, + { + "name": "酒精性肝硬化", + "code": "K70.300" + }, + { + "name": "酒精性胰腺炎", + "code": "K86.000" + }, + { + "name": "酒精性脂肪肝", + "code": "K70.000" + }, + { + "name": "酮症酸中毒", + "code": "E10.100" + }, + { + "name": "酱油色尿", + "code": "R82.x03" + }, + { + "name": "酸中毒", + "code": "E87.200" + }, + { + "name": "酸痛", + "code": "M79.100" + }, + { + "name": "里急后重", + "code": "R19.800" + }, + { + "name": "里急后重无恶心", + "code": "R19.800" + }, + { + "name": "里急后重,无恶心", + "code": "R19.800" + }, + { + "name": "重度营养不良", + "code": "E43.x00" + }, + { + "name": "重度贫血", + "code": "D64.901" + }, + { + "name": "重度食管静脉曲张", + "code": "I85.x02" + }, + { + "name": "量少", + "code": "N92.600" + }, + { + "name": "针刺痛", + "code": "R20.100" + }, + { + "name": "钝痛", + "code": "R10.x04" + }, + { + "name": "锯齿状息肉", + "code": "K62.102" + }, + { + "name": "门诊", + "code": "Z71.x00" + }, + { + "name": "闭经", + "code": "N91.x00" + }, + { + "name": "间变性大细胞淋巴瘤", + "code": "C85.400" + }, + { + "name": "间变性大细胞淋巴瘤 ALK 阳性", + "code": "C85.401" + }, + { + "name": "间变性大细胞淋巴瘤 ALK 阴性", + "code": "C85.402" + }, + { + "name": "间接胆红素升高", + "code": "R17.x02" + }, + { + "name": "间质性肺炎", + "code": "J84.x00" + }, + { + "name": "阑尾周围炎", + "code": "K36.x00" + }, + { + "name": "阑尾炎", + "code": "K35.x00" + }, + { + "name": "阑尾粘膜慢性炎", + "code": "K36.x00" + }, + { + "name": "阴道出血", + "code": "N93.900" + }, + { + "name": "阴道异常出血", + "code": "N93.900" + }, + { + "name": "阴道流血", + "code": "N93.900" + }, + { + "name": "阵发性疼痛", + "code": "R52.x02" + }, + { + "name": "阵发性隐痛", + "code": "R10.x05" + }, + { + "name": "阿尔茨海默病", + "code": "G30.x00" + }, + { + "name": "附件切除术后", + "code": "Z90.703" + }, + { + "name": "陈旧性心肌梗死", + "code": "I25.200" + }, + { + "name": "陈旧性脑梗死", + "code": "I69.x00" + }, + { + "name": "降结肠癌", + "code": "C18.600" + }, + { + "name": "降结肠腺癌", + "code": "C18.601" + }, + { + "name": "降钙素原升高", + "code": "R79.804" + }, + { + "name": "限制型心肌病", + "code": "I42.500" + }, + { + "name": "隆起", + "code": "R22.x02" + }, + { + "name": "随访", + "code": "Z09.x00" + }, + { + "name": "隐痛", + "code": "R10.x03" + }, + { + "name": "隐痛不适", + "code": "R10.x03" + }, + { + "name": "雷诺氏综合征", + "code": "I73.000" + }, + { + "name": "震颤", + "code": "R25.x00" + }, + { + "name": "霍奇金淋巴瘤", + "code": "C81.x00" + }, + { + "name": "静脉曲张", + "code": "I83.x00" + }, + { + "name": "静脉血栓栓塞", + "code": "I82.x00" + }, + { + "name": "非小细胞肺癌", + "code": "C34.x04" + }, + { + "name": "非酒精性脂肪性肝病", + "code": "K76.000" + }, + { + "name": "非酒精性脂肪肝", + "code": "K76.001" + }, + { + "name": "非霍奇金淋巴瘤", + "code": "C85.900" + }, + { + "name": "面色苍白", + "code": "R23.100" + }, + { + "name": "靶向治疗", + "code": "Z51.801" + }, + { + "name": "靶向治疗中", + "code": "Z51.801" + }, + { + "name": "靶向治疗后", + "code": "Z51.801" + }, + { + "name": "颈动脉多发硬化性斑块形成", + "code": "I70.x01" + }, + { + "name": "颈动脉多发硬化性斑块形成高脂血症", + "code": "E78.x00" + }, + { + "name": "颈动脉斑块", + "code": "I70.x01" + }, + { + "name": "颈动脉硬化", + "code": "I70.x00" + }, + { + "name": "颈段食管癌", + "code": "C15.x00" + }, + { + "name": "颈静脉怒张", + "code": "R23.400" + }, + { + "name": "颊粘膜癌", + "code": "C06.000" + }, + { + "name": "颜色改变", + "code": "R23.800" + }, + { + "name": "颜面水肿", + "code": "R60.001" + }, + { + "name": "风心病", + "code": "I09.900" + }, + { + "name": "风湿性心脏病", + "code": "I09.900" + }, + { + "name": "食欲不佳", + "code": "R63.000" + }, + { + "name": "食欲不振", + "code": "R63.000" + }, + { + "name": "食欲减退", + "code": "R63.000" + }, + { + "name": "食欲欠佳", + "code": "R63.000" + }, + { + "name": "食管 - 胃交界处溃疡型混合型腺神经内分泌癌", + "code": "C16.002" + }, + { + "name": "食管上段癌", + "code": "C15.x00" + }, + { + "name": "食管上段贲门 CA", + "code": "C16.000" + }, + { + "name": "食管上段贲门癌", + "code": "C16.000" + }, + { + "name": "食管上段鳞癌", + "code": "C15.x02" + }, + { + "name": "食管下段癌", + "code": "C15.x00" + }, + { + "name": "食管下段鳞癌", + "code": "C15.x02" + }, + { + "name": "食管中 - 低分化鳞癌", + "code": "C15.x02" + }, + { + "name": "食管中上段鳞癌", + "code": "C15.x02" + }, + { + "name": "食管中低分化鳞癌", + "code": "C15.x02" + }, + { + "name": "食管中分化鳞状细胞癌", + "code": "C15.x02" + }, + { + "name": "食管中晚期癌", + "code": "C15.x00" + }, + { + "name": "食管中段癌", + "code": "C15.x00" + }, + { + "name": "食管中段鳞癌", + "code": "C15.x02" + }, + { + "name": "食管乳头状瘤", + "code": "D13.002" + }, + { + "name": "食管低分化鳞状细胞癌", + "code": "C15.x02" + }, + { + "name": "食管息肉", + "code": "D13.001" + }, + { + "name": "食管恶性肿瘤", + "code": "C15.x00" + }, + { + "name": "食管恶性肿瘤术后", + "code": "Z90.100" + }, + { + "name": "食管早期癌", + "code": "C15.x01" + }, + { + "name": "食管术后", + "code": "Z90.100" + }, + { + "name": "食管溃疡", + "code": "K22.100" + }, + { + "name": "食管溃疡型腺癌", + "code": "C15.x03" + }, + { + "name": "食管炎", + "code": "K20.x00" + }, + { + "name": "食管癌术后", + "code": "Z90.100" + }, + { + "name": "食管癌根治术后", + "code": "Z90.100" + }, + { + "name": "食管胃交界低分化腺癌", + "code": "C16.002" + }, + { + "name": "食管胃交界混合型腺神经内分泌癌", + "code": "C16.002" + }, + { + "name": "食管胃交界溃疡型低分化腺癌", + "code": "C16.002" + }, + { + "name": "食管胃交界溃疡型管状腺癌", + "code": "C16.001" + }, + { + "name": "食管胃交界溃疡型管状腺癌 II-III 级", + "code": "C16.001" + }, + { + "name": "食管胃交界溃疡型管状腺癌 III 级", + "code": "C16.001" + }, + { + "name": "食管胃交界溃疡型管状腺癌 II-III 级", + "code": "C16.001" + }, + { + "name": "食管胃交界癌", + "code": "C16.000" + }, + { + "name": "食管胃交界腺癌", + "code": "C16.000" + }, + { + "name": "食管腺癌", + "code": "C15.x03" + }, + { + "name": "食管腺癌 II 级", + "code": "C15.x03" + }, + { + "name": "食管良性肿瘤", + "code": "D13.000" + }, + { + "name": "食管贲门癌", + "code": "C16.000" + }, + { + "name": "食管隆起型腺癌", + "code": "C15.x03" + }, + { + "name": "食管静脉曲张", + "code": "I85.x00" + }, + { + "name": "食管髓质型高分化鳞状细胞癌", + "code": "C15.x04" + }, + { + "name": "食管髓质型鳞状细胞癌", + "code": "C15.x02" + }, + { + "name": "食管高分化鳞状细胞癌", + "code": "C15.x02" + }, + { + "name": "食管鳞状上皮低级别上皮内瘤变", + "code": "D00.001" + }, + { + "name": "食管鳞状上皮增生", + "code": "K22.800" + }, + { + "name": "食管鳞状上皮高级别上皮内瘤变", + "code": "D00.002" + }, + { + "name": "食管鳞状细胞癌", + "code": "C15.x02" + }, + { + "name": "食管鳞状细胞癌 II 级", + "code": "C15.x02" + }, + { + "name": "食管鳞癌", + "code": "C15.x02" + }, + { + "name": "食管鳞癌 II 级", + "code": "C15.x02" + }, + { + "name": "餐后血糖升高", + "code": "R73.902" + }, + { + "name": "饥饿感", + "code": "R63.200" + }, + { + "name": "饮水呛咳", + "code": "R13.x01" + }, + { + "name": "骨痛", + "code": "M79.600" + }, + { + "name": "骨肉瘤", + "code": "C40.x00" + }, + { + "name": "骨质增生", + "code": "M47.x00" + }, + { + "name": "骨质疏松", + "code": "M81.x00" + }, + { + "name": "骨转移", + "code": "C79.500" + }, + { + "name": "骨转移瘤", + "code": "C79.501" + }, + { + "name": "骨骼疼痛", + "code": "M79.600" + }, + { + "name": "骶管囊肿", + "code": "G96.100" + }, + { + "name": "高中分化腺癌", + "code": "C16.x03" + }, + { + "name": "高位直肠癌", + "code": "C20.x00" + }, + { + "name": "高分化子宫内膜样腺癌", + "code": "C54.100" + }, + { + "name": "高分化癌", + "code": "C16.x11" + }, + { + "name": "高密度脂蛋白低", + "code": "E78.x00" + }, + { + "name": "高密度脂蛋白降低", + "code": "E78.x01" + }, + { + "name": "高尿酸血症", + "code": "E79.000" + }, + { + "name": "高热", + "code": "R50.903" + }, + { + "name": "高甘油三酯血症", + "code": "E78.100" + }, + { + "name": "高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "高级别浆液性癌", + "code": "C56.x02" + }, + { + "name": "高级别浸润性尿路上皮癌", + "code": "C67.x01" + }, + { + "name": "高胆固醇血症", + "code": "E78.000" + }, + { + "name": "高脂血症", + "code": "E78.x00" + }, + { + "name": "高血压", + "code": "I10.x00" + }, + { + "name": "高血压危象", + "code": "I16.x00" + }, + { + "name": "高血压心脏病", + "code": "I11.x00" + }, + { + "name": "高血压心脏病伴心力衰竭", + "code": "I11.000" + }, + { + "name": "高血压病", + "code": "I10.x00" + }, + { + "name": "高血压病 1 级", + "code": "I10.x03" + }, + { + "name": "高血压病 2 级", + "code": "I10.x02" + }, + { + "name": "高血压病 3 级", + "code": "I10.x01" + }, + { + "name": "高血压肾病", + "code": "I12.x00" + }, + { + "name": "高血糖", + "code": "R73.900" + }, + { + "name": "高调肠鸣音", + "code": "R19.800" + }, + { + "name": "高钙血症", + "code": "E83.500" + }, + { + "name": "高钠血症", + "code": "E87.000" + }, + { + "name": "高钾血症", + "code": "E87.500" + }, + { + "name": "麦氏点压痛", + "code": "R10.801" + }, + { + "name": "麻木", + "code": "R20.200" + }, + { + "name": "黄染", + "code": "R17.x00" + }, + { + "name": "黄疸", + "code": "R17.x00" + }, + { + "name": "黏液腺癌", + "code": "C16.x07" + }, + { + "name": "黏膜慢性炎", + "code": "K29.700" + }, + { + "name": "黑便", + "code": "K92.100" + }, + { + "name": "黑曚", + "code": "H53.100" + }, + { + "name": "黑朦", + "code": "H53.100" + }, + { + "name": "鼻咽未分化癌", + "code": "C11.x01" + }, + { + "name": "鼻咽癌", + "code": "C11.x00" + }, + { + "name": "鼻塞", + "code": "R09.801" + }, + { + "name": "鼻息肉", + "code": "J33.x00" + }, + { + "name": "鼻衄", + "code": "R04.000" + }, + { + "name": "(两侧卵巢)高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "(两侧附件)高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "(乙状结肠)腺癌", + "code": "C18.701" + }, + { + "name": "(全子宫 + 两附件)1.宫颈内生浸润性鳞状细胞癌 II 级", + "code": "C53.901" + }, + { + "name": "(右附件)高级别浆液性乳头状癌", + "code": "C56.x02" + }, + { + "name": "(右)乳腺浸润性导管癌", + "code": "C50.x01" + }, + { + "name": "(大网膜)纤维脂肪组织内浸润的低分化腺癌", + "code": "C78.600" + }, + { + "name": "(左半结肠)大肠回盲部结外粘膜相关淋巴组织边缘区 B 细胞淋巴瘤 (MALT)", + "code": "C85.103" + }, + { + "name": "(左卵巢)中 - 低分化浆液性乳头状腺癌", + "code": "C56.x01" + }, + { + "name": "(左卵巢)中 - 低分化浆液性乳头状腺癌", + "code": "C56.x01" + }, + { + "name": "(左卵巢)中低分化浆液性乳头状腺癌", + "code": "C56.x01" + }, + { + "name": "(横结肠)肠管状腺瘤", + "code": "D12.x01" + }, + { + "name": "(直肠)中分化腺癌", + "code": "C20.x03" + }, + { + "name": "(直肠)大肠溃疡型管状腺癌 II 级", + "code": "C20.x03" + }, + { + "name": "(直肠)腺癌 (中度分化)", + "code": "C20.x03" + }, + { + "name": "(直肠)腺癌(中度分化)", + "code": "C20.x03" + }, + { + "name": "(肝曲)肠管状腺瘤", + "code": "D12.x01" + }, + { + "name": "(远端胃)上皮性恶性肿瘤", + "code": "C16.x00" + }, + { + "name": "(远端胃)胃体小弯早期(IIC 型)低分化腺癌", + "code": "C16.x02" + }, + { + "name": "(远端胃)胃窦小弯侧溃疡型管状腺癌 II-III 级", + "code": "C16.x01" + } +] \ No newline at end of file diff --git a/runtime/ops/mapper/medcleanstd_full_operator/process.py b/runtime/ops/mapper/medcleanstd_full_operator/process.py new file mode 100644 index 00000000..7d934e66 --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/process.py @@ -0,0 +1,379 @@ +from __future__ import annotations + +import json +import os +import re +import sys +from pathlib import Path +from typing import Any, Dict, List + +from datamate.core.base_op import Mapper + +NER_MODEL_DIR = "/models/MedCleanStd/SiameseUIE" +NORMALIZER_MODEL_DIR = "/models/MedCleanStd/bge-small-zh-v1.5" +SCHEMA_ALIASES = { + "disease": "疾病", + "symptom": "症状", + "drug": "药品", + "surgery": "手术", + "examination": "检查", + "exam": "检查", + "test": "检验", +} + + +def _ensure_path() -> None: + script_dir = os.path.dirname(os.path.abspath(__file__)) + if script_dir not in sys.path: + sys.path.insert(0, script_dir) + + +def _resolve_input(sample: Dict[str, Any]) -> str: + for key in ("filePath", "file_path", "source_path", "text"): + value = sample.get(key) + if isinstance(value, str) and value.strip(): + return value.strip() + return "" + + +def _resolve_text(sample: Dict[str, Any]) -> str: + for key in ("corrected_text", "parsed_text", "text"): + value = sample.get(key) + if isinstance(value, str) and value.strip(): + return value + return "" + + +def _resolve_source_path(sample: Dict[str, Any]) -> str: + for key in ("filePath", "file_path", "parsed_source_path", "source_path"): + value = sample.get(key) + if isinstance(value, str) and value.strip(): + return value.strip() + return "" + + +def _resolve_export_dir(sample: Dict[str, Any], source_path: str) -> str: + for key in ("export_path", "exportPath"): + value = sample.get(key) + if isinstance(value, str) and value.strip(): + return value.strip() + + if source_path: + return os.path.dirname(source_path) + return "" + + +def _resolve_result_json_path(sample: Dict[str, Any]) -> str: + source_path = _resolve_source_path(sample) + if not source_path: + return "" + + export_dir = _resolve_export_dir(sample, source_path) + if not export_dir: + return "" + + file_name = sample.get("fileName") + if not isinstance(file_name, str) or not file_name.strip(): + file_name = os.path.basename(source_path) + + stem, _ = os.path.splitext(file_name) + if not stem: + stem = "medclean_result" + return os.path.join(export_dir, f"{stem}.json") + + +def _persist_result_json(sample: Dict[str, Any]) -> str: + result_path = _resolve_result_json_path(sample) + if not result_path: + raise ValueError("No filePath available for JSON output") + + payload = dict(sample) + payload["result_json_path"] = result_path + Path(result_path).parent.mkdir(parents=True, exist_ok=True) + with open(result_path, "w", encoding="utf-8") as fh: + json.dump(payload, fh, ensure_ascii=False, indent=2, default=str) + return result_path + + +def _split_by_sentences(text: str, max_sentences: int) -> List[str]: + if not text: + return [] + + sentences = re.split(r"([。!?;;.!?\n])", text) + complete_sentences: List[str] = [] + for idx in range(0, len(sentences) - 1, 2): + sentence = sentences[idx] + if idx + 1 < len(sentences): + sentence += sentences[idx + 1] + if sentence.strip(): + complete_sentences.append(sentence) + + if len(sentences) % 2 == 1 and sentences[-1].strip(): + complete_sentences.append(sentences[-1]) + + if not complete_sentences: + return [text] if text.strip() else [] + + groups: List[str] = [] + current: List[str] = [] + count = 0 + for sentence in complete_sentences: + current.append(sentence) + count += 1 + if count >= max_sentences: + groups.append("".join(current)) + current = [] + count = 0 + if current: + groups.append("".join(current)) + return groups + + +class MedCleanStdFullMapper(Mapper): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.parse_overwrite_text = str(kwargs.get("parse_overwrite_text", "true")).lower() == "true" + self.use_proper_corrector = str(kwargs.get("use_proper_corrector", "false")).lower() == "true" + self.segment_length = int(kwargs.get("segment_length", 100)) + self.max_text_length = int(kwargs.get("max_text_length", 200)) + self.correct_overwrite_text = str(kwargs.get("correct_overwrite_text", "true")).lower() == "true" + + raw_schema = kwargs.get("ner_schema", "疾病,症状") + if isinstance(raw_schema, str): + normalized = raw_schema.replace(",", ",") + schema_items = [item.strip() for item in normalized.split(",") if item.strip()] + else: + schema_items = raw_schema or ["疾病", "症状"] + self.ner_schema = [SCHEMA_ALIASES.get(str(item).strip().lower(), str(item).strip()) for item in schema_items] + + self.inference_batch_size = int(kwargs.get("inference_batch_size", 64)) + self.max_sentences = int(kwargs.get("max_sentences", 80)) + self.use_l1_cache = str(kwargs.get("use_l1_cache", "true")).lower() == "true" + self.batch_size = int(kwargs.get("batch_size", 24)) + self.max_entity_length = int(kwargs.get("max_entity_length", 50)) + + self._parser = None + self._corrector = None + self._ner = None + self._normalizer = None + + def _init_parser(self) -> None: + if self._parser is not None: + return + _ensure_path() + from myparser.parser import DocParser + + self._parser = DocParser() + + def _init_corrector(self) -> None: + if self._corrector is not None: + return + _ensure_path() + from mycorrector.corrector import MedicalCorrector + + self._corrector = MedicalCorrector( + use_proper_corrector=self.use_proper_corrector, + segment_length=self.segment_length, + max_text_length=self.max_text_length, + ) + + def _init_ner(self) -> None: + if self._ner is not None: + return + _ensure_path() + from ner.ner_npu import SiameseNER + + if not os.path.exists(NER_MODEL_DIR): + raise FileNotFoundError(f"NER model directory not found: {NER_MODEL_DIR}") + self._ner = SiameseNER( + model_dir=NER_MODEL_DIR, + inference_batch_size=self.inference_batch_size, + ) + + def _init_normalizer(self) -> None: + if self._normalizer is not None: + return + _ensure_path() + from normalizer.normalizer_npu import MedicalNormalizer + + if not os.path.exists(NORMALIZER_MODEL_DIR): + raise FileNotFoundError( + f"Normalizer model directory not found: {NORMALIZER_MODEL_DIR}" + ) + self._normalizer = MedicalNormalizer( + model_dir=NORMALIZER_MODEL_DIR, + batch_size=self.batch_size, + use_l1_cache=self.use_l1_cache, + ) + + def _run_parse(self, sample: Dict[str, Any]) -> None: + self._init_parser() + source = _resolve_input(sample) + if not source: + raise ValueError("No input source found") + + if os.path.exists(source): + parsed_text = self._parser.parse(source) + sample["parsed_source_path"] = source + else: + parsed_text = source + + sample["parsed_text"] = parsed_text + if self.parse_overwrite_text: + sample["text"] = parsed_text + sample["medclean_parse_metadata"] = { + "source_exists": os.path.exists(source), + "overwrite_text": self.parse_overwrite_text, + } + + def _run_correct(self, sample: Dict[str, Any]) -> None: + self._init_corrector() + input_text = _resolve_text(sample) + if not input_text: + raise ValueError("No text found for correction") + + corrected_text, details = self._corrector.correct(input_text) + sample["corrected_text"] = corrected_text + sample["correction_details"] = details + if self.correct_overwrite_text: + sample["text"] = corrected_text + sample["medclean_correct_metadata"] = { + "use_proper_corrector": self.use_proper_corrector, + "segment_length": self.segment_length, + "max_text_length": self.max_text_length, + "overwrite_text": self.correct_overwrite_text, + } + + def _run_ner(self, sample: Dict[str, Any]) -> None: + self._init_ner() + text = _resolve_text(sample) + if not text: + raise ValueError("No text found for NER") + + chunks = _split_by_sentences(text, self.max_sentences) + offsets: List[int] = [] + total = 0 + for chunk in chunks: + offsets.append(total) + total += len(chunk) + + entities: List[Dict[str, Any]] = [] + for chunk_id, chunk in enumerate(chunks): + chunk_entities = self._ner.extract(chunk, schema=self.ner_schema) + for entity in chunk_entities: + entity["chunk_id"] = chunk_id + entity["chunk_offset"] = offsets[chunk_id] + entity["global_start"] = offsets[chunk_id] + entity.get("start", 0) + entity["global_end"] = offsets[chunk_id] + entity.get("end", 0) + entities.append(entity) + + sample["entities"] = entities + sample["entity_count"] = len(entities) + sample["medclean_ner_metadata"] = { + "ner_schema": self.ner_schema, + "inference_batch_size": self.inference_batch_size, + "max_sentences": self.max_sentences, + "model_dir": NER_MODEL_DIR, + } + + def _run_normalize(self, sample: Dict[str, Any]) -> None: + self._init_normalizer() + entities = sample.get("entities") or [] + if not isinstance(entities, list): + raise ValueError("Invalid entities payload for normalization") + + if not entities: + sample["normalized_entities"] = [] + sample["normalized_entity_count"] = 0 + sample["dropped_entities_count"] = 0 + sample["entities"] = [] + sample["medclean_normalize_metadata"] = { + "use_l1_cache": self.use_l1_cache, + "batch_size": self.batch_size, + "max_entity_length": self.max_entity_length, + "model_dir": NORMALIZER_MODEL_DIR, + "skipped_reason": "no_entities", + } + try: + sample["result_json_path"] = _persist_result_json(sample) + except Exception as exc: + sample["result_json_error"] = str(exc) + return + + texts: List[str] = [str(entity.get("text", "")) for entity in entities] + normalized_results = self._normalizer.normalize_batch(texts) + + normalized_entities: List[Dict[str, Any]] = [] + dropped_count = 0 + for entity, normalized in zip(entities, normalized_results): + merged = dict(entity) + merged["normalized"] = normalized + length = len(str(merged.get("text", ""))) + if length <= self.max_entity_length: + normalized_entities.append(merged) + else: + dropped_count += 1 + + sample["normalized_entities"] = normalized_entities + sample["normalized_entity_count"] = len(normalized_entities) + sample["dropped_entities_count"] = dropped_count + sample["entities"] = normalized_entities + sample["medclean_normalize_metadata"] = { + "use_l1_cache": self.use_l1_cache, + "batch_size": self.batch_size, + "max_entity_length": self.max_entity_length, + "model_dir": NORMALIZER_MODEL_DIR, + } + + try: + sample["result_json_path"] = _persist_result_json(sample) + except Exception as exc: + sample["result_json_error"] = str(exc) + + def execute(self, sample: Dict[str, Any]) -> Dict[str, Any]: + stage_status: Dict[str, str] = {} + sample["medclean_pipeline"] = "parse->correct->ner->normalize" + + try: + self._run_parse(sample) + stage_status["parse"] = "ok" + except Exception as exc: + sample["medclean_parse_error"] = str(exc) + stage_status["parse"] = "error" + sample["medclean_pipeline_status"] = stage_status + return sample + + try: + self._run_correct(sample) + stage_status["correct"] = "ok" + except Exception as exc: + sample["medclean_correct_error"] = str(exc) + stage_status["correct"] = "error" + sample["medclean_pipeline_status"] = stage_status + return sample + + try: + self._run_ner(sample) + stage_status["ner"] = "ok" + except Exception as exc: + sample["medclean_ner_error"] = str(exc) + stage_status["ner"] = "error" + sample["medclean_pipeline_status"] = stage_status + return sample + + try: + self._run_normalize(sample) + stage_status["normalize"] = "ok" + except Exception as exc: + sample["medclean_normalize_error"] = str(exc) + stage_status["normalize"] = "error" + sample["medclean_pipeline_status"] = stage_status + return sample + + sample["medclean_pipeline_status"] = stage_status + if sample.get("result_json_path"): + try: + sample["result_json_path"] = _persist_result_json(sample) + except Exception as exc: + sample["result_json_error"] = str(exc) + return sample diff --git a/runtime/ops/mapper/medcleanstd_full_operator/requirements.txt b/runtime/ops/mapper/medcleanstd_full_operator/requirements.txt new file mode 100644 index 00000000..e902d58b --- /dev/null +++ b/runtime/ops/mapper/medcleanstd_full_operator/requirements.txt @@ -0,0 +1,8 @@ +python-docx>=0.8.11 +pycorrector>=0.4.5 +torch>=2.0.0 +torch_npu>=2.1.0 +modelscope>=1.9.0 +sentence-transformers>=2.2.0 +faiss-cpu>=1.7.4 +numpy>=1.21.0