{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2605-09440","title":"Key Coverage Matters: Semi-Structured Extraction of OCR Clinical Reports","arxiv_id":"2605.09440","date":"2026-05-10","proceeding":null,"authors":["Yu Wang","Yingyun Li","Ying Qin","Haiyang Qian"],"abstract":"Clinical reports are often fragmented across healthcare institutions because privacy regulations and data silos limit direct information sharing. When patients seek care at a different hospital, they often carry paper or scanned reports from prior visits. This hinders EHR integration and longitudinal review, and downstream applications that depend on more complete patient records, such as patient management, follow-up care, real-world studies, and clinical-trial matching. Although OCR can digitize such reports, reliable extraction remains challenging because clinical documents are heterogeneous, OCR text is noisy, and many healthcare settings require low-cost on-premise deployment. We formulate this problem as canonical key-conditioned extractive question answering over OCR-derived clinical reports. Because the key fields are neither fixed nor known in advance, the key space is open. We maintain a canonical key inventory through iterative key mining, normalization, clustering, and lightweight human verification, and introduce key coverage as a metric to quantify inventory completeness. Using a 0.2B BERT-based model, experiments on real-world reports from more than 20 hospitals show performance improves monotonically with key coverage. The model achieves F1 scores of 0.839 and 0.893 under exact match and boundary-tolerant matching, respectively, once the Top-90 canonical keys are covered. These results show that key coverage is a dominant factor for end-to-end performance. At Top-90 coverage, our model outperforms a fine-tuned Qwen3-0.6B baseline under exact match. Although our annotated corpus is Chinese, the method relies on the language-agnostic key-value organization of semi-structured clinical reports and can be adapted to other settings given an appropriate canonical key inventory and alias mapping.","url_abs":"https://arxiv.org/abs/2605.09440","url_pdf":"https://arxiv.org/pdf/2605.09440","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2605.09440","atlas_url":"https://app.syntology.ai/?focus=2605.09440","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2605.09440"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters","reach":null}],"summary":{"ran":14,"unverified":1},"by_repo_kind":{"found_in_text":{"samples":15,"ran":14,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":15,"samples":[{"code_sha256_prefix":"179fe32f233be093","entry":"build_bioe_label_list","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/data_utils.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/data_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"179fe32f233be093"}},{"code_sha256_prefix":"a8d54d9ac649dc86","entry":"chunk_text_by_tokens","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/chunking.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/chunking.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a8d54d9ac649dc86"}},{"code_sha256_prefix":"f01d413a9d958446","entry":"clean_content","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/ebqa/evaluate.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/ebqa/evaluate.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f01d413a9d958446"}},{"code_sha256_prefix":"2b18ad80ce4ac42d","entry":"ensure_block","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/config_io.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/config_io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2b18ad80ce4ac42d"}},{"code_sha256_prefix":"6de26210f86477e2","entry":"ground_truth","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/ebqa/evaluate.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/ebqa/evaluate.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6de26210f86477e2"}},{"code_sha256_prefix":"610255fbdf3fc311","entry":"load_config","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/ebqa/config_io.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/ebqa/config_io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"610255fbdf3fc311"}},{"code_sha256_prefix":"f272a8efae5aa2c7","entry":"load_config","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/config_io.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/config_io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f272a8efae5aa2c7"}},{"code_sha256_prefix":"4f4bf6d05f6f7c33","entry":"merge_entities","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/chunking.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/chunking.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4f4bf6d05f6f7c33"}},{"code_sha256_prefix":"b5b08f3a7b47b69b","entry":"model_name_from","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/config_io.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/config_io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b5b08f3a7b47b69b"}},{"code_sha256_prefix":"bff4e4f9041fad1e","entry":"predict_with_chunking","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/chunking.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/chunking.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bff4e4f9041fad1e"}},{"code_sha256_prefix":"0f7378d2601898b5","entry":"resolve_model_dir","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/ebqa/config_io.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/ebqa/config_io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0f7378d2601898b5"}},{"code_sha256_prefix":"0e1ff2c9ffe62f5c","entry":"resolve_tokenizer_name","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/ebqa/config_io.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/ebqa/config_io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0e1ff2c9ffe62f5c"}},{"code_sha256_prefix":"53a356a86f126c51","entry":"split_samples","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/kv_ner/data_utils.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/kv_ner/data_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"53a356a86f126c51"}},{"code_sha256_prefix":"6467a3465d44e332","entry":"strip_trailing_punctuation","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/ebqa/evaluate.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/ebqa/evaluate.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6467a3465d44e332"}},{"code_sha256_prefix":"283837acd110a1b7","entry":"build_model","repo":"AI-Starfish-Research/Key-Coverage-Matters","repo_kind":"found_in_text","path":"src/pre_struct/ebqa/train_ebqa.py","file_url":"https://github.com/AI-Starfish-Research/Key-Coverage-Matters/blob/HEAD/src/pre_struct/ebqa/train_ebqa.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"283837acd110a1b7"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CL","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}