본문 바로가기
카테고리 없음

제품 규격 문자열에서 치수와 재질 자동 추출. 혼합 표기를 한 번에 표준 컬럼으로

by 시트자동화 2025. 9. 22.

규격 추출 샘플 데이터 관련 이미지
규격 추출 샘플 데이터

현장의 고민 — 입고 명세나 발주 내역에는 치수와 재질이 자유 형식으로 기록됩니다. 300x200x50mm처럼 세 자리 치수 뒤에 단위를 붙이기도 하고 W100 H50 D20처럼 글자를 덧붙이기도 합니다. 원형 부품은 Ø12처럼 지름 기호를 쓰고 두께는 1.5t 또는 THK 1.5로 섞입니다. 재질 역시 SUS304 Stainless SS400 AL6061 ABS PVC처럼 단어가 제각각입니다. 이 상태로는 집계와 필터링이 반복적으로 실패하고, 사람이 눈으로 읽어 옮겨 적는 수작업이 생깁니다. 이 글은 이런 혼합 문자열에서 치수와 재질을 자동 추출해 표준 컬럼으로 정리하는 공식을 제시합니다. 엑셀과 시트에서 바로 붙여 쓸 수 있는 수식과 함께 검증용 CSV도 제공합니다.

설계 원칙. 먼저 규칙을 정하고 예외는 뒤로

  1. 치수 표준 단위는 mm로 통일합니다. cm m가 붙은 경우 mm로 환산합니다.
  2. 세 자리 치수는 순서대로 가로 세로 깊이로 해석합니다. 예 300x200x50mm는 W 300 H 200 D 50입니다.
  3. 라벨 표기는 W H D를 우선합니다. 같은 행에 라벨 표기와 세 자리 치수가 같이 있다면 라벨 표기를 더 신뢰합니다.
  4. 원형 치수는 Ø Φ ⌀ 또는 DIA 숫자로 잡습니다. OD ID가 있으면 각각 지름 바깥 안쪽으로 기록합니다.
  5. 두께 표기는 T 숫자 또는 숫자 T와 THK 숫자를 인식합니다.
  6. 재질은 키워드 사전을 만들어 첫 일치 항목을 채택합니다. SUS STS Stainless는 Stainless로, SS400 SPCC Steel은 Steel로 모읍니다.

파일 내려받기

샘플 데이터 설명

샘플에는 사무용 소모품과 판재 파이프류에서 흔히 등장하는 표기 패턴을 모았습니다. 300x200x50mm SUS304처럼 세 자리 치수 뒤에 재질이 오거나, W100 H50 D20 ABS처럼 라벨 표기, Ø12 x 1.5t AL6061-T6처럼 지름과 두께 혼합, 0.5cm x 60cm x 90cm처럼 cm 단위, 1m x 2m x 2mm처럼 m와 mm 혼용 등을 모두 포함했습니다. 결과 파일에는 mm 환산이 끝난 가로 세로 깊이 지름 두께와 재질 계열이 정리되어 있습니다.

C8_spec_parse_sample.csv 필드 사전

컬럼 의미 예시 비고
item_id 항목 식별자 ITM003 문자열
spec 규격 원문 W100 H50 D20 ABS 자유 형식 문자열

C8_spec_parse_result.csv 필드 사전

컬럼 의미 예시 계산 개념
width_mm 가로 mm 300 세 자리 치수 첫 값 또는 W 표시
height_mm 세로 mm 200 세 자리 치수 둘째 값 또는 H 표시
depth_mm 깊이 mm 50 세 자리 치수 셋째 값 또는 D 표시
diameter_mm 지름 mm 12 Ø Φ ⌀ DIA 또는 OD
thickness_mm 두께 mm 1.5 T 숫자 THK 숫자 숫자 T
material_raw 재질 키워드 SUS304 첫 일치 키워드
material_family 재질 계열 Stainless 사전 매핑 결과
spec_norm_debug 정규화 확인용 DIA 12 X 1.5T AL6061-T6 대문자 변환과 기호 통일

Google Sheets 수식. 강력한 정규식으로 바로 추출

A열이 spec이라 가정하고 행 2부터 시작합니다. 아래 수식을 각 열에 붙여 넣으시면 됩니다. mm 환산이 필요한 튜플 치수는 맨 끝 단위를 감지해 곱해 줍니다.

-- 가로 mm (W 라벨 또는 맨 앞 튜플)
=IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"\\bW\\s*(\\d+(?:\\.\\d+)?)")),
 IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"^(\\d+(?:\\.\\d+)?)\\s*[X×x]")),
 IFERROR(10*VALUE(REGEXEXTRACT(UPPER($A2),"^(\\d+(?:\\.\\d+)?)\\s*[X×x].*\\bCM\\b")),
 IFERROR(1000*VALUE(REGEXEXTRACT(UPPER($A2),"^(\\d+(?:\\.\\d+)?)\\s*M\\s*[X×x]")),""))))

