아하
  • 토픽

  • 스파링

  • 잉크

  • 미션


디지털·가전제품

역대급협력적인남생이

역대급협력적인남생이

엉망인 데이터를 처리해야합니다..

이름/2014

이름(2014)

이름 20140101

14년생 이름,이름

2014 이름,이름 (쌍둥이)

이름.14년생, 이름.15년생, 이름.14년생

이런식으로 복잡한 데이터를

[이름,출생연도] 로 간단하게 나타내고 싶은데

이런경우 어떻게 처리해야하나요?

1개의 답변이 있어요!

  • 마카롱A

    마카롱A

    이런 엉망인 데이터를 정리하려면 정규표현식(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를 이용해 병합할 수도 있습니다.

    원하는 프로그래밍 언어나 파일 형식이 있다면 맞춰서 도와드릴게요.