From 4ee0ad87bbf81c90556488ac3e2f0b7969c1bec7 Mon Sep 17 00:00:00 2001 From: Furen Xiao Date: Wed, 29 Jul 2026 13:48:09 +0800 Subject: [PATCH] medgemma works --- .gitignore | 2 + 2026/export-all-patho.py | 16 ++ ntuh/new_window.png | Bin 91002 -> 0 bytes ntuh/old_window.png | Bin 34008 -> 0 bytes ntuh/screenshot.png | Bin 128972 -> 0 bytes patho/0727/extract.py | 435 ++++++++++++++++++++++++++++++++++++++ patho/0727/fetch.py | 64 ++++++ patho/extract-medgemma.py | 266 +++++++++++++++++++++++ patho/extract.py | 423 ++++++++++++++++++++++++++++++++++++ patho/fetch.py | 64 ++++++ 10 files changed, 1270 insertions(+) create mode 100644 2026/export-all-patho.py delete mode 100755 ntuh/new_window.png delete mode 100755 ntuh/old_window.png delete mode 100755 ntuh/screenshot.png create mode 100755 patho/0727/extract.py create mode 100755 patho/0727/fetch.py create mode 100644 patho/extract-medgemma.py create mode 100755 patho/extract.py create mode 100755 patho/fetch.py diff --git a/.gitignore b/.gitignore index c7d91ce..d0833e6 100644 --- a/.gitignore +++ b/.gitignore @@ -167,6 +167,8 @@ components .vscode/ whoosh_index/ +*.csv +*.log *.pdf *.seg *.sql diff --git a/2026/export-all-patho.py b/2026/export-all-patho.py new file mode 100644 index 0000000..7b2bafb --- /dev/null +++ b/2026/export-all-patho.py @@ -0,0 +1,16 @@ +import pandas as pd +import pymysql +import os + +# Configure database connection +conn = pymysql.connect(host='localhost', user='ntuh', password='n122119493', db='adm15') + +# Execute query and load into a pandas DataFrame +df = pd.read_sql_query("SELECT * FROM registry_pathologyreport", conn) + +# Export DataFrame to an Excel file +# output_file = '/data/patho-2026.xlsx' +# df.to_excel(output_file, index=False) +output_file_parquet = '/data/patho-2026.parquet' +df.to_parquet(output_file_parquet, index=False, engine='pyarrow') +print(f"Data exported to {output_file_parquet}") diff --git a/ntuh/new_window.png b/ntuh/new_window.png deleted file mode 100755 index c568d103038078eafe9206253c7b6fa04a53eb79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91002 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%0Dl z+r{U`F`HE%SiWp0_q@GUGXzl|3i#-n?d_EZ-*2Iea6t1p&7PrZ*UYSuGma>86$!+z zK>ywJiIk0A^LM|aZ&az$Qgs;{e?xNNUzKrVV4oUpP`!vUs0w0w^XN9K|CU`{n2 zqhk;G89i9n93pZhuNRC*D%l?jsQA^|b_^{R91P6nak+V9oVOi9x|hjXi!XGCR$Zo=20_*N%Am(A)a> zA@<+E&v56v`>;CkX#0-!3TbgkE@GyqT2w-c)qkL~Ga7Rc538iBr+4~cwhcCuqy*Pt zpN#Uj69X7B4xGw`Rl>bGLv4@Mi|1(W(PEaN{PquVVj0Ud#U$zSx`s1uvC#|ZT|!- zO|8okx2gglG--8z@lN(9FbKpXYrHCh-%V6i5l%NoOp(jZiuKfZbWC^R+))m|uF7lG znr-4XR4Uk_d9Xf_fWs&bwogD9Fx&cr+4Jzkr?TNjoVlu?`^NHir*S;G`+)rNJa8>B z#NPlAEVL8*yJWE42RxXW<%UWewogFAPrx+8~XRZ-+g)aZDNXU>|-TRs7+4(&xzL;5O8W@~$?-dtvqJPakbkBJaH~ z`PyceGv z^$exlJNi66_zs=0qh;6W8Q-Uoba7%~D&QyG%{EpY+p_dkG}O%9STaOl1Fx)>!d z$!&_+Z%|;Kv_zkvNVBp3rQ#!0gP9{}BjeD6 zVgw9cBno11XEKfhYjs`ff4c$y=_~Y9pYP5Ov@B|wxGH7`NKkCUu1^MswFv`Zb58vu zn?}IjD{-AH;tpal<+GgWJh4yC6c@tv;IevE+}5+GJ-D#rem&YK(B->-BD=FN)9Kyd zOLenAT73ECWIbYwxs3K%&Q{mBSOjrx3Q)gX+*b3UiJ|ASQAJk1OcSb!p-Gw4hG1NX z5Spu2WPr!x45XxNF#_>I+QbX$fn>`MtcvXMcFp1;+4 zV2eZdOVNsi%yB=%JP>Dhy6HaTzr4~=^1;~xJZ3A}_3n5;=eD~PKDmTpd-~=KeiJ++ za|P?8u01=jI)J&42BSVsm5u1^+?$^NbtYuJ>YEM7yr1Kir-vz2y7I`hPwr==A)6*uo1 t6juk6%v73_!*x3uZ2Dsx&^P=~`3Nft8Lqc$Mj_xwOh{U=h+pg5{{ppdea8R* diff --git a/ntuh/old_window.png b/ntuh/old_window.png deleted file mode 100755 index b6d6a7f9ff71b54810c246555731270d6135f32f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34008 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 X__F@v&Rhs^1`hq(Mz=6GAHMisQ9x;s diff --git a/ntuh/screenshot.png b/ntuh/screenshot.png deleted file mode 100755 index ec54d04d3ea24f56694d70f11cdd2d1a175e225b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128972 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%0A!hp&`nl?m~ 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 WiE=7m#*~Z%Ka!$yBKa@ge)wMtPe~&H diff --git a/patho/0727/extract.py b/patho/0727/extract.py new file mode 100755 index 0000000..fbc3446 --- /dev/null +++ b/patho/0727/extract.py @@ -0,0 +1,435 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import csv +import re +import openpyxl +from bs4 import BeautifulSoup + +script_dir = os.path.dirname(os.path.abspath(__file__)) +base_dir = os.path.dirname(script_dir) + + +def is_valid_tissue(t): + if not t or not isinstance(t, str): + return False + t = t.strip() + clean_t = re.sub(r'[\.,\-\_\s\(\)\"\']', '', t) + clean_no_dim = re.sub(r'\d+[\.\*x\d]*cm', '', clean_t, flags=re.IGNORECASE) + if not clean_t or len(clean_t) <= 2 or clean_t.lower() in ['none', 'nil']: + return False + if clean_t.upper() in ['BM', 'BX', 'CX', 'HX', 'PX', 'DX', 'NA', 'NB']: + return False + tumor_terms = ['thrombus', 'clot', 'hematoma', 'abscess', 'carcinoma', 'adenocarcinoma', 'adenoma', 'polyp', 'cyst', 'synovialcyst', 'tumor', 'tumour', 'mass', 'nodule', 'glioma', 'astrocytoma', 'meningioma', 'schwannoma', 'lymphoma', 'melanoma'] + if clean_t.lower() in tumor_terms or any(clean_t.lower().endswith(k) for k in ['cyst', 'tumor', 'tumour', 'glioma']) or any(clean_no_dim.lower().endswith(k) for k in ['cyst', 'tumor', 'tumour', 'glioma']) or 'subcutaneoustumor' in clean_t.lower() or 'intraduraltumor' in clean_t.lower() or 'hyperintensity' in clean_t.lower() or 'hypointensity' in clean_t.lower() or 'duraseeding' in clean_t.lower() or 'cavitytumor' in clean_t.lower(): + return False + if '位置不明' in t or 'sitenotstate' in clean_t.lower() or 'siteunspecified' in clean_t.lower(): + return False + if any(k in clean_t.lower() for k in ['recurrenttumor', 'granulationtis', 'suspecttumor', 'rotumor', 'ronecros']): + return False + invalid_keywords = ['送檢單位', '切取日期', '固定日期', '檢查項目', '病理報告', '病歷號', '版本:', 'Result:', 'Comments:'] + if any(kw in t for kw in invalid_keywords): + return False + if any(t.startswith(prefix) for prefix in ['送檢', '切取', '檢查', '病理', '病歷', '版本']): + return False + return True + + +def extract_tissue(html_content, path_code=''): + if not html_content or not isinstance(html_content, str): + return "" + + soup = BeautifulSoup(html_content, 'html.parser') + + tissue = "" + # 1. Check lblTissue span + span = soup.find('span', id=lambda x: x and 'lblTissue' in x) + if span and is_valid_tissue(span.text): + tissue = span.text.strip() + + # 2. Check table row with 組織由來 + if not tissue: + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + if '組織由來' in ths: + idx = ths.index('組織由來') + if idx < len(tds) and is_valid_tissue(tds[idx]): + tissue = tds[idx] + break + elif '組織由來' in tr.text: + if tds and is_valid_tissue(tds[-1]): + tissue = tds[-1] + + # 3. Check 器官與術式 / 器官 / 部位 / 檢體部位 + if not tissue: + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + for header in ['器官與術式', '器官', '部位', '檢體部位']: + if header in ths: + idx = ths.index(header) + if idx < len(tds) and is_valid_tissue(tds[idx]): + tissue = tds[idx] + break + if tissue: + break + + # 4. Dig site from 組織學診斷 row if tissue is still empty + if not tissue: + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + if any('組織學診斷' in th for th in ths): + if tds: + val = tds[-1] + if val: + s = re.sub(r'^\d+[\.\s]*', '', val) + split_site = re.split(r',\s*(?:\d+(?:\-\d+)?\s*cm(?:\s+AAV|\s+above\s+anal\s+verge|\s+[A-Za-z]+)?|AAV|above\s+anal\s+verge|tumor\s+resection|tumor\s+excision|metastasis\s+excision|effusion\s+drainage|drainage|reconstruction|debridement|spondylectomy|laminectomy|discectomy|arthroplasty|fixation|fusion|stripping|incisional(?:\s+biopsy)?|excisional(?:\s+biopsy)?|punch(?:\s+biopsy)?|shave(?:\s+biopsy)?|wedge(?:\s+biopsy)?|core(?:\s+biopsy)?|site\s+not\s+state(?:d)?|site\s+unspecified|\?\s*side|\?|craniotomy(?:\s+and\s+|\s*\&\s*|\s+)excision|craniotomy|FESS|transphenoid|transsphenoidal|panendoscopic|choledochoscopic|colonoscopic|endoscopical|endoscopic|laparoscopic|transcervical|open|biopsy|polypectomy|(?:partial|subtotal|radical|wide|total)?\s*resection|excision|curettage|aspiration|dissection|cholecystectomy|hysterectomy|nephrectomy|lobectomy|mastectomy|meningioma|lipoma|fibroma|adenoma|carcinoma|polyp|hyperplasia|cyst|gastritis|sinusitis|cholecystectomy|fibrosis)\b', s, flags=re.IGNORECASE)[0] + split_site = re.split(r',\s*(?:corpus|cervix)\b', split_site, flags=re.IGNORECASE)[0] + if is_valid_tissue(split_site) and split_site != val: + tissue = split_site.strip() + break + + # 5. Check active report tab link: + if not tissue: + a_tag = soup.find('a', href=lambda x: x and 'contentHolder' in x, title=True) + if a_tag and is_valid_tissue(a_tag.get('title')): + tissue = a_tag['title'].strip() + + # 6. Check selected option: + if not tissue: + opt = soup.find('option', selected=True) + if opt and opt.text: + m = re.search(r'\(([^()]+)\)$', opt.text) + if m and is_valid_tissue(m.group(1)): + tissue = m.group(1).strip() + + # 7. Dig from 檢查報告 (lblResult or textarea or full text) if still blank/dot + if not tissue: + ta = soup.find('textarea') + res_span = soup.find('span', id=lambda x: x and 'lblResult' in x) + raw_text = (ta.get_text(separator='\n') if ta else (res_span.get_text(separator='\n') if res_span else soup.get_text(separator='\n'))).strip() + if raw_text: + m = re.search(r'(?:Pathology Number of specimen|Pathology Number|Specimen Number|sample number|specimen number|from sample|from specimen|sample|specimen)\s*[::]\s*([A-Za-z0-9_\-]+)|(?:from sample|from specimen|sample number|specimen number)\s*[::\s]\s*([A-Za-z0-9_\-]+)', raw_text, re.IGNORECASE) + matched_code = (m.group(1) or m.group(2)).strip() if m else None + if matched_code: + tissue = matched_code + else: + lines = [l.strip() for l in raw_text.splitlines() if l.strip()] + if lines: + first_line = lines[0] + if not any(k in first_line for k in ['MACROSCOPIC', 'MICROSCOPIC', 'The specimen', 'Grossly']): + split_site = re.split(r',\s*(?:\d+(?:\-\d+)?\s*cm(?:\s+AAV|\s+above\s+anal\s+verge|\s+[A-Za-z]+)?|AAV|above\s+anal\s+verge)\b', first_line, flags=re.IGNORECASE)[0] + split_site = re.split(r',\s*(?:[A-Za-z\s]+)?(?:tumor\s+resection|tumor\s+excision|spondylectomy|laminectomy|discectomy|thrombus|clot|hematoma|abscess|echo-guided|ct-guided|us-guided|ultrasound-guided|incisional|excisional|punch|shave|wedge|core|needle|fine\s+needle|colonoscopic|endoscopic|laparoscopic|transcervical|open)?\s*(?:biopsy|aspiration|fna|polypectomy|resection|excision|curettage|dissection|reconstruction|debridement|drainage|tumor\s+resection|tumor\s+excision|spondylectomy|laminectomy|discectomy|tubular adenoma|adenocarcinoma|carcinoma|polyp|abscess|thrombus|clot|hematoma|necrosis)\b[^\n\r,]*', first_line, flags=re.IGNORECASE)[0] + split_site = re.split(r',\s*labeled\s+as\b', split_site, flags=re.IGNORECASE)[0] + if is_valid_tissue(split_site): + tissue = split_site.strip() + + # If tissue is LN or a reference code like S2555571, expand or check description + if tissue.upper() == 'LN': + tissue = 'Lymph node' + + if not tissue: + span = soup.find('span', id=lambda x: x and 'lblTissue' in x) + if span and span.text.strip().upper() == 'LN': + tissue = 'Lymph node' + + if tissue and re.match(r'^[A-Za-z0-9_\-]+$', tissue): + ta = soup.find('textarea') + res_span = soup.find('span', id=lambda x: x and 'lblResult' in x) + raw_text = (ta.get_text(separator='\n') if ta else (res_span.get_text(separator='\n') if res_span else soup.get_text(separator='\n'))).strip() + if raw_text: + m = re.search(rf'{re.escape(tissue)}\s+([A-Za-z][^\n\r]+)', raw_text) + if m: + desc = m.group(1).strip() + split_site = re.split(r',\s*(?:tumor\s+resection|tumor\s+excision|excision|resection|biopsy|carcinoma|adenoma|metastatic)\b', desc, flags=re.IGNORECASE)[0] + if is_valid_tissue(split_site) and split_site != desc and not re.match(r'^[A-Za-z0-9_\-]+$', split_site): + tissue = split_site.strip() + + return tissue + + +def extract_short_diagnosis(html_content, path_code=''): + if not html_content or not isinstance(html_content, str): + return "" + + if str(path_code).strip() in ['S2605800', 'S2602629'] or any(code in str(html_content) for code in ['S2605800', 'S2602629']): + soup = BeautifulSoup(html_content, 'html.parser') + ta = soup.find('textarea') + if ta: + lines = [l.strip() for l in ta.text.splitlines() if l.strip()] + if lines: + return lines[0] + + soup = BeautifulSoup(html_content, 'html.parser') + + # 1. Check table rows for 組織學診斷 / 診斷描述 + table_diags = [] + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + for h in ths: + if any(k in h for k in ['組織學診斷', '診斷描述']): + idx = ths.index(h) + if idx < len(tds): + val = tds[idx].text.strip() if hasattr(tds[idx], 'text') else str(tds[idx]).strip() + if val and val not in table_diags: + table_diags.append(val) + + if not table_diags: + for tr in soup.find_all('tr'): + cells = [td.text.strip() for td in tr.find_all(['th', 'td'])] + text = ' '.join(cells) + if any(k in text for k in ['組織學診斷', '診斷描述']): + tds = tr.find_all('td') + if tds: + val = tds[-1].text.strip() + if val and val not in table_diags: + table_diags.append(val) + + if table_diags: + return ', '.join(table_diags) + + # 2. Check textarea or lblResult + ta = soup.find('textarea') + res_span = soup.find('span', id=lambda x: x and 'lblResult' in x) + raw_text = (ta.text if ta else (res_span.text if res_span else '')).strip() + + if raw_text: + # Check explicit Histological diagnosis field in text + m_histo = re.search(r'Histological diagnosis[::\s]\s*([^\*\n\r]+)', raw_text, re.IGNORECASE) + if m_histo and m_histo.group(1).strip(): + return m_histo.group(1).strip() + + # Special handling for Molecular / Special laboratory reports starting with 送檢單位 or 檢查項目 + if '送檢單位' in raw_text or '檢查項目' in raw_text: + if '檢查項目:' in raw_text or '檢查項目:' in raw_text: + m = re.search(r'檢查項目[::]\s*(.*?)(?:Pathology Number|Probe:|Control:|Duration|Result:|檢驗報告|送檢|\n|\r|\s{4,}|$)', raw_text, re.DOTALL) + if m and m.group(1).strip(): + item = m.group(1).strip() + m_res = re.search(r'(?:Result:|檢驗報告[::])\s*(.*?)(?:Procedures:|Comments:|參考文獻|Ref:|\n\n|\r\n\r\n|\s{4,}|$)', raw_text, re.DOTALL) + if m_res and m_res.group(1).strip(): + res_val = m_res.group(1).strip().replace('\n', ' ').replace('\t', ' ') + res_val = re.sub(r'\s{2,}', ' ', res_val) + return f'{item}; Result: {res_val}' + return item + elif '檢驗報告' in raw_text or 'Result:' in raw_text: + m_res = re.search(r'(?:Result:|檢驗報告[::])\s*(.*?)(?:Procedures:|Comments:|參考文獻|Ref:|\n\n|\r\n\r\n|\s{4,}|$)', raw_text, re.DOTALL) + if m_res and m_res.group(1).strip(): + res_val = m_res.group(1).strip().replace('\n', ' ').replace('\t', ' ') + return re.sub(r'\s{2,}', ' ', res_val) + + # Standard Pathology Report + cut_patterns = [ + r'The specimen submitted', r'Grossly', r'Microscopically', r'Pathology Number', + r'送檢單位', r'檢查項目', r'Result:', r'Comments:', r'Ref:', r'\[\d+\]\.' + ] + text_cut = re.split('|'.join(cut_patterns), raw_text, flags=re.IGNORECASE)[0] + parts = re.split(r'\n|\r|\t|\s{2,}', text_cut) + non_empty = [p.strip() for p in parts if p.strip()] + if non_empty: + first_p = non_empty[0] + m_end = re.search(r',\s*([A-Z][A-Za-z\s\-]+(?:adenoma|carcinoma|polyp|hyperplasia|gastritis|inflammation|fibrosis|cyst|lipoma|lymphoma))$', first_p, re.IGNORECASE) + if m_end: + return m_end.group(1).strip() + return first_p + + # 3. Fallback to lblBedDiagnosis if available + bed_span = soup.find('span', id=lambda x: x and 'lblBedDiagnosis' in x) + if bed_span and bed_span.text.strip(): + return bed_span.text.strip() + + return "" + + +def classify_site(tissue, diagnosis, html=''): + site_text = (str(tissue) + ' ' + str(diagnosis)).lower() + site_text = re.sub(r'\bpd\-?l1\b', '', site_text, flags=re.IGNORECASE) + + spinal_kw = [ + 'spine', 'spinal', 'vertebra', 'vertebrae', 'vertebral', 'lumbar', 'thoracic', 'cervical', + 'sacral', 'sacrum', 'epidural', 'paraspinal', 'disc', 'spondylectomy', 'laminectomy', 'discectomy', + 'ligamentum flavum', 'ligamentum', 'ulbd', 'neural placode', 'placode' + ] + spinal_patterns = [r'\b' + k + r'\b' for k in spinal_kw] + [r'\b[ltcs]\d+(?:[\-\/]\d+)?\b'] + + cranial_kw = [ + 'brain', 'brainstem', 'cerebrum', 'cerebral', 'cerebellar', 'cerebellum', 'pituitary', 'cranial', 'cranium', + 'skull', 'dura', 'dural', 'temporal', 'frontal', 'parietal', 'occipital', 'ventricle', + 'paranasal', 'head', 'scalp', 'orbit', 'sellar', 'suprasellar', 'cerebellopontine', 'cp angle', 'cpangle', + 'meninx', 'meninges', 'sphenoid', 'sinonasal', 'nasal cavity', 'meningioma', 'forehead' + ] + cranial_patterns = [r'\b' + k + r'\b' for k in cranial_kw] + [r'\bcp\s+angle\b', r'\bnasal\s+cavity\b'] + + is_spinal = any(re.search(p, site_text) for p in spinal_patterns) + is_cranial = any(re.search(p, site_text) for p in cranial_patterns) + + if 'dura mater' in site_text or 'dural' in site_text and 'epidural' not in site_text: + is_cranial = True + + if is_spinal and not is_cranial: + return 'spinal' + elif is_cranial and not is_spinal: + return 'cranial' + elif is_spinal and is_cranial: + if any(k in site_text for k in ['brain', 'cerebrum', 'dura mater']): + return 'cranial' + return 'spinal' + + return 'other' + + +def classify_type(tissue, diagnosis, html=''): + diag_str = str(diagnosis).lower() + text = (str(tissue) + ' ' + diag_str).lower() + + if any(k in diag_str for k in ['no evidence of', 'negative for', 'free of', 'no tumor', 'without tumor', 'no residual']): + return 'other' + + if any(k in diag_str for k in ['necrotic tissue', 'necrosis', 'organizing hematoma', 'hematoma', 'thrombus', 'clot', 'abscess', 'infarction', 'fibrosis', 'sinusitis', 'cholecystitis', 'gastritis', 'varicose']): + definitive_tumor = ['carcinoma', 'adenocarcinoma', 'adenoma', 'sarcoma', 'osteosarcoma', 'osteoma', 'astrocytoma', 'glioma', 'meningioma', 'glioblastoma', 'subependymoma', 'ependymoma', 'lipoma', 'fibroma', 'papilloma', 'lymphoma', 'melanoma', 'schwannoma', 'malignancy', 'malignant'] + if not any(k in diag_str for k in definitive_tumor): + return 'other' + + non_tumor_findings = ['granuloma', 'inflammatory cell infiltration', 'organizing hematoma', 'hematoma', 'thrombus', 'clot', 'abscess', 'necrosis', 'infarction', 'fibrosis', 'sinusitis', 'cholecystitis', 'gastritis', 'varicose', 'amyloid angiopathy'] + neoplastic_findings = [ + 'carcinoma', 'adenocarcinoma', 'adenoma', 'sarcoma', 'osteosarcoma', 'osteoma', 'chondroma', 'hemangioma', 'neuroma', 'leiomyoma', 'myxoma', + 'astrocytoma', 'glioma', 'meningioma', 'glioblastoma', 'subependymoma', 'ependymoma', 'ganglioglioma', 'oligodendroglioma', 'medulloblastoma', 'chordoma', 'hemangioblastoma', 'craniopharyngioma', 'lipoma', 'fibroma', 'papilloma', + 'polyp', 'hyperplasia', 'metastasis', 'metastatic', 'malignancy', 'malignant', + 'schwannoma', 'neurofibroma', 'melanoma', 'lymphoma', 'plasmacytosis', 'neoplastic', 'who grade', 'cns who grade' + ] + + if any(k in diag_str for k in non_tumor_findings) and not any(k in diag_str for k in neoplastic_findings): + return 'other' + + tumor_kw = [ + 'malignancy', 'malignant', 'osteoma', 'chondroma', 'hemangioma', 'neuroma', 'leiomyoma', 'myxoma', + 'subependymoma', 'ependymoma', 'ganglioglioma', 'oligodendroglioma', 'medulloblastoma', 'chordoma', 'hemangioblastoma', 'craniopharyngioma', 'who grade', 'cns who grade', 'tumor', 'tumour', 'carcinoma', 'adenocarcinoma', 'adenoma', 'sarcoma', 'osteosarcoma', + 'astrocytoma', 'glioma', 'meningioma', 'glioblastoma', 'lipoma', 'fibroma', 'papilloma', 'cyst', + 'polyp', 'hyperplasia', 'mass', 'lesion', 'neoplasm', 'metastasis', 'metastatic', + 'schwannoma', 'neurofibroma', 'melanoma', 'lymphoma', 'plasmacytosis', 'neoplastic' + ] + + if any(k in text for k in tumor_kw): + return 'tumor' + + return 'other' + + +def process_extraction(input_excel=None, output_csv=None, limit=None, mode='all'): + if input_excel is None: + input_excel = os.path.join(script_dir, 'registry_pathologyreport.xlsx') + if not os.path.exists(input_excel) and os.path.exists('registry_pathologyreport.xlsx'): + input_excel = 'registry_pathologyreport.xlsx' + + if output_csv is None: + output_csv = os.path.join(script_dir, 'registry_pathologyreport_extracted.csv') + + print(f"Opening Excel file: {input_excel} ...") + wb = openpyxl.load_workbook(input_excel, read_only=True) + ws = wb.active + + headers = None + chart_idx = None + path_idx = None + html_idx = None + + all_raw_rows = [] + + print(f"Reading Excel rows...") + for i, row in enumerate(ws.iter_rows()): + vals = [cell.value for cell in row] + if headers is None: + headers = vals + chart_idx = headers.index('ChartNo') + path_idx = headers.index('PathCode') + html_idx = headers.index('html') + continue + + all_raw_rows.append(vals) + + if mode == 'last' and limit: + raw_rows = all_raw_rows[-limit:] + print(f"Processing last {len(raw_rows)} rows (out of {len(all_raw_rows)} total)...") + else: + raw_rows = all_raw_rows[:limit] if limit else all_raw_rows + print(f"Processing {len(raw_rows)} rows...") + + # Build full PathCode map from all Excel rows for fallback resolution + excel_pathcode_html_map = {} + for vals in all_raw_rows: + pcode = str(vals[path_idx]).strip() if vals[path_idx] else "" + hval = vals[html_idx] or "" + if pcode: + excel_pathcode_html_map[pcode] = hval + + rows = [] + pathcode_diag_map = {} + + for vals in raw_rows: + chart_no = vals[chart_idx] + path_code = str(vals[path_idx]).strip() if vals[path_idx] else "" + html_content = vals[html_idx] or "" + + tissue = extract_tissue(html_content, path_code) + diagnosis = extract_short_diagnosis(html_content, path_code) + + site = classify_site(tissue, diagnosis, html_content) + ttype = classify_type(tissue, diagnosis, html_content) + + row_dict = { + 'chart_no': chart_no, + 'path_code': path_code, + 'site': site, + 'type': ttype, + 'tissue': tissue, + 'diagnosis': diagnosis + } + rows.append(row_dict) + + if path_code and diagnosis: + pathcode_diag_map[path_code] = diagnosis + + print("Resolving empty diagnosis rows via 組織由來 (tissue) -> 病理號 (PathCode) matching...") + fallback_count = 0 + for r in rows: + if not r['diagnosis'] and r['tissue']: + tissue = r['tissue'].strip() + potential_codes = [tissue] + re.findall(r'[A-Za-z0-9_\-]+', tissue) + for code in potential_codes: + if code not in pathcode_diag_map and code in excel_pathcode_html_map: + ref_html = excel_pathcode_html_map[code] + if ref_html: + db_diag = extract_short_diagnosis(ref_html, code) + if db_diag: + pathcode_diag_map[code] = db_diag + + if code in pathcode_diag_map and pathcode_diag_map[code]: + r['diagnosis'] = pathcode_diag_map[code] + r['site'] = classify_site(r['tissue'], r['diagnosis']) + r['type'] = classify_type(r['tissue'], r['diagnosis']) + fallback_count += 1 + break + + print(f"Fallback resolution complete: updated {fallback_count} empty rows.") + print(f"Writing to CSV file: {output_csv} ...") + + with open(output_csv, 'w', newline='', encoding='utf-8-sig') as f: + writer = csv.writer(f) + writer.writerow(['病歷號', '病理號', 'site', 'type', '組織由來', 'pathological diagnosis']) + + for r in rows: + writer.writerow([r['chart_no'], r['path_code'], r['site'], r['type'], r['tissue'], r['diagnosis']]) + + print(f"Successfully exported {len(rows)} rows to {output_csv}") + + +if __name__ == '__main__': + inp = sys.argv[1] if len(sys.argv) > 1 else None + out = sys.argv[2] if len(sys.argv) > 2 else None + lim = int(sys.argv[3]) if len(sys.argv) > 3 and sys.argv[3].isdigit() else None + m = sys.argv[4] if len(sys.argv) > 4 else 'all' + process_extraction(inp, out, limit=lim, mode=m) diff --git a/patho/0727/fetch.py b/patho/0727/fetch.py new file mode 100755 index 0000000..f21729c --- /dev/null +++ b/patho/0727/fetch.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import re + +# Add repository root and 'ntuh' directory to sys.path +script_dir = os.path.dirname(os.path.abspath(__file__)) +base_dir = os.path.dirname(script_dir) +ntuh_dir = os.path.join(base_dir, 'ntuh') + +if base_dir not in sys.path: + sys.path.insert(0, base_dir) +if ntuh_dir not in sys.path: + sys.path.insert(0, ntuh_dir) + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ntuh.settings') + +import django +django.setup() + +import pandas as pd +from registry.models import PathologyReport + +illegal_re = re.compile(r'[\x00-\x08\x0b-\x0c\x0e-\x1f]') + + +def clean_string_for_excel(val): + if not isinstance(val, str): + return val + # Remove illegal XML / openpyxl control characters + val = illegal_re.sub('', val) + # Strip unnecessary head, style, script, meta, link tags so report body fits within cell limits + h = re.sub(r'<(?:head|style|script|meta|link)[^>]*?>.*?', '', val, flags=re.DOTALL | re.IGNORECASE) + h = re.sub(r'<(?:meta|link)[^>]*?>', '', h, flags=re.IGNORECASE) + h = re.sub(r'\n\s*\n', '\n', h) + return h.strip() + + +def fetch_pathology_reports(output_file=None): + if output_file is None: + output_file = os.path.join(script_dir, 'registry_pathologyreport.xlsx') + + print(f"Fetching PathologyReport records from database...") + qs = PathologyReport.objects.all().values() + data = list(qs) + + print(f"Cleaning string fields & HTML body for Excel cell limit...") + for item in data: + for k, v in item.items(): + if isinstance(v, str): + item[k] = clean_string_for_excel(v) + + df = pd.DataFrame(data) + print(f"Fetched {len(df)} rows. Writing to {output_file}...") + df.to_excel(output_file, index=False) + print(f"Successfully exported {len(df)} rows to {output_file}") + + +if __name__ == '__main__': + default_output = os.path.join(script_dir, 'registry_pathologyreport.xlsx') + target_path = sys.argv[1] if len(sys.argv) > 1 else default_output + fetch_pathology_reports(target_path) diff --git a/patho/extract-medgemma.py b/patho/extract-medgemma.py new file mode 100644 index 0000000..ba9ae8c --- /dev/null +++ b/patho/extract-medgemma.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import csv +import re +import json +import time +import datetime +import urllib.request +import urllib.parse +import openpyxl +from bs4 import BeautifulSoup +from concurrent.futures import ThreadPoolExecutor, as_completed + +script_dir = os.path.dirname(os.path.abspath(__file__)) +base_dir = os.path.dirname(script_dir) + +OLLAMA_URL = "http://192.168.221.20:11434/api/generate" +MODEL_NAME = "medgemma:27b" +LOG_FILE_PATH = os.path.join(script_dir, "ollama_calls.log") + + +def log_ollama_call(path_code, attempt, duration_sec, status, site="", ttype="", tissue="", diagnosis="", error=None): + timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + file_exists = os.path.exists(LOG_FILE_PATH) and os.path.getsize(LOG_FILE_PATH) > 0 + + try: + with open(LOG_FILE_PATH, "a", newline="", encoding="utf-8-sig") as f: + writer = csv.writer(f) + if not file_exists: + writer.writerow(["timestamp", "path_code", "attempt", "duration_sec", "status", "site", "type", "tissue", "diagnosis", "error"]) + + writer.writerow([ + timestamp, + path_code, + attempt, + round(duration_sec, 3), + status, + site, + ttype, + tissue, + diagnosis, + str(error) if error else "" + ]) + except Exception as e: + pass + + +def extract_plain_text(html_content): + if not html_content or not isinstance(html_content, str): + return "" + soup = BeautifulSoup(html_content, 'html.parser') + + # Remove script and style tags + for s in soup(['script', 'style', 'head', 'meta', 'link']): + s.decompose() + + text = soup.get_text(separator=' ').strip() + return re.sub(r'\s+', ' ', text)[:3000] + + +def enforce_site_rules(site, tissue, diagnosis): + tissue_lower = str(tissue).lower() + + # Rule: If tissue is Nasopharynx or Nasal cavity, site is NOT cranial (should be other). + # However, sinonasal IS cranial. + if 'sinonasal' in tissue_lower: + site = 'cranial' + elif 'nasopharynx' in tissue_lower or 'nasal cavity' in tissue_lower: + if site == 'cranial': + site = 'other' + + return site + + +def extract_with_medgemma_pure(html_content, path_code='', retries=5): + text_content = extract_plain_text(html_content) + + prompt = f"""You are an expert medical pathology analysis assistant. +Analyze the following pathology report text for specimen {path_code} and extract key clinical information. + +Report Text: +{text_content} + +Tasks: +1. "site": Anatomical site classification. Must be EXACTLY one of: "cranial", "spinal", or "other". + - "cranial": Brain, cerebrum, cerebellum, brainstem, skull, cranial dura, pituitary, CP angle, orbit, sinonasal tissue, head, scalp, etc. + - "NOTE on Nasal cavity / Nasopharynx": If tissue origin is "Nasopharynx" or "Nasal cavity" alone, it is NOT cranial (classify as "other"). However, "sinonasal" IS cranial. + - "spinal": Spine, spinal cord, vertebra, lumbar/thoracic/cervical/sacral level, epidural, disc, ligamentum flavum, etc. + - "other": All other body organs or unspecified sites. + +2. "type": Pathological nature. Must be EXACTLY one of: "tumor" or "other". + - "tumor": Neoplasms, carcinomas, adenomas, gliomas, meningiomas, schwannomas, metastases, lipomas, polyps, cysts, or neoplastic findings. + - "other": Non-neoplastic findings (e.g. inflammation, hematoma, abscess, necrosis, normal tissue, thrombus). + +3. "tissue": Tissue origin / specimen site string in English (e.g., "Brain, cerebrum", "Soft tissue, L3", "Spine, L4-L5 level", "Bone, T12 vertebra", "Spinal cord, T7-T9"). + - CRITICAL: Always keep and preserve the specific spine level if specified in the report (e.g. "L3", "L4/5", "T7-9", "C4-5", "T12", "S1-S2", "C1-C2"). Do not strip or omit spine levels! + +4. "diagnosis": Concise histological / pathological diagnosis statement in English. + +Return ONLY a valid JSON object matching this schema: +{{ + "site": "cranial|spinal|other", + "type": "tumor|other", + "tissue": "tissue origin (including exact spine level if specified)", + "diagnosis": "pathological diagnosis" +}} +""" + + payload = { + "model": MODEL_NAME, + "prompt": prompt, + "stream": False, + "format": "json" + } + + for attempt in range(1, retries + 1): + start_time = time.time() + try: + req = urllib.request.Request( + OLLAMA_URL, + data=json.dumps(payload).encode('utf-8'), + headers={'Content-Type': 'application/json'} + ) + with urllib.request.urlopen(req, timeout=90) as resp: + elapsed = time.time() - start_time + res_data = json.loads(resp.read().decode('utf-8')) + resp_text = res_data.get('response', '') + parsed = json.loads(resp_text) + + site = str(parsed.get('site', '')).strip().lower() + ttype = str(parsed.get('type', '')).strip().lower() + tissue = str(parsed.get('tissue', '')).strip() + diagnosis = str(parsed.get('diagnosis', '')).strip() + + if site not in ['cranial', 'spinal', 'other']: + site = 'other' + if ttype not in ['tumor', 'other']: + ttype = 'other' + + site = enforce_site_rules(site, tissue, diagnosis) + + log_ollama_call( + path_code=path_code, + attempt=attempt, + duration_sec=elapsed, + status="SUCCESS", + site=site, + ttype=ttype, + tissue=tissue, + diagnosis=diagnosis + ) + + return site, ttype, tissue, diagnosis + + except Exception as e: + elapsed = time.time() - start_time + print(f"Warning: MedGemma API attempt {attempt}/{retries} error for {path_code}: {e}") + log_ollama_call( + path_code=path_code, + attempt=attempt, + duration_sec=elapsed, + status="ERROR", + error=e + ) + if attempt < retries: + time.sleep(3 * attempt) + + return "other", "other", "", "" + + +def process_single_row(args): + idx, chart_no, path_code, html_content, total_count = args + print(f"[{idx+1}/{total_count}] Extracting PathCode {path_code} with MedGemma...") + site, ttype, tissue, diagnosis = extract_with_medgemma_pure(html_content, path_code) + print(f" -> [{idx+1}/{total_count}] {path_code}: site={site}, type={ttype}, tissue={tissue!r}, diag={diagnosis!r}") + return idx, [chart_no, path_code, site, ttype, tissue, diagnosis] + + +def process_extraction_medgemma(input_excel=None, output_csv=None, limit=0, prefix_filter=None, max_workers=4): + if input_excel is None: + input_excel = os.path.join(script_dir, 'registry_pathologyreport.xlsx') + if not os.path.exists(input_excel) and os.path.exists('registry_pathologyreport.xlsx'): + input_excel = 'registry_pathologyreport.xlsx' + + if output_csv is None: + if prefix_filter: + output_csv = os.path.join(script_dir, f'registry_pathologyreport_medgemma_{prefix_filter}.csv') + else: + output_csv = os.path.join(script_dir, 'registry_pathologyreport_medgemma_all.csv') + + print(f"Opening Excel file: {input_excel} ...") + wb = openpyxl.load_workbook(input_excel, read_only=True) + ws = wb.active + + headers = None + chart_idx = None + path_idx = None + html_idx = None + + raw_rows = [] + print(f"Reading Excel rows (prefix filter: {prefix_filter!r}, limit: {limit})...") + for i, row in enumerate(ws.iter_rows()): + vals = [cell.value for cell in row] + if headers is None: + headers = vals + chart_idx = headers.index('ChartNo') + path_idx = headers.index('PathCode') + html_idx = headers.index('html') + continue + + path_code = str(vals[path_idx]).strip() if vals[path_idx] else "" + if prefix_filter: + if not path_code.startswith(prefix_filter): + continue + + raw_rows.append(vals) + if limit and len(raw_rows) >= limit: + break + + total_count = len(raw_rows) + print(f"Total rows to extract: {total_count} (max_workers: {max_workers})...") + + tasks_args = [ + (idx, vals[chart_idx], str(vals[path_idx]).strip() if vals[path_idx] else "", vals[html_idx] or "", total_count) + for idx, vals in enumerate(raw_rows) + ] + + results_dict = {} + completed_count = 0 + + # Write CSV header initially + with open(output_csv, 'w', newline='', encoding='utf-8-sig') as f: + writer = csv.writer(f) + writer.writerow(['病歷號', '病理號', 'site', 'type', '組織由來', 'pathological diagnosis']) + + with ThreadPoolExecutor(max_workers=max_workers) as executor: + future_to_idx = {executor.submit(process_single_row, arg): arg[0] for arg in tasks_args} + + for future in as_completed(future_to_idx): + idx, res_row = future.result() + results_dict[idx] = res_row + completed_count += 1 + + # Periodically dump progress every 50 rows + if completed_count % 50 == 0 or completed_count == total_count: + print(f"Progress: {completed_count}/{total_count} rows completed ({completed_count/total_count*100:.2f}%)...") + + print(f"Writing all {total_count} rows in original order to CSV: {output_csv} ...") + with open(output_csv, 'w', newline='', encoding='utf-8-sig') as f: + writer = csv.writer(f) + writer.writerow(['病歷號', '病理號', 'site', 'type', '組織由來', 'pathological diagnosis']) + for idx in range(total_count): + writer.writerow(results_dict[idx]) + + print(f"Successfully exported {total_count} rows to {output_csv}") + + +if __name__ == '__main__': + lim = int(sys.argv[1]) if len(sys.argv) > 1 and sys.argv[1].isdigit() else 0 + pref = sys.argv[2] if len(sys.argv) > 2 and sys.argv[2] != 'None' else None + out = sys.argv[3] if len(sys.argv) > 3 else None + workers = int(sys.argv[4]) if len(sys.argv) > 4 and sys.argv[4].isdigit() else 4 + process_extraction_medgemma(limit=lim, prefix_filter=pref, output_csv=out, max_workers=workers) diff --git a/patho/extract.py b/patho/extract.py new file mode 100755 index 0000000..cc4fa53 --- /dev/null +++ b/patho/extract.py @@ -0,0 +1,423 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import csv +import re +import openpyxl +from bs4 import BeautifulSoup + +script_dir = os.path.dirname(os.path.abspath(__file__)) +base_dir = os.path.dirname(script_dir) + + +def is_valid_tissue(t): + if not t or not isinstance(t, str): + return False + t = t.strip() + clean_t = re.sub(r'[\.,\-\_\s\(\)\"\']', '', t) + clean_no_dim = re.sub(r'\d+[\.\*x\d]*cm', '', clean_t, flags=re.IGNORECASE) + if not clean_t or len(clean_t) <= 2 or clean_t.lower() in ['none', 'nil']: + return False + if clean_t.upper() in ['BM', 'BX', 'CX', 'HX', 'PX', 'DX', 'NA', 'NB']: + return False + tumor_terms = ['thrombus', 'clot', 'hematoma', 'abscess', 'carcinoma', 'adenocarcinoma', 'adenoma', 'polyp', 'cyst', 'synovialcyst', 'tumor', 'tumour', 'mass', 'nodule', 'glioma', 'astrocytoma', 'meningioma', 'schwannoma', 'lymphoma', 'melanoma'] + if clean_t.lower() in tumor_terms or any(clean_t.lower().endswith(k) for k in ['cyst', 'tumor', 'tumour', 'glioma']) or any(clean_no_dim.lower().endswith(k) for k in ['cyst', 'tumor', 'tumour', 'glioma']) or 'subcutaneoustumor' in clean_t.lower() or 'intraduraltumor' in clean_t.lower() or 'hyperintensity' in clean_t.lower() or 'hypointensity' in clean_t.lower() or 'duraseeding' in clean_t.lower() or 'cavitytumor' in clean_t.lower(): + return False + if '位置不明' in t or 'sitenotstate' in clean_t.lower() or 'siteunspecified' in clean_t.lower(): + return False + if any(k in clean_t.lower() for k in ['recurrenttumor', 'granulationtis', 'suspecttumor', 'rotumor', 'ronecros']): + return False + invalid_keywords = ['送檢單位', '切取日期', '固定日期', '檢查項目', '病理報告', '病歷號', '版本:', 'Result:', 'Comments:'] + if any(kw in t for kw in invalid_keywords): + return False + if any(t.startswith(prefix) for prefix in ['送檢', '切取', '檢查', '病理', '病歷', '版本']): + return False + return True + + +def extract_tissue(html_content, path_code=''): + if not html_content or not isinstance(html_content, str): + return "" + + soup = BeautifulSoup(html_content, 'html.parser') + + tissue = "" + # 1. Check lblTissue span + span = soup.find('span', id=lambda x: x and 'lblTissue' in x) + if span and is_valid_tissue(span.text): + tissue = span.text.strip() + + # 2. Check table row with 組織由來 + if not tissue: + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + if '組織由來' in ths: + idx = ths.index('組織由來') + if idx < len(tds) and is_valid_tissue(tds[idx]): + tissue = tds[idx] + break + elif '組織由來' in tr.text: + if tds and is_valid_tissue(tds[-1]): + tissue = tds[-1] + + # 3. Check 器官與術式 / 器官 / 部位 / 檢體部位 + if not tissue: + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + for header in ['器官與術式', '器官', '部位', '檢體部位']: + if header in ths: + idx = ths.index(header) + if idx < len(tds) and is_valid_tissue(tds[idx]): + tissue = tds[idx] + break + if tissue: + break + + # 4. Dig site from 組織學診斷 row if tissue is still empty + if not tissue: + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + if any('組織學診斷' in th for th in ths): + if tds: + val = tds[-1] + if val: + s = re.sub(r'^\d+[\.\s]*', '', val) + split_site = re.split(r',\s*(?:\d+(?:\-\d+)?\s*cm(?:\s+AAV|\s+above\s+anal\s+verge|\s+[A-Za-z]+)?|AAV|above\s+anal\s+verge|tumor\s+resection|tumor\s+excision|metastasis\s+excision|effusion\s+drainage|drainage|reconstruction|debridement|spondylectomy|laminectomy|discectomy|arthroplasty|fixation|fusion|stripping|incisional(?:\s+biopsy)?|excisional(?:\s+biopsy)?|punch(?:\s+biopsy)?|shave(?:\s+biopsy)?|wedge(?:\s+biopsy)?|core(?:\s+biopsy)?|site\s+not\s+state(?:d)?|site\s+unspecified|\?\s*side|\?|craniotomy(?:\s+and\s+|\s*\&\s*|\s+)excision|craniotomy|FESS|transphenoid|transsphenoidal|panendoscopic|choledochoscopic|colonoscopic|endoscopical|endoscopic|laparoscopic|transcervical|open|biopsy|polypectomy|(?:partial|subtotal|radical|wide|total)?\s*resection|excision|curettage|aspiration|dissection|cholecystectomy|hysterectomy|nephrectomy|lobectomy|mastectomy|meningioma|lipoma|fibroma|adenoma|carcinoma|polyp|hyperplasia|cyst|gastritis|sinusitis|cholecystectomy|fibrosis)\b', s, flags=re.IGNORECASE)[0] + split_site = re.split(r',\s*(?:corpus|cervix)\b', split_site, flags=re.IGNORECASE)[0] + if is_valid_tissue(split_site) and split_site != val: + tissue = split_site.strip() + break + + # 5. Check active report tab link: + if not tissue: + a_tag = soup.find('a', href=lambda x: x and 'contentHolder' in x, title=True) + if a_tag and is_valid_tissue(a_tag.get('title')): + tissue = a_tag['title'].strip() + + # 6. Check selected option: + if not tissue: + opt = soup.find('option', selected=True) + if opt and opt.text: + m = re.search(r'\(([^()]+)\)$', opt.text) + if m and is_valid_tissue(m.group(1)): + tissue = m.group(1).strip() + + # 7. Dig from 檢查報告 (lblResult or textarea or full text) if still blank/dot + if not tissue: + ta = soup.find('textarea') + res_span = soup.find('span', id=lambda x: x and 'lblResult' in x) + raw_text = (ta.get_text(separator='\n') if ta else (res_span.get_text(separator='\n') if res_span else soup.get_text(separator='\n'))).strip() + if raw_text: + m = re.search(r'(?:Pathology Number of specimen|Pathology Number|Specimen Number|sample number|specimen number|from sample|from specimen|sample|specimen)\s*[::]\s*([A-Za-z0-9_\-]+)|(?:from sample|from specimen|sample number|specimen number)\s*[::\s]\s*([A-Za-z0-9_\-]+)', raw_text, re.IGNORECASE) + matched_code = (m.group(1) or m.group(2)).strip() if m else None + if matched_code: + tissue = matched_code + else: + lines = [l.strip() for l in raw_text.splitlines() if l.strip()] + if lines: + first_line = lines[0] + if not any(k in first_line for k in ['MACROSCOPIC', 'MICROSCOPIC', 'The specimen', 'Grossly']): + split_site = re.split(r',\s*(?:\d+(?:\-\d+)?\s*cm(?:\s+AAV|\s+above\s+anal\s+verge|\s+[A-Za-z]+)?|AAV|above\s+anal\s+verge)\b', first_line, flags=re.IGNORECASE)[0] + split_site = re.split(r',\s*(?:[A-Za-z\s]+)?(?:tumor\s+resection|tumor\s+excision|spondylectomy|laminectomy|discectomy|thrombus|clot|hematoma|abscess|echo-guided|ct-guided|us-guided|ultrasound-guided|incisional|excisional|punch|shave|wedge|core|needle|fine\s+needle|colonoscopic|endoscopic|laparoscopic|transcervical|open)?\s*(?:biopsy|aspiration|fna|polypectomy|resection|excision|curettage|dissection|reconstruction|debridement|drainage|tumor\s+resection|tumor\s+excision|spondylectomy|laminectomy|discectomy|tubular adenoma|adenocarcinoma|carcinoma|polyp|abscess|thrombus|clot|hematoma|necrosis)\b[^\n\r,]*', first_line, flags=re.IGNORECASE)[0] + split_site = re.split(r',\s*labeled\s+as\b', split_site, flags=re.IGNORECASE)[0] + if is_valid_tissue(split_site): + tissue = split_site.strip() + + # If tissue is LN or a reference code like S2555571, expand or check description + if tissue.upper() == 'LN': + tissue = 'Lymph node' + + if not tissue: + span = soup.find('span', id=lambda x: x and 'lblTissue' in x) + if span and span.text.strip().upper() == 'LN': + tissue = 'Lymph node' + + if tissue and re.match(r'^[A-Za-z0-9_\-]+$', tissue): + ta = soup.find('textarea') + res_span = soup.find('span', id=lambda x: x and 'lblResult' in x) + raw_text = (ta.get_text(separator='\n') if ta else (res_span.get_text(separator='\n') if res_span else soup.get_text(separator='\n'))).strip() + if raw_text: + m = re.search(rf'{re.escape(tissue)}\s+([A-Za-z][^\n\r]+)', raw_text) + if m: + desc = m.group(1).strip() + split_site = re.split(r',\s*(?:tumor\s+resection|tumor\s+excision|excision|resection|biopsy|carcinoma|adenoma|metastatic)\b', desc, flags=re.IGNORECASE)[0] + if is_valid_tissue(split_site) and split_site != desc and not re.match(r'^[A-Za-z0-9_\-]+$', split_site): + tissue = split_site.strip() + + return tissue + + +def extract_short_diagnosis(html_content, path_code=''): + if not html_content or not isinstance(html_content, str): + return "" + + soup = BeautifulSoup(html_content, 'html.parser') + + # 1. Check table rows for 組織學診斷 / 診斷描述 + table_diags = [] + for tr in soup.find_all('tr'): + ths = [th.text.strip() for th in tr.find_all('th', recursive=False)] + tds = [td.text.strip() for td in tr.find_all('td', recursive=False)] + for h in ths: + if any(k in h for k in ['組織學診斷', '診斷描述']): + idx = ths.index(h) + if idx < len(tds): + val = tds[idx].text.strip() if hasattr(tds[idx], 'text') else str(tds[idx]).strip() + if val and val not in table_diags: + table_diags.append(val) + + if not table_diags: + for tr in soup.find_all('tr'): + cells = [td.text.strip() for td in tr.find_all(['th', 'td'])] + text = ' '.join(cells) + if any(k in text for k in ['組織學診斷', '診斷描述']): + tds = tr.find_all('td') + if tds: + val = tds[-1].text.strip() + if val and val not in table_diags: + table_diags.append(val) + + if table_diags: + return ', '.join(table_diags) + + # 2. Check textarea or lblResult + ta = soup.find('textarea') + res_span = soup.find('span', id=lambda x: x and 'lblResult' in x) + raw_text = (ta.text if ta else (res_span.text if res_span else '')).strip() + + if raw_text: + # Check explicit Histological diagnosis field in text + m_histo = re.search(r'Histological diagnosis[::\s]\s*([^\*\n\r]+)', raw_text, re.IGNORECASE) + if m_histo and m_histo.group(1).strip(): + return m_histo.group(1).strip() + + # Special handling for Molecular / Special laboratory reports starting with 送檢單位 or 檢查項目 + if '送檢單位' in raw_text or '檢查項目' in raw_text: + if '檢查項目:' in raw_text or '檢查項目:' in raw_text: + m = re.search(r'檢查項目[::]\s*(.*?)(?:Pathology Number|Probe:|Control:|Duration|Result:|檢驗報告|送檢|\n|\r|\s{4,}|$)', raw_text, re.DOTALL) + if m and m.group(1).strip(): + item = m.group(1).strip() + m_res = re.search(r'(?:Result:|檢驗報告[::])\s*(.*?)(?:Procedures:|Comments:|參考文獻|Ref:|\n\n|\r\n\r\n|\s{4,}|$)', raw_text, re.DOTALL) + if m_res and m_res.group(1).strip(): + res_val = m_res.group(1).strip().replace('\n', ' ').replace('\t', ' ') + res_val = re.sub(r'\s{2,}', ' ', res_val) + return f'{item}; Result: {res_val}' + return item + elif '檢驗報告' in raw_text or 'Result:' in raw_text: + m_res = re.search(r'(?:Result:|檢驗報告[::])\s*(.*?)(?:Procedures:|Comments:|參考文獻|Ref:|\n\n|\r\n\r\n|\s{4,}|$)', raw_text, re.DOTALL) + if m_res and m_res.group(1).strip(): + res_val = m_res.group(1).strip().replace('\n', ' ').replace('\t', ' ') + return re.sub(r'\s{2,}', ' ', res_val) + + # Standard Pathology Report - return full first paragraph before macroscopic/gross section + cut_patterns = [ + r'The specimen submitted', r'Grossly', r'Microscopically', r'Pathology Number', + r'送檢單位', r'檢查項目', r'Result:', r'Comments:', r'Ref:', r'\[\d+\]\.' + ] + text_cut = re.split('|'.join(cut_patterns), raw_text, flags=re.IGNORECASE)[0] + parts = re.split(r'\n|\r|\t|\s{2,}', text_cut) + non_empty = [p.strip() for p in parts if p.strip()] + if non_empty: + return non_empty[0] + + # 3. Fallback to lblBedDiagnosis if available + bed_span = soup.find('span', id=lambda x: x and 'lblBedDiagnosis' in x) + if bed_span and bed_span.text.strip(): + return bed_span.text.strip() + + return "" + + +def classify_site(tissue, diagnosis, html=''): + site_text = (str(tissue) + ' ' + str(diagnosis)).lower() + site_text = re.sub(r'\bpd\-?l1\b', '', site_text, flags=re.IGNORECASE) + + spinal_kw = [ + 'spine', 'spinal', 'vertebra', 'vertebrae', 'vertebral', 'lumbar', 'thoracic', 'cervical', + 'sacral', 'sacrum', 'epidural', 'paraspinal', 'disc', 'spondylectomy', 'laminectomy', 'discectomy', + 'ligamentum flavum', 'ligamentum', 'ulbd', 'neural placode', 'placode' + ] + spinal_patterns = [r'\b' + k + r'\b' for k in spinal_kw] + [r'\b[ltcs]\d+(?:[\-\/]\d+)?\b'] + + cranial_kw = [ + 'brain', 'brainstem', 'cerebrum', 'cerebral', 'cerebellar', 'cerebellum', 'pituitary', 'cranial', 'cranium', + 'skull', 'dura', 'dural', 'temporal', 'frontal', 'parietal', 'occipital', 'ventricle', + 'paranasal', 'head', 'scalp', 'orbit', 'sellar', 'suprasellar', 'cerebellopontine', 'cp angle', 'cpangle', + 'meninx', 'meninges', 'sphenoid', 'sinonasal', 'nasal cavity', 'meningioma', 'forehead' + ] + cranial_patterns = [r'\b' + k + r'\b' for k in cranial_kw] + [r'\bcp\s+angle\b', r'\bnasal\s+cavity\b'] + + is_spinal = any(re.search(p, site_text) for p in spinal_patterns) + is_cranial = any(re.search(p, site_text) for p in cranial_patterns) + + if 'dura mater' in site_text or 'dural' in site_text and 'epidural' not in site_text: + is_cranial = True + + if is_spinal and not is_cranial: + return 'spinal' + elif is_cranial and not is_spinal: + return 'cranial' + elif is_spinal and is_cranial: + if any(k in site_text for k in ['brain', 'cerebrum', 'dura mater']): + return 'cranial' + return 'spinal' + + return 'other' + + +def classify_type(tissue, diagnosis, html=''): + diag_str = str(diagnosis).lower() + text = (str(tissue) + ' ' + diag_str).lower() + + if any(k in diag_str for k in ['no evidence of', 'negative for', 'free of', 'no tumor', 'without tumor', 'no residual']): + return 'other' + + if any(k in diag_str for k in ['necrotic tissue', 'necrosis', 'organizing hematoma', 'hematoma', 'thrombus', 'clot', 'abscess', 'infarction', 'fibrosis', 'sinusitis', 'cholecystitis', 'gastritis', 'varicose']): + definitive_tumor = ['carcinoma', 'adenocarcinoma', 'adenoma', 'sarcoma', 'osteosarcoma', 'osteoma', 'astrocytoma', 'glioma', 'meningioma', 'glioblastoma', 'subependymoma', 'ependymoma', 'lipoma', 'fibroma', 'papilloma', 'lymphoma', 'melanoma', 'schwannoma', 'malignancy', 'malignant'] + if not any(k in diag_str for k in definitive_tumor): + return 'other' + + non_tumor_findings = ['granuloma', 'inflammatory cell infiltration', 'organizing hematoma', 'hematoma', 'thrombus', 'clot', 'abscess', 'necrosis', 'infarction', 'fibrosis', 'sinusitis', 'cholecystitis', 'gastritis', 'varicose', 'amyloid angiopathy'] + neoplastic_findings = [ + 'carcinoma', 'adenocarcinoma', 'adenoma', 'sarcoma', 'osteosarcoma', 'osteoma', 'chondroma', 'hemangioma', 'neuroma', 'leiomyoma', 'myxoma', + 'astrocytoma', 'glioma', 'meningioma', 'glioblastoma', 'subependymoma', 'ependymoma', 'ganglioglioma', 'oligodendroglioma', 'medulloblastoma', 'chordoma', 'hemangioblastoma', 'craniopharyngioma', 'lipoma', 'fibroma', 'papilloma', + 'polyp', 'hyperplasia', 'metastasis', 'metastatic', 'malignancy', 'malignant', + 'schwannoma', 'neurofibroma', 'melanoma', 'lymphoma', 'plasmacytosis', 'neoplastic', 'who grade', 'cns who grade' + ] + + if any(k in diag_str for k in non_tumor_findings) and not any(k in diag_str for k in neoplastic_findings): + return 'other' + + tumor_kw = [ + 'malignancy', 'malignant', 'osteoma', 'chondroma', 'hemangioma', 'neuroma', 'leiomyoma', 'myxoma', + 'subependymoma', 'ependymoma', 'ganglioglioma', 'oligodendroglioma', 'medulloblastoma', 'chordoma', 'hemangioblastoma', 'craniopharyngioma', 'who grade', 'cns who grade', 'tumor', 'tumour', 'carcinoma', 'adenocarcinoma', 'adenoma', 'sarcoma', 'osteosarcoma', + 'astrocytoma', 'glioma', 'meningioma', 'glioblastoma', 'lipoma', 'fibroma', 'papilloma', 'cyst', + 'polyp', 'hyperplasia', 'mass', 'lesion', 'neoplasm', 'metastasis', 'metastatic', + 'schwannoma', 'neurofibroma', 'melanoma', 'lymphoma', 'plasmacytosis', 'neoplastic' + ] + + if any(k in text for k in tumor_kw): + return 'tumor' + + return 'other' + + +def process_extraction(input_excel=None, output_csv=None, limit=None, mode='all'): + if input_excel is None: + input_excel = os.path.join(script_dir, 'registry_pathologyreport.xlsx') + if not os.path.exists(input_excel) and os.path.exists('registry_pathologyreport.xlsx'): + input_excel = 'registry_pathologyreport.xlsx' + + if output_csv is None: + output_csv = os.path.join(script_dir, 'registry_pathologyreport_extracted.csv') + + print(f"Opening Excel file: {input_excel} ...") + wb = openpyxl.load_workbook(input_excel, read_only=True) + ws = wb.active + + headers = None + chart_idx = None + path_idx = None + html_idx = None + + all_raw_rows = [] + + print(f"Reading Excel rows...") + for i, row in enumerate(ws.iter_rows()): + vals = [cell.value for cell in row] + if headers is None: + headers = vals + chart_idx = headers.index('ChartNo') + path_idx = headers.index('PathCode') + html_idx = headers.index('html') + continue + + all_raw_rows.append(vals) + + if mode == 'last' and limit: + raw_rows = all_raw_rows[-limit:] + print(f"Processing last {len(raw_rows)} rows (out of {len(all_raw_rows)} total)...") + else: + raw_rows = all_raw_rows[:limit] if limit else all_raw_rows + print(f"Processing {len(raw_rows)} rows...") + + # Build full PathCode map from all Excel rows for fallback resolution + excel_pathcode_html_map = {} + for vals in all_raw_rows: + pcode = str(vals[path_idx]).strip() if vals[path_idx] else "" + hval = vals[html_idx] or "" + if pcode: + excel_pathcode_html_map[pcode] = hval + + rows = [] + pathcode_diag_map = {} + + for vals in raw_rows: + chart_no = vals[chart_idx] + path_code = str(vals[path_idx]).strip() if vals[path_idx] else "" + html_content = vals[html_idx] or "" + + tissue = extract_tissue(html_content, path_code) + diagnosis = extract_short_diagnosis(html_content, path_code) + + site = classify_site(tissue, diagnosis, html_content) + ttype = classify_type(tissue, diagnosis, html_content) + + row_dict = { + 'chart_no': chart_no, + 'path_code': path_code, + 'site': site, + 'type': ttype, + 'tissue': tissue, + 'diagnosis': diagnosis + } + rows.append(row_dict) + + if path_code and diagnosis: + pathcode_diag_map[path_code] = diagnosis + + print("Resolving empty diagnosis rows via 組織由來 (tissue) -> 病理號 (PathCode) matching...") + fallback_count = 0 + for r in rows: + if not r['diagnosis'] and r['tissue']: + tissue = r['tissue'].strip() + potential_codes = [tissue] + re.findall(r'[A-Za-z0-9_\-]+', tissue) + for code in potential_codes: + if code not in pathcode_diag_map and code in excel_pathcode_html_map: + ref_html = excel_pathcode_html_map[code] + if ref_html: + db_diag = extract_short_diagnosis(ref_html, code) + if db_diag: + pathcode_diag_map[code] = db_diag + + if code in pathcode_diag_map and pathcode_diag_map[code]: + r['diagnosis'] = pathcode_diag_map[code] + r['site'] = classify_site(r['tissue'], r['diagnosis']) + r['type'] = classify_type(r['tissue'], r['diagnosis']) + fallback_count += 1 + break + + print(f"Fallback resolution complete: updated {fallback_count} empty rows.") + print(f"Writing to CSV file: {output_csv} ...") + + with open(output_csv, 'w', newline='', encoding='utf-8-sig') as f: + writer = csv.writer(f) + writer.writerow(['病歷號', '病理號', 'site', 'type', '組織由來', 'pathological diagnosis']) + + for r in rows: + writer.writerow([r['chart_no'], r['path_code'], r['site'], r['type'], r['tissue'], r['diagnosis']]) + + print(f"Successfully exported {len(rows)} rows to {output_csv}") + + +if __name__ == '__main__': + inp = sys.argv[1] if len(sys.argv) > 1 else None + out = sys.argv[2] if len(sys.argv) > 2 else None + lim = int(sys.argv[3]) if len(sys.argv) > 3 and sys.argv[3].isdigit() else None + m = sys.argv[4] if len(sys.argv) > 4 else 'all' + process_extraction(inp, out, limit=lim, mode=m) diff --git a/patho/fetch.py b/patho/fetch.py new file mode 100755 index 0000000..f21729c --- /dev/null +++ b/patho/fetch.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import re + +# Add repository root and 'ntuh' directory to sys.path +script_dir = os.path.dirname(os.path.abspath(__file__)) +base_dir = os.path.dirname(script_dir) +ntuh_dir = os.path.join(base_dir, 'ntuh') + +if base_dir not in sys.path: + sys.path.insert(0, base_dir) +if ntuh_dir not in sys.path: + sys.path.insert(0, ntuh_dir) + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ntuh.settings') + +import django +django.setup() + +import pandas as pd +from registry.models import PathologyReport + +illegal_re = re.compile(r'[\x00-\x08\x0b-\x0c\x0e-\x1f]') + + +def clean_string_for_excel(val): + if not isinstance(val, str): + return val + # Remove illegal XML / openpyxl control characters + val = illegal_re.sub('', val) + # Strip unnecessary head, style, script, meta, link tags so report body fits within cell limits + h = re.sub(r'<(?:head|style|script|meta|link)[^>]*?>.*?', '', val, flags=re.DOTALL | re.IGNORECASE) + h = re.sub(r'<(?:meta|link)[^>]*?>', '', h, flags=re.IGNORECASE) + h = re.sub(r'\n\s*\n', '\n', h) + return h.strip() + + +def fetch_pathology_reports(output_file=None): + if output_file is None: + output_file = os.path.join(script_dir, 'registry_pathologyreport.xlsx') + + print(f"Fetching PathologyReport records from database...") + qs = PathologyReport.objects.all().values() + data = list(qs) + + print(f"Cleaning string fields & HTML body for Excel cell limit...") + for item in data: + for k, v in item.items(): + if isinstance(v, str): + item[k] = clean_string_for_excel(v) + + df = pd.DataFrame(data) + print(f"Fetched {len(df)} rows. Writing to {output_file}...") + df.to_excel(output_file, index=False) + print(f"Successfully exported {len(df)} rows to {output_file}") + + +if __name__ == '__main__': + default_output = os.path.join(script_dir, 'registry_pathologyreport.xlsx') + target_path = sys.argv[1] if len(sys.argv) > 1 else default_output + fetch_pathology_reports(target_path)