-- 세로 mm (두 번째 튜플)
=IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"\\bH\\s*(\\d+(?:\\.\\d+)?)")),
 IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"^\\d+(?:\\.\\d+)?\\s*[X×x]\\s*(\\d+(?:\\.\\d+)?)")),
 IFERROR(10*VALUE(REGEXEXTRACT(UPPER($A2),"^\\d+(?:\\.\\d+)?\\s*[X×x]\\s*(\\d+(?:\\.\\d+)?).*\\bCM\\b")),
 IFERROR(1000*VALUE(REGEXEXTRACT(UPPER($A2),"^\\d+(?:\\.\\d+)?\\s*M\\s*[X×x]\\s*(\\d+(?:\\.\\d+)?)\\s*M")),""))))

-- 깊이 mm (세 번째 튜플 또는 D 라벨)
=IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"\\bD\\s*(\\d+(?:\\.\\d+)?)")),
 IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"^\\d+(?:\\.\\d+)?\\s*[X×x]\\s*\\d+(?:\\.\\d+)?\\s*[X×x]\\s*(\\d+(?:\\.\\d+)?)")),""))

-- 지름 mm (Ø Φ ⌀ 또는 DIA 우선, 다음 OD)
=IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"(?:Ø|Φ|⌀|DIA)\\s*(\\d+(?:\\.\\d+)?)")),
 IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"\\bOD\\s*(\\d+(?:\\.\\d+)?)")),""))

-- 두께 mm (T 또는 THK)
=IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"\\bT\\s*(\\d+(?:\\.\\d+)?)")),
 IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"\\bTHK\\s*(\\d+(?:\\.\\d+)?)")),
 IFERROR(VALUE(REGEXEXTRACT(UPPER($A2),"(\\d+(?:\\.\\d+)?)\\s*T\\b")),"")))

-- 재질 계열
=IF(REGEXMATCH(UPPER($A2),"SUS|STS|STAINLESS"),"Stainless",
 IF(REGEXMATCH(UPPER($A2),"SS400|SPCC|STEEL"),"Steel",
 IF(REGEXMATCH(UPPER($A2),"AL|ALUMINUM|6061|6063"),"Aluminum",
 IF(REGEXMATCH(UPPER($A2),"ABS|PP|PET|PVC|PE|POM"),"Polymer",
 IF(REGEXMATCH(UPPER($A2),"NBR|RUBBER"),"Rubber",
 IF(REGEXMATCH(UPPER($A2),"MDF|WOOD"),"Wood",
 IF(REGEXMATCH(UPPER($A2),"GLASS"),"Glass",
 IF(REGEXMATCH(UPPER($A2),"BRASS|C3604"),"Brass",
 IF(REGEXMATCH(UPPER($A2),"COPPER|\\bCU\\b"),"Copper","Unknown")))))))))

Excel 수식. 라벨과 튜플을 분기해 처리

Excel에는 정규식 전용 함수가 없으므로 라벨 표기와 튜플 표기를 나누어 처리합니다. 아래 예시는 spec 열이 표의 [@spec]일 때의 구조입니다. 단위가 마지막에만 오는 형태를 가정했습니다.

-- 튜플 전처리와 가로 mm
=LET(
 s, [@spec],
 u, IF(ISNUMBER(SEARCH(" CM", UPPER(s))),10, IF(ISNUMBER(SEARCH(" M ", UPPER(s))),1000,1)),
 t, UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(s,"×","x")," ",""),"MM","")),
 a, TEXTSPLIT(TEXTBEFORE(t,"CM"),"x"),
 IFERROR(--INDEX(a,1)*u, IFERROR(--TEXTAFTER(UPPER(SUBSTITUTE([@spec]," ","")), "W"), ""))
)

-- 세로 mm
=LET(s,[@spec],u,IF(ISNUMBER(SEARCH(" CM",UPPER(s))),10,IF(ISNUMBER(SEARCH(" M ",UPPER(s))),1000,1)),
 t,UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(s,"×","x")," ",""),"MM","")),
 a,TEXTSPLIT(TEXTBEFORE(t,"CM"),"x"),
 IFERROR(--INDEX(a,2)*u, IFERROR(--TEXTAFTER(UPPER(SUBSTITUTE([@spec]," ","")), "H"), ""))
)

