import os, sys, re sys.stdout.reconfigure(encoding='utf-8') target_files = [ # 02_토목부문 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제1장_도로포장공사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제2장_하천공사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제3장_터널공사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제4장_궤도공사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제5장_강구조공사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제6장_관부설및접합공사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제7장_항만공사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제8장_지반조사.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/02_토목부문/제9장_측량.md', # 05_유지관리부문 'resources/knowledge/original/원가계산/건설공사_표준품셈/05_유지관리부문/제1장_공통.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/05_유지관리부문/제2장_토목.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/05_유지관리부문/제3장_건축.md', 'resources/knowledge/original/원가계산/건설공사_표준품셈/05_유지관리부문/제4장_기계설비.md', # 04_기계설비부문 제13장 'resources/knowledge/original/원가계산/건설공사_표준품셈/04_기계설비부문/제13장_플랜트설비공사.md', ] # Suspect sentence continuation words in Col 0 CONTINUATION_PATTERNS = [ r'^구\s*간$', r'^설\s*치$', r'^후\s*설치$', r'^조립\s*설치$', r'^취급함', r'^정돈함', r'^[가-힣\w\s]+(하고|하며|하여|혹은|및|등|까지|위해|위하여|취부함|포함|제외|운반|조양함)\b', r'^→', r'^[A-Za-z0-9#]+\s*$', r'^분기기$', r'^교\s*환$', r'^매\s*립\s*식$', r'^\( 직 결 형 \)$' ] print("=== Scanning All Target Files for Broken Groupings / Split Col 0 Sentences ===") results = [] for fpath in target_files: fname = os.path.basename(fpath) with open(fpath, 'r', encoding='utf-8') as f: lines = f.readlines() for idx, line in enumerate(lines): if not line.startswith('|'): continue cells = [c.strip() for c in line.split('|')[1:-1]] if not cells or all(re.match(r'^:?-+:?$', c) for c in cells if c): continue c0 = cells[0] # check if c0 matches any continuation patterns for pat in CONTINUATION_PATTERNS: if re.search(pat, c0): # Also check surrounding lines to confirm it's part of a split prev_line = lines[idx-1].strip() if idx > 0 else "" next_line = lines[idx+1].strip() if idx + 1 < len(lines) else "" results.append({ 'file': fname, 'line': idx + 1, 'c0': c0, 'full_line': line.strip()[:100], 'matched_pat': pat }) break print(f"Total Suspect Split Col 0 Cells Found: {len(results)}") by_file = {} for r in results: by_file.setdefault(r['file'], []).append(r) for f, items in sorted(by_file.items()): print(f"\n[{f}] ({len(items)}건)") for it in items: print(f" L{it['line']:<5} | Col0: '{it['c0']}' | {it['full_line']}")