디지털·가전제품
엉망인 데이터를 처리해야합니다..
이름/2014
이름(2014)
이름 20140101
14년생 이름,이름
2014 이름,이름 (쌍둥이)
이름.14년생, 이름.15년생, 이름.14년생
…
이런식으로 복잡한 데이터를
[이름,출생연도] 로 간단하게 나타내고 싶은데
이런경우 어떻게 처리해야하나요?
1개의 답변이 있어요!
이런 엉망인 데이터를 정리하려면 정규표현식(Regex) 을 활용해 텍스트에서 이름과 출생연도를 추출하는 것이 가장 효과적입니다. 일반적인 접근 방식은 다음과 같습니다:
---
1. 목표
복잡한 문자열에서 [이름, 출생연도] 형태로 정보를 추출
예시 결과:
["이름", 2014]
["이름", 2014]
["이름", 2014]
["이름", 2014]
["이름", 2014]
["이름", 2015]
...
---
2. 처리 전략 요약
출생연도 추출:
2014, 14년생, 20140101 같은 형태에서 연도 추출
14년생 → 2014로 해석 (2000년대 기준)
이름 추출:
한글 이름만 추출
특수문자/괄호 제거
---
3. 예시 코드 (Python)
import re
def extract_data(text):
# 연도 찾기 (정규표현식)
years = re.findall(r'(20\d{2}|[0-2]?\d{1}년생)', text)
# 이름 찾기 (한글만, 점이나 괄호 등 제거)
names = re.findall(r'[가-힣]{2,}', text)
results = []
for i, name in enumerate(names):
# 연도 매칭: 인덱스에 맞게 또는 첫 번째 연도로 모두 매핑
if i < len(years):
year = years[i]
else:
year = years[0] if years else None
if year:
if '년생' in year:
y = int(re.sub(r'[^\d]', '', year))
year = 2000 + y if y < 50 else 1900 + y
else:
year = int(year[:4]) # e.g. 20140101 → 2014
results.append([name, year])
return results
---
4. 테스트 예시
texts = [
"이름/2014",
"이름(2014)",
"이름 20140101",
"14년생 이름,이름",
"2014 이름,이름 (쌍둥이)",
"이름.14년생, 이름.15년생, 이름.14년생"
]
for t in texts:
print(extract_data(t))
---
이 코드를 기반으로 데이터셋 전체에 적용하면 거의 대부분의 경우 [이름, 출생연도] 형태로 정리가 가능합니다.
데이터가 엑셀/CSV에 있다면 pandas를 이용해 병합할 수도 있습니다.
원하는 프로그래밍 언어나 파일 형식이 있다면 맞춰서 도와드릴게요.