이름 분할은 비교, 검색, 유효성 검사 및 출력 등 정보 시스템에서 필수적인 기능이나, 문화권에 따라 매우 복잡하게 달라질 수 있습니다. 예를 들어, 러시아 이름은 일본이나 헝가리 문화권의 시스템에서 잘못 분할될 수 있으며, ‘O’Sullivan’과 같은 입자(particle)를 포함하는 복합 성씨는 검색 시 다양한 정규화 형태를 고려해야 합니다. 이러한 문제를 해결하기 위해 데이터 기반 접근 방식이 제안됩니다.
데이터 수집 및 정규화
아일랜드 성씨 목록이 있는 웹 페이지를 스크래핑하여 데이터를 수집합니다. 수집된 데이터는 ‘O’ 입자의 다양한 표기(예: O’, Oʼ, O”, O )를 ‘O’‘로 통일하고 대문자화하는 등 일관된 형식으로 정규화됩니다. 게일어 버전은 제외하고 ASCII 문자만 사용합니다.
SQLite 데이터베이스 구축
정규화된 성씨 데이터를 sqlite3 gem을 사용하여 irish_surnames.sqlite 파일에 저장합니다. CREATE TABLE과 CREATE UNIQUE INDEX를 통해 테이블을 생성하고, 트랜잭션 내에서 데이터를 삽입하여 데이터셋을 만듭니다. 이 과정에서 ActiveRecord와 같은 ORM 대신 순수 SQLite를 사용하여 라이브러리 크기를 줄이고 Rails 업데이트 시 발생할 수 있는 종속성 문제를 방지합니다.
데이터셋 활용
구축된 SQLite 데이터베이스는 Ruby 모듈(IrishSurnames) 내에서 읽기 전용 모드로 사용됩니다. known_irish_surname? 메서드는 주어진 성씨가 데이터셋에 존재하는지 확인하며, normalize_spelling 메서드는 검색 전 성씨를 정규화합니다. 이를 통해 ‘OGRADY’, ‘O’SULLIVAN’ 등 다양한 표기의 아일랜드 성씨를 정확하게 식별할 수 있습니다.
추가 활용 및 재현성
-
데이터셋을 스캔하여 입자 뒤에 올 가능성이 있는 문자를 추출하고 이를 기반으로 정규 표현식을 생성하는
likely_irish_name?와 같은 사전 필터링 메커니즘을 구현할 수도 있습니다. -
데이터셋의 재현성을 위해 스크래핑된 원본 리소스의 사본을 소스 트리에 보관하고, 데이터셋 재구축 스크립트를 테스트 과정에 포함하는 것이 권장됩니다.