#!/usr/bin/env python3 """ Fill missing Latin terms in dental_dict.db using a comprehensive dictionary and PubMed MeSH terms for verification. Usage: python3 fill_latin_terms_v2.py # Preview changes (dry-run) python3 fill_latin_terms_v2.py --apply # Apply changes to DB python3 fill_latin_terms_v2.py --category 임플란트 python3 fill_latin_terms_v2.py --pubmed # Also search PubMed for remaining """ import sqlite3 import json import sys import time import urllib.request import urllib.parse import re DB_PATH = '/srv/homeclaw/.smallclaw/databases/dental_dict.db' EUTILS = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils' # ── Comprehensive Latin dictionary ── # Key = lowercase english term, Value = Latin term LATIN_DICT = { # ===== ANATOMY ===== 'alveolar bone': 'os alveolare', 'alveolar bone loss': 'resorptio ossis alveolaris', 'alveolar ridge augmentation': 'augmentatio cristae alveolaris', 'alveolar crest': 'crista alveolaris', 'alveolar process': 'processus alveolaris', 'alveolar bone assessment': 'evaluatio ossis alveolaris', 'alveoloplasty': 'alveoloplastica', 'periosteum': 'periosteum', 'mandible': 'mandibula', 'maxilla': 'maxilla', 'mandibular': 'mandibularis', 'maxillary': 'maxillaris', 'temporal muscle': 'musculus temporalis', 'masseter muscle': 'musculus masseter', 'salivary gland': 'glandula salivaria', 'parotid gland': 'glandula parotidea', 'submandibular gland': 'glandula submandibularis', 'sublingual gland': 'glandula sublingualis', 'trigeminal nerve': 'nervus trigeminus', 'facial nerve': 'nervus facialis', 'inferior alveolar nerve': 'nervus alveolaris inferior', 'lingual nerve': 'nervus lingualis', 'mental nerve': 'nervus mentalis', 'incisive nerve': 'nervus incisivus', 'dental anatomy': 'anatomia dentalis', 'oral mucosa': 'mucosa oralis', 'gingiva': 'gingiva', 'attached gingiva': 'gingiva inserta', 'free gingiva': 'gingiva libera', 'interdental papilla': 'papilla interdentalis', 'gingival sulcus': 'sulcus gingivalis', 'gingival recession': 'recessio gingivae', 'periodontal ligament': 'ligamentum periodontale', 'periodontal pocket': 'sacculus periodontalis', 'cementum': 'cementum', 'enamel': 'enamelum', 'dentin': 'dentinum', 'pulp': 'pulpa dentis', 'pulp chamber': 'cavum pulpi', 'root canal': 'canalis radicis dentis', 'pulp horn': 'cornu pulpi', 'apex': 'apex radicis dentis', 'occlusion': 'occlusio', 'tmj': 'articulatio temporomandibularis', 'temporomandibular joint': 'articulatio temporomandibularis', 'articular disc': 'discus articularis', 'articular eminence': 'tuberculum articulare', 'condyle': 'condylus mandibulae', 'coronoid process': 'processus coronoideus', 'ramus': 'ramus mandibulae', 'angle of mandible': 'angulus mandibulae', 'mental foramen': 'foramen mentale', 'incisive foramen': 'foramen incisivum', 'greater palatine foramen': 'foramen palatinum majus', 'nasopalatine canal': 'canalis nasopalatinus', 'maxillary sinus': 'sinus maxillaris', 'nasal cavity': 'cavum nasi', 'hard palate': 'palatum durum', 'soft palate': 'palatum molle', 'uvula': 'uvula', 'tongue': 'lingua', 'floor of mouth': 'solum cavi oris', 'lip': 'labium', 'upper lip': 'labium superius', 'lower lip': 'labium inferius', 'buccal mucosa': 'mucosa buccalis', 'palate': 'palatum', 'teeth': 'dentes', 'tooth': 'dens', 'primary tooth': 'dens deciduus', 'permanent tooth': 'dens permanens', 'deciduous tooth': 'dens deciduus', 'crown': 'corona dentis', 'root': 'radix dentis', 'cervical line': 'linea cervicalis', 'cementoenamel junction': ' junctio cementoenamelis', 'enamel prism': 'prisma adamantina', 'dentin tubule': 'tubulus dentinalis', 'odontoblast': 'odontoblastus', 'ameloblast': 'ameloblastus', 'cementoblast': 'cementoblastus', 'osteoblast': 'osteoblastus', 'osteoclast': 'osteoclastus', 'fibroblast': 'fibroblastus', 'collagen': 'collagen', 'bone': 'os', 'cortical bone': 'os corticale', 'cancellous bone': 'os spongiosum', 'lamina dura': 'lamina dura', 'bundle bone': 'os fasciculatum', # ===== ORAL SURGERY (구강외과) ===== 'extraction': 'extractio dentis', 'tooth extraction': 'extractio dentis', 'impacted tooth': 'dens impactus', 'impacted tooth extraction': 'extractio dentis impacti', 'wisdom tooth': 'dens serotinus', 'wisdom tooth extraction': 'extractio dentis serotini', 'third molar extraction': 'extractio dentis serotini', 'open reduction internal fixation': 'reductio aperta fixatio interna', 'tooth sectioning': 'sectio dentis', 'post-extraction hemorrhage': 'haemorrhagia post extractionem', 'dry socket': 'alveolitis sicca', 'alveolar osteitis': 'alveolitis', 'fracture mandible': 'fractura mandibulae', 'fracture maxilla': 'fractura maxillae', 'mandibular fracture': 'fractura mandibulae', 'maxillary fracture': 'fractura maxillae', 'zygomatic fracture': 'fractura ossis zygomatici', 'le fort fracture': 'fractura Le Fort', 'cyst oral': 'cystis oralis', 'odontogenic cyst': 'cystis odontogenica', 'radicular cyst': 'cystis radicularis', 'dentigerous cyst': 'cystis dentigera', 'keratocyst': 'cystis keratocystica', 'tumor oral': 'tumor oralis', 'ameloblastoma': 'ameloblastoma', 'odontoma': 'odontoma', 'biopsy': 'biopsia', 'incisional biopsy': 'biopsia incisionalis', 'excisional biopsy': 'biopsia excisionalis', 'frozen section biopsy': 'biopsia cryosectionis', 'needle biopsy': 'biopsia per acus', 'frozen section': 'sectio congelata', 'oral mucosal flap': 'lamina mucosae oris', 'mucoperiosteal flap': 'lamina mucoperiostealis', 'bone graft': 'transplantatio ossis', 'bone grafting': 'transplantatio ossis', 'sinus lift': 'elevatio sinus maxillaris', 'bone resection': 'resectio ossis', 'enucleation': 'enucleatio', 'marsupialization': 'marsupializatio', 'wound dehiscence': 'dehiscentia vulneris', 'wound healing': 'sanatio vulneris', 'hemostasis': 'haemostasis', 'suturing': 'sutura', 'abscess incision': 'incisio abscessus', 'drainage': 'drainage', 'trismus': 'trismus', 'lip laceration': 'laceratio labii', 'tongue laceration': 'laceratio linguae', 'nerve injury': 'laesio nervi', 'nerve repair': 'reparatio nervi', 'skin graft': 'transplantatio cutis', 'free flap': 'lamina libera', 'skin flap': 'lamina cutanea', 'vascularized graft': 'transplantatum vascularizatum', 'platelet-rich plasma': 'plasma plateletis divite', 'prf': 'fibrina plateletis divite', 'cleft lip': 'labium fissum', 'cleft palate': 'palatum fissum', 'cleft lip and palate': 'labium et palatum fissum', 'distraction osteogenesis': 'osteogenesis distractione', 'orthognathic surgery': 'chirurgia orthognathica', 'genioplasty': 'genioplastica', 'maxillectomy': 'maxillectomia', 'mandibulectomy': 'mandibulectomia', 'glossectomy': 'glossectomia', 'maxillary osteotomy': 'osteotomia maxillae', 'mandibular osteotomy': 'osteotomia mandibulae', 'segmental osteotomy': 'osteotomia segmentalis', 'tissue engineering': 'ingeniaria textus', # ===== ORTHODONTICS (교정) ===== 'orthodontic bracket': 'bracket orthodonticum', 'bracket': 'bracket', 'archwire': 'filarum arcus', 'orthodontic force': 'vis orthodontica', 'orthodontic wire': 'filarum orthodonticum', 'retainer orthodontic': 'retentor orthodonticus', 'orthodontic retainer': 'retentor orthodonticus', 'malocclusion': 'malocclusio', 'overjet': 'overjet', 'overbite': 'overbite', 'crossbite': 'crossbite', 'open bite': 'apertura mordendi', 'deep bite': 'morsus profundus', 'anterior crossbite': 'crossbite anterior', 'posterior crossbite': 'crossbite posterior', 'scissor bite': 'morsus scissors', 'class i malocclusion': 'malocclusio classis I', 'class ii malocclusion': 'malocclusio classis II', 'class iii malocclusion': 'malocclusio classis III', 'crowding': 'congestio dentium', 'spacing': 'diastema', 'diastema': 'diastema', 'midline deviation': 'deviatio lineae medialis', 'palatal expander': 'expansor palatinus', 'rapid maxillary expansion': 'expansio maxillaris rapida', 'lingual orthodontic appliance': 'apparatus orthodonticus lingualis', 'headgear': 'apparatus capitis', 'clear aligner': 'aligner transparentis', 'orthodontic elastic': 'elastica orthodontica', 'orthodontic band': 'fascia orthodontica', 'orthodontic bonding': 'connexio orthodontica', 'orthodontic debonding': 'deconnexio orthodontica', 'orthodontic tooth movement': 'motio dentis orthodontica', 'anchorage': 'anchorage', 'temporary anchorage device': 'dispositivum anchorae temporarium', 'mini-screw': 'mini-stria', 'mini-implant orthodontic': 'implantatum orthodonticum parvum', 'functional appliance': 'apparatus functionalis', 'twin block': 'twin block', 'bionator': 'bionator', 'herbst appliance': 'apparatus Herbst', 'orthognathic surgery orthodontic': 'chirurgia orthognathica orthodontica', 'serial extraction': 'extractio serialis', 'interproximal reduction': 'reductio interproximalis', 'retention orthodontic': 'retentio orthodontica', 'relapse orthodontic': 'recidiva orthodontica', 'root resorption orthodontic': 'resorptio radicis orthodontica', 'cleft orthodontics': 'orthodontia fissurae', 'growth modification': 'modificatio crescentiae', 'cephalometric analysis': 'analysis cephalometrica', 'cephalometric tracing': 'tracing cephalometricum', 'bolton analysis': 'analysis Bolton', 'space analysis': 'analysis spatii', 'treatment planning orthodontic': 'planatio therapiae orthodonticae', # ===== CONSERVATIVE DENTISTRY (보존) ===== 'dental caries': 'caries dentis', 'caries': 'caries', 'enamel caries': 'caries enameli', 'dentin caries': 'caries dentini', 'root caries': 'caries radicis', 'secondary caries': 'caries secundaria', 'rampant caries': 'caries rampantis', 'early childhood caries': 'caries infantum praecox', 'bottle caries': 'caries lactis', 'nursing caries': 'caries lactis', 'cavity preparation': 'preparatio cavitatis', 'class i cavity': 'cavitas classis I', 'class ii cavity': 'cavitas classis II', 'class iii cavity': 'cavitas classis III', 'class iv cavity': 'cavitas classis IV', 'class v cavity': 'cavitas classis V', 'acid etching': 'acidum etching', 'etching': 'etching acidum', 'bonding': 'connexio chemicalis', 'dental bonding': 'connexio dentalis chemicalis', 'composite resin': 'resina composita', 'composite restoration': 'restauratio resinae compositae', 'resin-modified glass ionomer cement': 'cementum ionomerum vitreum resina modificatum', 'glass ionomer': 'cementum ionomerum vitreum', 'glass ionomer cement': 'cementum ionomerum vitreum', 'amalgam': 'amalgama', 'amalgam restoration': 'restauratio amalgamae', 'porcelain': 'porcellana', 'porcelain restoration': 'restauratio porcellanae', 'gold restoration': 'restauratio auri', 'inlay': 'inlay', 'onlay': 'onlay', 'pulp capping': 'operculatio pulpi', 'direct pulp capping': 'operculatio pulpi directa', 'indirect pulp capping': 'operculatio pulpi indirecta', 'pulpotomy': 'pulpotomia', 'pulpectomy': 'pulpectomia', 'root canal treatment': 'therapia canalis radicis', 'root canal therapy': 'therapia canalis radicis', 'endodontic treatment': 'therapia endodontica', 'apicoectomy': 'apicectomia', 'retrograde filling': 'obturatio retrograda', 'gutta-percha': 'gutta-percha', 'endodontic file': 'lima endodontica', 'rubber dam': 'dammen rubber', 'dental operating microscope': 'microscopium dentale operativum', 'magnification': 'magnificatio', 'cracked tooth syndrome': 'syndroma dentis fissi', 'cracked tooth': 'dens fissus', 'tooth fracture': 'fractura dentis', 'crown fracture': 'fractura coronae dentis', 'root fracture': 'fractura radicis dentis', 'tooth wear': 'abrasio dentis', 'dental erosion': 'erosio dentalis', 'erosion dental': 'erosio dentalis', 'abrasion dental': 'abrasio dentalis', 'attrition dental': 'attritio dentalis', 'abfraction': 'abfractio', 'tooth bleaching': 'albor dentium', 'whitening': 'albor', 'vital bleaching': 'albor vitalis', 'non-vital bleaching': 'albor non-vitalis', 'fluoride treatment': 'therapia fluoridi', 'fissure sealant': 'sealant fissurae', 'pit and fissure sealant': 'sealant fossae et fissurae', 'sealant': 'sealant', 'varnish dental': 'varnish dentale', 'prophylaxis dental': 'prophylaxis dentalis', 'scaling dental': 'scalatio dentalis', 'polishing dental': 'politura dentalis', 'air polishing': 'politura aerea', 'ultrasonic scaling': 'scalatio ultrasonica', 'hand scaling': 'scalatio manualis', 'sponge retention': 'retentio spongiae', 'matrix band': 'fascia matricis', 'wedge dental': 'cuneus dentalis', 'liner dental': 'liner dentale', 'base dental': 'basis dentalis', 'varnish cavity': 'varnish cavitatis', 'desensitizing agent': 'agens desensibilizans', 'remineralization': 'remineralizatio', 'demineralization': 'demineralizatio', # ===== PROSTHODONTICS (보철) ===== 'prosthodontics': 'prosthodontia', 'crown prosthodontic': 'corona', 'bridge prosthodontic': 'pons', 'denture': 'prosthesis mobilis', 'complete denture': 'prosthesis mobilis totalis', 'partial denture': 'prosthesis mobilis partialis', 'removable partial denture': 'prosthesis mobilis partialis removibilis', 'fixed partial denture': 'prosthesis fixa partialis', 'overlay denture': 'prosthesis mobilis overlay', 'immediate denture': 'prosthesis mobilis immediata', 'implant denture': 'prosthesis mobilis implantatis', 'veneer': 'fornix laminaris', 'porcelain veneer': 'fornix laminaris porcellanae', 'porcelain fused to metal crown': 'corona porcellanae et metalli', 'all-ceramic crown': 'corona tota ceramica', 'full metal crown': 'corona tota metalli', 'gold crown': 'corona auri', 'zirconia crown': 'corona zirconiae', 'abutment prosthodontic': 'palum', 'pontic': 'corona pontis', 'retainer prosthodontic': 'retentor', 'clasp': 'clasp', 'connector': 'connexor', 'retention prosthodontic': 'retentio', 'support prosthodontic': 'supportum', 'stability prosthodontic': 'stabilitas', 'impression prosthodontic': 'impressio', 'impression material': 'materia impressionis', 'alginate': 'alginate', 'polyether': 'polyether', 'silicone impression': 'impressio siliconis', 'bite registration': 'registratio mordendi', 'facebow': 'arcus facialis', 'articulator': 'articulator', 'mounting': 'montatio', 'wax pattern': 'pattern cerae', 'wax try-in': 'probatio cerae', 'metal framework': 'framework metalli', 'porcelain firing': 'coctio porcellanae', 'glazing': 'glaciatio', 'shade matching': 'concordantia coloris', 'shade guide': 'dux coloris', 'titanium': 'titanium', 'cobalt-chromium': 'cobaltum-chromium', 'noble metal': 'metal nobile', 'base metal': 'metal basis', 'acrylic resin': 'resina acrylica', 'porcelain prosthodontic': 'porcellana', 'ceramic': 'ceramica', 'composite prosthodontic': 'resina composita', 'dental laboratory': 'laboratorium dentale', 'denture repair': 'reparatio prostheseos mobilis', 'denture reline': 'reline prostheseos mobilis', 'denture rebasing': 'rebasing prostheseos mobilis', 'denture adjustment': 'adjustatio prostheseos mobilis', 'occlusal adjustment': 'adjustatio occlusalis', 'occlusal splint': 'splint occlusalis', 'night guard': 'guardia noctis', 'mouth guard': 'guardia oris', 'sports guard': 'guardia athletica', 'tmj splint': 'splint TMJ', 'provisional restoration': 'restauratio provisoria', 'temporary crown': 'corona provisoria', 'temporary bridge': 'pons provisorius', 'post and core': 'palum et cor', 'ferrule': 'ferrule', 'crown lengthening prosthodontic': 'elongatio coronae', 'margin prosthodontic': 'margo', 'finish line': 'linea finitionis', 'chamfer': 'chamfer', 'shoulder': 'humerus', 'feather edge': 'margo tenuis', 'die': 'die', 'dies': 'dies', 'investment': 'investimentum', 'casting': 'casting', 'spruing': 'spruing', 'burnout': 'burnout', # ===== PEDIATRIC DENTISTRY (소아치과) ===== 'pediatric dentistry': 'odontiatria paediatrica', 'primary tooth': 'dens deciduus', 'permanent tooth': 'dens permanens', 'mixed dentition': 'dentitio mixta', 'deciduous dentition': 'dentitio decidua', 'permanent dentition': 'dentitio permanens', 'eruption': 'eruptio', 'tooth eruption': 'eruptio dentis', 'eruption sequence': 'sequentia eruptionis', 'delayed eruption': 'eruptio dilata', 'premature eruption': 'eruptio praematura', 'premature loss of primary tooth': 'pematura amissio dentis decidui', 'early childhood caries': 'caries infantum praecox', 'nursing caries': 'caries lactis', 'baby bottle tooth decay': 'caries lactis', 'bottle caries': 'caries lactis', 'rampant caries pediatric': 'caries rampantis infantilis', 'pulp therapy for primary teeth': 'therapia pulpi dentium deciduorum', 'pulpotomy primary': 'pulpotomia dentis decidui', 'pulpectomy primary': 'pulpectomia dentis decidui', 'stainless steel crown': 'corona chalybis inoxydabilis', 'ssc': 'corona chalybis inoxydabilis', 'strip crown': 'corona strip', 'preventive resin restoration': 'restauratio resinae preventiva', 'interim therapeutic restoration': 'restauratio therapeutica interim', 'itr': 'restauratio therapeutica interim', 'art restoration': 'restauratio therapeutica artis', 'atraumatic restorative treatment': 'therapia restaurativa atraumatica', 'space maintainer': 'maintenitor spatii', 'band and loop': 'fascia et circuitus', 'distal shoe': 'calceus distalis', 'lingual arch': 'arcus lingualis', 'nance appliance': 'apparatus Nance', 'space regainer': 'recuperator spatii', 'behavior management': 'directio comportamenti', 'tell-show-do': 'dic-monstra-face', 'sedation pediatric': 'sedatio paediatrica', 'nitrous oxide': 'oxidum nitrosum', 'conscious sedation': 'sedatio conscia', 'general anesthesia pediatric': 'anaesthesia generalis paediatrica', 'local anesthesia pediatric': 'anaesthesia localis paediatrica', 'sealant pediatric': 'sealant paediatricus', 'fluoride pediatric': 'fluoridum paediatricum', 'fluoride varnish': 'varnish fluoridi', 'topical fluoride': 'fluoridum topicum', 'systemic fluoride': 'fluoridum systemica', 'fissure sealant pediatric': 'sealant fissurae paediatricus', 'molar incisor hypomineralization': 'hypomineralizatio molaris incisivi', 'mih': 'hypomineralizatio molaris incisivi', 'amelogenesis imperfecta': 'amelogenesis imperfecta', 'dentinogenesis imperfecta': 'dentinogenesis imperfecta', 'dent dysplasia': 'dysplasia dentis', 'regenerative endodontics': 'endodontia regenerativa', 'apexification': 'apexificatio', 'apexogenesis': 'apexogenesis', 'traumatic dental injury': 'laesio dentis traumatica', 'tooth avulsion': 'avulsio dentis', 'tooth intrusion': 'intrusio dentis', 'tooth luxation': 'luxatio dentis', 'tooth concussion': 'concussio dentis', 'tooth subluxation': 'subluxatio dentis', 'root fracture pediatric': 'fractura radicis paediatrica', 'replantation': 'replantatio', 'splinting dental': 'splinting dentalis', 'ankylosis': 'ankylosis', 'pulp necrosis': 'necrosis pulpi', 'pulpal vitality': 'vitalitas pulpi', 'vitality test': 'test vitalitatis', 'electric pulp test': 'test pulpi electricus', 'thermal test': 'test thermalis', 'radiographic examination pediatric': 'examinatio radiographica paediatrica', 'bitewing radiograph pediatric': 'radiographia bitewing paediatrica', 'periapical radiograph pediatric': 'radiographia periapicalis paediatrica', 'panoramic radiograph pediatric': 'radiographia panoramica paediatrica', # ===== PERIODONTICS (치주) ===== 'periodontitis': 'periodontitis', 'gingivitis': 'gingivitis', 'chronic periodontitis': 'periodontitis chronica', 'aggressive periodontitis': 'periodontitis aggressiva', 'necrotizing periodontitis': 'periodontitis necroticans', 'periodontitis classification': 'classificatio periodontitidis', 'gingivitis classification': 'classificatio gingivitidis', 'plaque-induced gingivitis': 'gingivitis plack inducta', 'non-plaque-induced gingivitis': 'gingivitis non-plack inducta', 'periodontal abscess': 'abscessus periodontalis', 'gingival abscess': 'abscessus gingivalis', 'pericoronitis': 'pericoronitis', 'periodontal pocket': 'sacculus periodontalis', 'probing depth': 'profunditas probandi', 'clinical attachment level': 'nexus clinicalis attachmentis', 'clinical attachment loss': 'amissio nexus clinicalis', 'bleeding on probing': 'haemorrhagia in probando', 'suppuration': 'suppuratio', 'gingival enlargement': 'enlargement gingivae', 'gingival hyperplasia': 'hyperplasia gingivae', 'drug-induced gingival hyperplasia': 'hyperplasia gingivae pharmacogenica', 'gingival fibromatosis': 'fibromatosis gingivae', 'desquamative gingivitis': 'gingivitis desquamativa', 'gingivectomy': 'gingivectomia', 'gingivoplasty': 'gingivoplastica', 'periodontal flap surgery': 'chirurgia laminae periodontalis', 'mucogingival surgery': 'chirurgia mucogingivalis', 'osseous surgery': 'chirurgia ossea', 'bone surgery': 'chirurgia ossea', 'bone grafting periodontal': 'transplantatio ossis periodontalis', 'guided tissue regeneration': 'regeneratio textus directa', 'guided bone regeneration': 'regeneratio ossis directa', 'enamel matrix derivative': 'derivatum matricis enameli', 'emd': 'derivatum matricis enameli', 'barrier membrane': 'membranula barrierae', 'connective tissue graft': 'transplantatio textus conectivi', 'free gingival graft': 'transplantatio gingivae liberae', 'coronally advanced flap': 'lamina coronarie provecta', 'laterally positioned flap': 'lamina lateraliter posita', 'double papilla flap': 'lamina papillarum duplicium', 'tunnel technique': 'technica tunnel', 'pinhole technique': 'technica foraminis', 'scaling and root planing': 'scalatio et planatio radicis', 'root planing': 'planatio radicis', 'dental scaling': 'scalatio dentalis', 'curettage': 'curettage', 'open curettage': 'curettage aperta', 'closed curettage': 'curettage clausa', 'periodontal maintenance': 'manutentio periodontalis', 'supportive periodontal therapy': 'therapia periodontalis supportiva', 'occlusal adjustment periodontal': 'adjustatio occlusalis', 'occlusal splint periodontal': 'splint occlusalis', 'bruxism': 'bruxismus', 'furcation involvement': 'involvement furcationis', 'furcation': 'furcatio', 'root amputation': 'amputatio radicis', 'root resection': 'resectio radicis', 'hemisection': 'hemisectio', 'bicuspidization': 'bicuspidizatio', 'tunnel preparation': 'preparatio tunnel', 'furcation therapy': 'therapia furcationis', 'periodontal diagnosis': 'diagnosis periodontalis', 'periodontal risk assessment': 'evaluatio risk periodontalis', 'periodontal charting': 'charting periodontalis', 'bleeding index': 'index haemorrhagiae', 'plaque index': 'index plack', 'gingival index': 'index gingivae', 'probing charting': 'charting probandi', 'radiographic assessment periodontal': 'evaluatio radiographica periodontalis', 'mobility test': 'test mobilitatis', 'tooth mobility': 'mobilitas dentis', 'fremitus': 'fremitus', 'occlusal trauma': 'trauma occlusale', 'primary occlusal trauma': 'trauma occlusale primarium', 'secondary occlusal trauma': 'trauma occlusale secundarium', # ===== PREVENTIVE DENTISTRY (예방치학) ===== 'preventive dentistry': 'odontiatria preventiva', 'dental prophylaxis': 'prophylaxis dentalis', 'prophylaxis': 'prophylaxis', 'oral hygiene': 'hygiena oris', 'toothbrushing': 'pulzatio dentium', 'toothbrush': 'penicillus dentium', 'electric toothbrush': 'penicillus dentium electricus', 'flossing': 'flossing', 'dental floss': 'floss dentalis', 'interdental brush': 'peniculus interdentalis', 'interdental cleaning': 'purgatio interdentalis', 'toothpick': 'dentiscalpium', 'oral irrigation': 'irrigatio oralis', 'mouthwash': 'collutorium', 'antimicrobial mouthwash': 'collutorium antimicrobicum', 'fluoride': 'fluoridum', 'fluoride application': 'applicatio fluoridi', 'fluoride varnish': 'varnish fluoridi', 'fluoride gel': 'gel fluoridi', 'fluoride rinse': 'rinse fluoridi', 'topical fluoride application': 'applicatio fluoridi topica', 'systemic fluoride': 'fluoridum systemica', 'water fluoridation': 'fluoridatio aquae', 'fluorosis': 'fluorosis', 'dental plaque': 'plaque dentale', 'plaque control': 'directio plack', 'plaque formation': 'formatio plack', 'plaque removal': 'remotio plack', 'dental calculus': 'calculus dentalis', 'supragingival calculus': 'calculus supragingivalis', 'subgingival calculus': 'calculus subgingivalis', 'dental biofilm': 'biofilm dentale', 'caries prevention': 'preventio cariei', 'caries risk assessment': 'evaluatio risk cariei', 'caries activity test': 'test activitatis cariei', 'diet counseling': 'consilium diaetae', 'sugar intake': 'introitus sacchari', 'oral health education': 'educatio salutis oralis', 'oral health promotion': 'promotio salutis oralis', 'community oral health': 'salus oralis communitatis', 'school dental health': 'salus dentalis scholae', 'pit and fissure sealant': 'sealant fossae et fissurae', 'sealant preventive': 'sealant preventivus', 'dmft index': 'index DMFT', 'dmfs index': 'index DMFS', 'dfs index': 'index DFS', 'caries index': 'index cariei', 'oral hygiene index': 'index hygienae oralis', 'patient education': 'educatio patientis', 'motivational interviewing': 'interview motivans', 'health belief model': 'model credentiae salutis', 'smoking cessation': 'cessatio fumandi', 'tobacco cessation': 'cessatio tabaci', 'alcohol counseling': 'consilium alcohol', 'periodontal screening': 'screening periodontale', # ===== ORAL MEDICINE (구강내과) ===== 'oral medicine': 'medicina oralis', 'oral diagnosis': 'diagnosis oralis', 'oral mucosal examination': 'examinatio mucosae oralis', 'oral examination': 'examinatio oralis', 'extraoral examination': 'examinatio extraoralis', 'intraoral examination': 'examinatio intraoralis', 'stomatitis': 'stomatitis', 'aphthous stomatitis': 'stomatitis aphthosa', 'recurrent aphthous stomatitis': 'stomatitis aphthosa recurrens', 'herpes simplex': 'herpes simplex', 'herpes labialis': 'herpes labialis', 'oral herpes': 'herpes oralis', 'herpes zoster': 'herpes zoster', 'candidiasis oral': 'candidiasis oralis', 'oral candidiasis': 'candidiasis oralis', 'thrush': 'candidiasis oralis', 'angular cheilitis': 'cheilitis angularis', 'cheilitis': 'cheilitis', 'glossitis': 'glossitis', 'geographic tongue': 'lingua geographica', 'fissured tongue': 'lingua fissurata', 'hairy tongue': 'lingua villosa', 'black hairy tongue': 'lingua villosa nigra', 'burning mouth syndrome': 'syndroma ardens oris', 'xerostomia': 'xerostomia', 'dry mouth': 'xerostomia', 'xerostomia management': 'directio xerostomiae', 'artificial saliva': 'saliva artificialis', 'saliva stimulant': 'stimulus salivae', 'saliva substitute': 'substitutum salivae', 'sialadenitis': 'sialadenitis', 'sialolithiasis': 'sialolithiasis', 'salivary gland dysfunction': 'dysfunctio glandulae salivariae', 'mucocele': 'mucocele', 'ranula': 'ranula', 'halitosis': 'halitosis', 'oral malodor': 'malodor oralis', 'oral lichen planus': 'lichen planus oralis', 'lichen planus': 'lichen planus', 'pemphigus': 'pemphigus', 'pemphigoid': 'pemphigoides', 'mucous membrane pemphigoid': 'pemphigoides membranae mucosae', 'erythema multiforme': 'erythema multiforme', 'stevens-johnson syndrome': 'syndroma Stevens-Johnson', 'oral allergy': 'allergia oralis', 'contact allergy oral': 'allergia contactus oralis', 'drug reaction oral': 'reactio pharmacogenica oralis', 'oral leukoplakia': 'leukoplakia oralis', 'leukoplakia': 'leukoplakia', 'erythroplakia': 'erythroplakia', 'oral submucous fibrosis': 'fibrosis submucosa oralis', 'oral potentially malignant disorder': 'disorder potentialiter malignus oralis', 'oral cancer': 'cancer oralis', 'oral squamous cell carcinoma': 'carcinoma cellulis squamosis oralis', 'oral precancer': 'praecancer oralis', 'oral manifestation systemic disease': 'manifestatio oralis morbi systemici', 'oral manifestation': 'manifestatio oralis', 'oral ulcer': 'ulcer oralis', 'oral pain': 'dolor oralis', 'neuropathic pain oral': 'dolor neuropathicus oralis', 'trigeminal neuralgia': 'neuralgia trigemini', 'atypical facial pain': 'dolor faciei atypicus', 'temporomandibular disorder': 'disorder temporomandibularis', 'tmj disorder': 'disorder TMJ', 'tmj pain': 'dolor TMJ', 'myofascial pain': 'dolor myofascialis', 'bruxism oral': 'bruxismus', 'oral dysplasia': 'dysplasia oralis', 'oral infection': 'infectio oralis', 'oral viral infection': 'infectio viralis oralis', 'oral fungal infection': 'infectio fungosa oralis', 'oral bacterial infection': 'infectio bacterialis oralis', 'hiv oral manifestation': 'manifestatio HIV oralis', 'oral ulceration': 'ulceratio oralis', 'vesiculobullous disease': 'morbus vesiculobullous', 'desquamative gingivitis': 'gingivitis desquamativa', 'immune-mediated oral disease': 'morbus oralis immunitate mediatus', # ===== ORAL PATHOLOGY (구강병리) ===== 'oral pathology': 'pathologia oralis', 'histopathology': 'histopathologia', 'pathology': 'pathologia', 'histology': 'histologia', 'cytology': 'cytologia', 'immunohistochemistry': 'immunohistochemia', 'immunohistochemistry ihc': 'immunohistochemia', 'ihc': 'immunohistochemia', 'frozen section': 'sectio congelata', 'biopsy pathology': 'biopsia', 'lesion': 'lesio', 'neoplasm': 'neoplasma', 'benign tumor': 'tumor benignus', 'malignant tumor': 'tumor malignus', 'dysplasia': 'dysplasia', 'hyperplasia': 'hyperplasia', 'metaplasia': 'metaplasia', 'neoplasia': 'neoplasia', 'carcinoma': 'carcinoma', 'squamous cell carcinoma': 'carcinoma cellulis squamosis', 'adenocarcinoma': 'adenocarcinoma', 'sarcoma': 'sarcoma', 'lymphoma': 'lymphoma', 'metastasis': 'metastasis', 'inflammation': 'inflammatio', 'acute inflammation': 'inflammatio acuta', 'chronic inflammation': 'inflammatio chronica', 'granuloma': 'granuloma', 'abscess': 'abscessus', 'necrosis': 'necrosis', 'apoptosis': 'apoptosis', 'cell death': 'mors cellularis', 'cell proliferation': 'proliferatio cellularis', 'angiogenesis': 'angiogenesis', 'fibrosis': 'fibrosis', 'calcification': 'calcificatio', 'ossification': 'ossificatio', 'amyloidosis': 'amyloidosis', 'cyst pathology': 'cystis', 'odontogenic cyst': 'cystis odontogenica', 'odontogenic tumor': 'tumor odontogenicus', 'ameloblastoma pathology': 'ameloblastoma', 'odontoma pathology': 'odontoma', 'odontogenic fibroma': 'fibroma odontogenicum', 'odontogenic myxoma': 'myxoma odontogenicum', 'cementoblastoma': 'cementoblastoma', 'cementoma': 'cementoma', 'periapical granuloma': 'granuloma periapicale', 'periapical cyst': 'cystis periapicalis', 'radicular cyst pathology': 'cystis radicularis', 'residual cyst': 'cystis residualis', 'dentigerous cyst pathology': 'cystis dentigera', 'keratocystic odontogenic tumor': 'tumor keratocysticus odontogenicus', 'nasopalatine duct cyst': 'cystis ductus nasopalatini', 'nasolabial cyst': 'cystis nasolabialis', 'medication-related osteonecrosis of the jaw': 'osteonecrosis mandibulae pharmacogenica', 'mrnoj': 'osteonecrosis mandibulae pharmacogenica', 'osteonecrosis': 'osteonecrosis', 'osteoradionecrosis': 'osteoradionecrosis', 'fibrous dysplasia': 'dysplasia fibrosa', 'paget disease': 'morbus Paget', 'cherubism': 'cherubism', 'eosinophilic granuloma': 'granuloma eosinophilicum', 'lipoma oral': 'lipoma', 'hemangioma oral': 'haemangioma', 'lymphangioma': 'lymphangioma', 'neurofibroma': 'neurofibroma', 'schwannoma': 'schwannoma', 'papilloma oral': 'papilloma', 'fibroma oral': 'fibroma', 'pyogenic granuloma': 'granuloma pyogenicum', 'peripheral ossifying fibroma': 'fibroma ossificans periphericum', 'peripheral giant cell granuloma': 'granuloma cellulare gigans periphericum', 'verrucous carcinoma': 'carcinoma verrucosum', 'mucoepidermoid carcinoma': 'carcinoma mucoepidermoidum', 'adenoid cystic carcinoma': 'carcinoma adenoides cysticum', 'polymorphous adenocarcinoma': 'adenocarcinoma polymorphum', 'clear cell carcinoma': 'carcinoma cellulare clarum', 'basal cell carcinoma oral': 'carcinoma basocellulare', # ===== DENTAL RADIOLOGY (방사선) ===== 'dental radiography': 'radiographia dentalis', 'radiography': 'radiographia', 'radiograph': 'radiographia', 'x-ray': 'radius X', 'x-ray tube': 'tubus radiographicus', 'radiation': 'radiatio', 'radiation dose': 'dosim radiations', 'radiation protection': 'protectio radiations', 'radiation safety': 'securitas radiations', 'radiation exposure': 'expositio radiations', 'ionizing radiation': 'radiatio ionizans', 'non-ionizing radiation': 'radiatio non-ionizans', 'scatter radiation': 'radiatio dispersa', 'primary radiation': 'radiatio primaria', 'secondary radiation': 'radiatio secundaria', 'image receptor': 'receptor imaginis', 'digital radiography': 'radiographia digitalis', 'conventional radiography': 'radiographia conventionalis', 'film radiography': 'radiographia pelliculae', 'periapical radiograph': 'radiographia periapicalis', 'bitewing radiograph': 'radiographia bitewing', 'panoramic radiograph': 'radiographia panoramica', 'occlusal radiograph': 'radiographia occlusalis', 'cephalometric radiograph': 'radiographia cephalometrica', 'cbct': 'tomographia computata conorum fasciculorum', 'cone beam computed tomography': 'tomographia computata conorum fasciculorum', 'computed tomography': 'tomographia computata', 'ct dental': 'tomographia computata dentalis', 'magnetic resonance imaging': 'imago resonantia magnetica', 'mri': 'imago resonantia magnetica', 'ultrasonography': 'ultrasonographia', 'tomography': 'tomographia', 'cephalometry': 'cephalometria', 'sialography': 'sialographia', 'contrast': 'contrast', 'contrast medium': 'medium contrast', 'density radiographic': 'densitas radiographica', 'exposure radiographic': 'expositio radiographica', 'collimation': 'collimatio', 'filtration': 'filtratio', 'scattering': 'dispersio', 'image quality': 'qualitas imaginis', 'image resolution': 'resolutio imaginis', 'image sharpness': 'acuitas imaginis', 'image contrast': 'contrast imaginis', 'image noise': 'strepitus imaginis', 'image artifact': 'artefactum imaginis', 'sensitivity': 'sensibilitas', 'specificity': 'specificitas', 'accuracy': 'accuratio', 'pixel': 'pixel', 'voxel': 'voxel', 'field of view': 'campus visionis', 'magnification radiographic': 'magnificatio radiographica', 'distortion': 'distortio', 'superimposition': 'superimpositio', 'paralleling technique': 'technica parallela', 'bisecting angle technique': 'technica anguli bisecti', 'right angle technique': 'technica anguli recti', 'radiographic landmark': 'landmark radiographicum', 'anatomic landmark': 'landmark anatomicum', 'radiolucent': 'radiolucens', 'radiopaque': 'radiopacum', 'intensifying screen': 'schermo intensificans', 'grid radiographic': 'grill radiographicum', 'lead apron': 'apron plumbi', 'thyroid collar': 'collare thyroideum', 'dosimeter': 'dosimeter', 'alara principle': 'principium ALARA', 'radiographic interpretation': 'interpretatio radiographica', 'radiographic diagnosis': 'diagnosis radiographica', 'radiographic anatomy': 'anatomia radiographica', 'radiographic pathology': 'pathologia radiographica', 'radiographic technique': 'technica radiographica', 'radiographic positioning': 'positio radiographica', 'radiographic error': 'error radiographicus', 'processing radiographic': 'processio radiographica', 'developer': 'developer', 'fixer': 'fixer', 'darkroom': 'camera obscura', 'safelight': 'lux securitatis', 'digital sensor': 'sensor digitalis', 'phosphor plate': 'lamina phosphoris', 'ccd sensor': 'sensor CCD', 'cmos sensor': 'sensor CMOS', 'picture archiving communication system': 'systema archivandi communicandi imaginum', 'pacs': 'systema archivandi communicandi imaginum', 'dicom': 'DICOM', # ===== IMPLANTOLOGY (임플란트) ===== 'bone-implant contact': 'contactus os-implantatis', 'reverse torque': 'momentum reversum', 'lekholm classification': 'classificatio Lekholm', 'all-on-4': 'All-on-4', 'osseointegration': 'osseointegratio', # ===== BASIC DENTAL SCIENCE (기초치의학) ===== 'apical periodontitis': 'periodontitis apicalis', 'oral microbiome': 'microbioma oralis', 'oral microbiology': 'microbiologia oralis', 'oral flora': 'flora oralis', 'oral biofilm basic': 'biofilm oralis', 'occlusal force': 'vis occlusalis', 'tooth wear basic': 'abrasio dentis', 'dental erosion basic': 'erosio dentalis', 'dental anatomy basic': 'anatomia dentalis', 'dental histology': 'histologia dentalis', 'dental embryology': 'embryologia dentalis', 'tooth development': 'development dentis', 'odontogenesis': 'odontogenesis', 'bell stage': 'stadium campanae', 'bud stage': 'stadium gemmae', 'cap stage': 'stadium pilei', 'dental papilla': 'papilla dentalis', 'enamel organ': 'organum enameli', 'dental sac': 'saccus dentalis', 'hertwig epithelial root sheath': 'vagina epithelialis radicis Hertwig', 'epithelial rests of malassez': 'restae epitheliales Malassez', 'reduction enamel epithelium': 'epithelium enameli reductum', 'amelogenesis': 'amelogenesis', 'dentinogenesis': 'dentinogenesis', 'cementogenesis': 'cementogenesis', 'physiology': 'physiologia', 'oral physiology': 'physiologia oralis', 'mastication': 'masticatio', 'deglutition': 'deglutitio', 'salivation': 'salivatio', 'taste': 'gustus', 'tactile sensation oral': 'sensio tactilis oralis', 'pain oral': 'dolor oralis', 'temperature sensation oral': 'sensio temperaturae oralis', 'proprioception oral': 'proprioceptio oralis', 'biochemistry': 'biochemia', 'oral biochemistry': 'biochemia oralis', 'pharmacology': 'pharmacologia', 'oral pharmacology': 'pharmacologia oralis', 'local anesthetic': 'anaestheticum locale', 'vasoconstrictor': 'vasoconstrictor', 'analgesic': 'analgesic', 'antibiotic': 'antibioticum', 'antifungal': 'antifungale', 'antiviral': 'antivirale', 'anti-inflammatory': 'anti-inflammatorium', 'corticosteroid': 'corticosteroidum', 'autonomic drug': 'pharma autonomicum', 'controlled drug': 'pharma temperatum', 'prescription': 'prescriptio', 'drug interaction': 'interactio pharmacorum', 'adverse drug reaction': 'reactio adversa pharmacorum', 'allergy drug': 'allergia pharmacorum', 'anaphylaxis': 'anaphylaxis', 'emergency dental': 'emergentia dentalis', 'medical emergency': 'emergentia medica', 'cardiopulmonary resuscitation': 'resuscitatio cardiopulmonalis', 'cpr': 'resuscitatio cardiopulmonalis', 'basic life support': 'supportus vitae basicus', 'advanced cardiac life support': 'supportus vitae cardiacus provectus', 'infection control': 'directio infectionis', 'sterilization': 'sterilizatio', 'disinfection': 'disinfectio', 'aseptic technique': 'technica aseptica', 'cross-contamination': 'contaminatio crucis', 'universal precaution': 'praecautio universalis', 'standard precaution': 'praecautio standard', 'personal protective equipment': 'instrumentum protectionis personalis', 'ppe': 'instrumentum protectionis personalis', 'hand hygiene': 'hygiena manuum', 'sharps disposal': 'dispositio acutorum', 'biohazard': 'biohazardum', 'bloodborne pathogen': 'pathogen sanguineum', 'hepatitis b': 'hepatitis B', 'hiv': 'HIV', 'infection control protocol': 'protocol directio infectionis', 'dental law': 'lex dentalis', 'dental ethics': 'ethica dentalis', 'informed consent': 'consensus informatus', 'malpractice': 'malpractice', 'patient rights': 'jura patientis', 'dental record': 'record dentalis', 'dental charting': 'charting dentalis', 'treatment planning': 'planatio therapiae', 'dental insurance': 'assecuration dentalis', 'evidence-based dentistry': 'odontiatria evidentia fundata', 'critical appraisal': 'evaluatio critica', 'research methodology': 'methodologia investigationis', 'statistical analysis': 'analysis statistica', 'epidemiology': 'epidemiologia', 'oral epidemiology': 'epidemiologia oralis', } # ── PubMed MeSH search ── def search_mesh(term: str, api_key: str = None) -> str: """Search PubMed MeSH for Latin anatomical terminology.""" params = { 'db': 'mesh', 'term': term, 'retmode': 'json', 'retmax': 1, } url = f"{EUTILS}/esearch.fcgi?{urllib.parse.urlencode(params)}" if api_key: url += f"&api_key={api_key}" try: req = urllib.request.Request(url) req.add_header('User-Agent', 'SmallClaw/2.0') with urllib.request.urlopen(req, timeout=10) as resp: data = json.loads(resp.read().decode()) ids = data.get('esearchresult', {}).get('idlist', []) if not ids: return '' # Fetch MeSH term details fetch_url = f"{EUTILS}/efetch.fcgi?db=mesh&id={ids[0]}&retmode=xml" if api_key: fetch_url += f"&api_key={api_key}" req2 = urllib.request.Request(fetch_url) req2.add_header('User-Agent', 'SmallClaw/2.0') with urllib.request.urlopen(req2, timeout=10) as resp2: xml = resp2.read().decode() # Look for Entry terms that might be Latin latin_match = re.search(r'([^<]*?(?:is|um|us|a|ae|ia|or|ix|as|es))', xml, re.I) if latin_match: return latin_match.group(1).strip() except Exception as e: pass return '' def get_api_key(): try: with open('/srv/homeclaw/.smallclaw/config.json') as f: cfg = json.load(f) return cfg.get('pubmed', {}).get('api_key') or cfg.get('search', {}).get('pubmed_api_key') except: return None def fuzzy_match(english: str, dictionary: dict) -> str: """Try various fuzzy matching strategies.""" e = english.lower().strip() # Direct match if e in dictionary: return dictionary[e] # Try without "dental" prefix/suffix e_stripped = e.replace('dental ', '').replace(' oral', '').replace('oral ', '') if e_stripped in dictionary: return dictionary[e_stripped] # Try singular/plural if e.endswith('s') and e[:-1] in dictionary: return dictionary[e[:-1]] if e + 's' in dictionary: return dictionary[e + 's'] # Try without hyphens e_no_hyphen = e.replace('-', ' ') if e_no_hyphen in dictionary: return dictionary[e_no_hyphen] # Try lowercase of first letter only e_title = english.strip() if e_title in dictionary: return dictionary[e_title] return '' def main(): apply = '--apply' in sys.argv category_filter = None do_pubmed = '--pubmed' in sys.argv for i, arg in enumerate(sys.argv): if arg.startswith('--category='): category_filter = arg.split('=', 1)[1] elif arg == '--category' and i + 1 < len(sys.argv): category_filter = sys.argv[i + 1] conn = sqlite3.connect(DB_PATH) conn.row_factory = sqlite3.Row query = 'SELECT id, korean, english, latin, category FROM terms WHERE (latin IS NULL OR latin = "")' if category_filter: query += f' AND category = "{category_filter}"' query += ' ORDER BY category, id' rows = conn.execute(query).fetchall() print(f"Missing Latin terms: {len(rows)} total") api_key = get_api_key() updated = 0 still_missing = [] for row in rows: english_lower = row['english'].lower().strip() # Try dictionary with fuzzy matching latin = fuzzy_match(row['english'], LATIN_DICT) if latin: action = "UPDATE" if apply else "WOULD UPDATE" print(f" [{action}] #{row['id']} {row['korean']} / {row['english']} → {latin}") if apply: conn.execute('UPDATE terms SET latin = ?, updated_at = datetime("now","localtime") WHERE id = ?', (latin, row['id'])) updated += 1 else: still_missing.append(row) # PubMed MeSH search for remaining terms if still_missing and do_pubmed and api_key: print(f"\n--- MeSH search for {len(still_missing)} remaining terms ---") pubmed_found = 0 for i, row in enumerate(still_missing): if i > 0 and i % 3 == 0: time.sleep(0.5) # Rate limit latin = search_mesh(row['english'], api_key) if latin: action = "UPDATE" if apply else "WOULD UPDATE" print(f" [{action}] #{row['id']} {row['korean']} / {row['english']} → {latin} (MeSH)") if apply: conn.execute('UPDATE terms SET latin = ?, updated_at = datetime("now","localtime") WHERE id = ?', (latin, row['id'])) updated += 1 pubmed_found += 1 else: still_missing[i] = None # Mark as not found still_missing = [r for r in still_missing if r is not None] print(f" MeSH found: {pubmed_found}") if apply: conn.commit() print(f"\n✓ Updated {updated} terms in database") else: print(f"\n--- DRY RUN: {updated} terms would be updated ---") # Print remaining remaining = [r for r in still_missing if r is not None] if do_pubmed else still_missing if remaining: print(f"\nStill missing Latin ({len(remaining)} terms):") by_cat = {} for r in remaining: by_cat.setdefault(r['category'], []).append(r) for cat in sorted(by_cat.keys()): print(f"\n [{cat}] ({len(by_cat[cat])} terms)") for r in by_cat[cat][:5]: print(f" {r['english']}") if len(by_cat[cat]) > 5: print(f" ... and {len(by_cat[cat])-5} more") conn.close() if __name__ == '__main__': main()