본문으로 건너뛰기

사람 이름

randino는 실제로 쓰이는 이름을 생성합니다. Emma Clover, Jack Reeves 같은 이름을 9개 언어로, 각 언어의 문자와 영어 발음까지 함께 만듭니다. 폼과 시드 데이터, 목업, 픽스처 같은 샘플 데이터에 쓰는 기능입니다.

javascript
import { randName } from 'randino';

randName({ language: 'en', count: 3 });
// ['Christina Mills', 'Jack Reeves', 'Brian Wallace']
dart
import 'package:randino/randino.dart';

randName(language: NameLanguage.en, count: 3);
// ['Christina Mills', 'Jack Reeves', 'Brian Wallace']
python
from randino import rand_name

rand_name(language="en", count=3)
# ['Christina Mills', 'Jack Reeves', 'Brian Wallace']

제공되는 기능

함수반환값
randName이름 문자열, 또는 이름마다 상세 정보
nameLengthRange해당 언어에서 전체 이름의 자연스러운 길이 범위
nameSupportsMiddleName해당 언어에 중간 이름이 있는지 여부
nameSupportsRoman로마자 표기가 결과를 바꾸는지 여부

옵션의 동작 방식

randName의 옵션은 대부분 모든 생성 함수가 공통으로 받는 것입니다. 아래는 그중 쓰기 전에 동작을 알아 두면 좋은 옵션입니다.

realism — 실제 이름과 만들어낸 이름

기본값인 'real'은 모든 요소를 실제로 쓰이는 이름 풀에서 뽑고 그 밖으로 나가지 않습니다. 길이 범위가 여러 길이를 허용할 때도 길이를 먼저 정한 뒤 없는 길이를 지어내지 않고, 풀이 실제로 담고 있는 길이 중에서 고릅니다.

'invented'는 이름을 만들어냅니다. 라틴 문자와 키릴 문자는 음절 템플릿으로, 한국어와 일본어와 중국어는 이름에 쓰이는 글자를 조합해서 만듭니다. 'mixed'는 이름마다, 그리고 요소마다 따로 정하므로 한 번의 호출 안에서, 때로는 한 이름 안에서 실제 요소와 만들어낸 요소가 섞입니다.

javascript
randName({ language: 'en', realism: 'invented', count: 3 });
// ['Deder Kuvoun', 'Jaihil Brouvinn', 'Thoowoun Wiatou']
dart
randName(language: NameLanguage.en, realism: RandRealism.invented, count: 3);
// ['Deder Kuvoun', 'Jaihil Brouvinn', 'Thoowoun Wiatou']
python
rand_name(language="en", realism="invented", count=3)
# ['Deder Kuvoun', 'Jaihil Brouvinn', 'Thoowoun Wiatou']

분포가 가파른 언어에서는 성씨에 가중치를 둡니다

한국어와 중국어와 베트남어의 성씨는 실제 사용 빈도에 비례해서 뽑습니다. 소수의 성씨가 인구 대부분을 차지하기 때문입니다. 한국어 이름은 약 5분의 1이 김씨로, 베트남어 이름은 5분의 2가 Nguyễn으로 나옵니다. 실제 명단과 같은 분포입니다. 풀에서 균등하게 뽑으면 김씨가 75명 중 1명이 되는데, 그러면 출력이 한국어처럼 읽히지 않습니다.

나머지 여섯 언어는 성씨 분포의 꼬리가 길어서 균등하게 뽑아도 실제와 자릿수가 맞습니다. 그래서 빈도표를 두지 않았습니다.

길이는 고유 표기를 기준으로 셉니다

minLengthminLengthmin_lengthmaxLengthmaxLengthmax_length요소 사이의 공백을 포함한 고유 표기의 글자 수를 셉니다. 요청한 구조가 항상 우선합니다. 요청한 요소를 담기에 범위가 너무 좁으면, 요청한 성이나 중간 이름을 빼는 대신 생성기가 만들 수 있는 가장 가까운 이름을 돌려줍니다.

공백으로 구분되는 언어에서는 풀에서 다시 뽑아 범위를 맞추고, 그래도 들어오지 않으면 범위에 닿을 수 있는 길이에서만 각 요소를 뽑습니다. 그래서 풀이 담을 수 있는 최댓값은 지켜지고, 아예 닿을 수 없는 범위는 최댓값을 넘기는 대신 최솟값에 못 미치는 이름으로 답합니다. 한국어와 일본어와 중국어는 이름을 음절 단위로 조합하므로 범위를 정확히 맞춥니다.

둘 다 생략하면 각 언어의 고유한 범위를 사용하며, 그 값은 nameLengthRangenameLengthRangename_length_range가 알려 줍니다. 이 기본값은 언어별로 결정되므로, 여러 언어를 섞어도 한국어 이름이 스페인어 이름의 길이에 맞춰 늘어나지 않습니다.

startsWith는 이름 전체의 첫 글자에 적용됩니다

성이 먼저 오는 언어에서는 성에, 그 외에는 이름에 적용됩니다. 성을 끄면 언제나 이름에 적용됩니다. 실제 이름 중에 그 글자로 시작하는 것이 없어도 빈 결과가 아니라 이름을 돌려줍니다. 라틴 문자와 키릴 문자는 이름을 만들어내고(QQivu Railooth), 한중일 문자는 그 글자 자체를 이름의 한 요소로 씁니다( + 지수앙지수).

전달한 문자열 중 첫 글자만 사용하며, 대소문자는 구분하지 않습니다.

unique는 기본적으로 꺼져 있습니다

요청한 개수를 그대로 받기 위해서입니다. 중복을 없애려면 켜면 됩니다. 다만 풀은 유한하므로, 큰 개수를 요청하면 무한히 반복하는 대신 요청보다 적은 개수를 돌려줍니다.

성별

gender는 이름을 어느 풀에서 뽑을지 정합니다. 대부분의 언어에서는 그게 전부여서 결과만으로는 어느 쪽인지 알 수 없습니다. 한국어 이름은 어느 풀에서 왔는지 드러내지 않기 때문입니다. 러시아어는 예외입니다. 부칭과 성이 모두 굴절해서 ИвановИванова가 되고 НиколаевичНиколаевна가 됩니다.

생략하면 이름마다 성별을 하나씩 고릅니다. 어느 쪽이 쓰였는지는 상세 출력이 알려 줍니다.

Released under the MIT License