-- 깊이 mm
=LET(s,[@spec],u,IF(ISNUMBER(SEARCH(" CM",UPPER(s))),10,IF(ISNUMBER(SEARCH(" M ",UPPER(s))),1000,1)),
 t,UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(s,"×","x")," ",""),"MM","")),
 a,TEXTSPLIT(TEXTBEFORE(t,"CM"),"x"),
 IFERROR(--INDEX(a,3)*u, IFERROR(--TEXTAFTER(UPPER(SUBSTITUTE([@spec]," ","")), "D"), ""))
)

-- 지름과 두께는 키워드로 단순 추출
=IFERROR(--TEXTAFTER(UPPER(SUBSTITUTE([@spec]," ","")), "DIA"), "")
=IFERROR(--TEXTAFTER(UPPER(SUBSTITUTE([@spec]," ","")), "T"), "")

-- 재질 계열 매핑
=IF(OR(ISNUMBER(SEARCH("SUS",UPPER([@spec]))),ISNUMBER(SEARCH("STS",UPPER([@spec]))),ISNUMBER(SEARCH("STAINLESS",UPPER([@spec])))),"Stainless",
 IF(OR(ISNUMBER(SEARCH("SS400",UPPER([@spec]))),ISNUMBER(SEARCH("SPCC",UPPER([@spec]))),ISNUMBER(SEARCH("STEEL",UPPER([@spec])))),"Steel",
 IF(OR(ISNUMBER(SEARCH("AL",UPPER([@spec]))),ISNUMBER(SEARCH("ALUMINUM",UPPER([@spec]))),ISNUMBER(SEARCH("6061",UPPER([@spec])))),"Aluminum",
 IF(OR(ISNUMBER(SEARCH("ABS",UPPER([@spec]))),ISNUMBER(SEARCH("PP",UPPER([@spec]))),ISNUMBER(SEARCH("PET",UPPER([@spec]))),ISNUMBER(SEARCH("PVC",UPPER([@spec]))),ISNUMBER(SEARCH("PE",UPPER([@spec]))),ISNUMBER(SEARCH("POM",UPPER([@spec])))),"Polymer",
 IF(ISNUMBER(SEARCH("NBR",UPPER([@spec]))),"Rubber",
 IF(OR(ISNUMBER(SEARCH("MDF",UPPER([@spec]))),ISNUMBER(SEARCH("WOOD",UPPER([@spec])))),"Wood",
 IF(ISNUMBER(SEARCH("GLASS",UPPER([@spec]))),"Glass",
 IF(OR(ISNUMBER(SEARCH("BRASS",UPPER([@spec]))),ISNUMBER(SEARCH("C3604",UPPER([@spec])))),"Brass",
 IF(OR(ISNUMBER(SEARCH("COPPER",UPPER([@spec]))),ISNUMBER(SEARCH(" CU ",UPPER([@spec])))),"Copper","Unknown")))))))))

설명. Excel 수식은 라벨 표기가 있을 때 TEXTAFTER로 숫자만 빠르게 취하고, 라벨이 없으면 세 자리 튜플을 TEXTSPLIT으로 나눠 처리합니다. cm m가 문장 끝에 붙어 있는 흔한 케이스를 감지해 환산합니다. OD ID 같은 세부 지름 표기는 별도 열로 추가해도 좋습니다.

검증 포인트

  • 0.5cm x 60cm x 90cm는 5 x 600 x 900mm로 환산되는지 확인합니다.
  • 1m x 2m x 2mm는 1000 x 2000 x 2mm가 되어야 합니다.
  • Panel 600x900x1.2t는 두께가 1.2, 가로 세로는 600 900으로 나오는지 보십시오.
  • Pipe OD25.4 ID22.0은 지름 mm가 25.4 ID 별도 열에서 22.0으로 구분되는지 확인합니다.
  • 재질은 가장 먼저 일치한 항목으로 분류됩니다. SUS304 STS304 Stainless는 모두 Stainless로 묶입니다.

활용 팁

  • 추가 단위 대응 — inch 대응이 필요하면 숫자 뒤의 in 쿼트를 감지해 25.4를 곱하는 분기를 더하면 됩니다.
  • 정규화 레이어 — 입력을 먼저 대문자와 표준 기호로 통일하는 TEXTNORMAL 같은 사용자 정의 함수를 별도 계층으로 두면 유지 보수가 쉬워집니다.
  • 품목 사전 강화 — 재질 키워드는 조직에서 쓰는 표기를 수시로 보강하세요. 재질 계열은 리포트 기준에 맞게 더 세분화할 수 있습니다.

요약

치수와 재질은 표기 방식이 제각각이어도 규칙은 반복됩니다. 라벨과 튜플을 분리해 처리하고 단위를 mm로 통일하면 어느 시트에서도 일관된 필터와 집계가 가능합니다. 제공한 CSV와 수식을 이용하여 테스트하시고, 필요한 부분만 로컬 규칙에 맞춰 수정해 보세요.