이름을 잘못 입력하기 어려운 방법은 무엇입니까?


16

다음은 일부 데이터 마이닝과 정교한 알고리즘으로 해결할 수 있다고 생각되는 질문이지만 방법을 잘 모르겠습니다. 사용할 데이터 소스 및 적용 할 알고리즘에 대한 모든 의견을 환영합니다.

배경 : 저는 루마니아-헝가리 인으로 폴란드-우크라이나어를 가진 아기를 기대하고 있으며 우리가 정착하고자하는 국가에 대해 마음을 놓지 않았습니다. 예상 할 수 있듯이, 주어진 이름을 선택하는 것이 가장 중요 하고 뜨거운 논쟁입니다. 내 편에서, 나는 한 나라에서 다른 나라로 이사 할 때 누군가 내 이름을 잘못 입력했을 때 겪어야하는 모든 번거 로움에 여전히 충격을받습니다. 예를 들어, 당신이 "아드리안 (Adrian)"이라고 불리었다면 루마니아에서 축복을 받았을 것입니다. 결국 "아드리 엔 (Adri e n)"이라는 공식적인 프랑스 문서가 발견되었습니다. 따라서 유럽의 일부 국가에서는 아기의 이름이 잘못 입력되지 않도록하기위한 유일한 요구 사항입니다.

문제 설명 : 프랑스, 독일, 스웨덴, 폴란드 및 루마니아와 같은 국가 세트가 주어지면, 제대로 발음되었을 때 현지인이 철자가 틀린 이름의 목록을 찾으십시오.

보다 공식적으로 : p (c, n) 은 국가 c 에서 이름 n의 철자가 틀릴 확률을 반환하는 함수라고 하자 . 고려할 때 C에게 국가의 세트를하고 p₀ 확률을 찾을 N에게 그러한 주어진 이름의 집합을,

모든 nNcC 에 대해 p (c, n) <p₀

초기 생각 : 핵심 문제는 p (c, n) 을 구현하는 방법 입니다. 휴리스틱으로 근사하려고 할 수 있습니다. 분명히 두 가지 경우에 이름의 철자가 틀릴 수 있습니다.

  1. 그것은 그 나라에서 거의 사용되지 않습니다.
  2. 그것은 그 나라에서 거의 사용되지 않는 다른 이름과 비슷합니다.

이 두 가지 질문에 효율적으로 답하기 위해 Wikipedia와 같은 인터넷을 어떻게 사용할 수 있는지 잘 모르겠습니다. 한 국가에서 어떻게 자주 사용되는 이름 만 나열합니까? 철자가 비슷한 것을 어떻게 찾습니까?


1
다른 이름과의 편집 거리가 낮을 때 인기가 철자 가능성에 큰 영향을 줄 것이라고 확신하지 않습니다. 예 한나 / 동일 유사한 소리 한나애나루카스 비슷 루카루카스 . 각 국가의 이름 목록에 손을 대면 낮은 편집 거리로 클러스터링을 시작할 수 있습니다.
amon

나는 그것이 인기와도 관련이 있다고 생각합니다. 이중 n 은 그 언어에서 이상하기 때문에 아무도 Anna의 Anna 를 철자하지 않습니다 . 마찬가지로 프랑스 사람은 h 없이 발음하더라도 기독교인 이라고 할 것 입니다. (Pun 의도. : D)
user1202136

5
실용적인 접근 방식은 GUID를 사용하는 것입니다.
toniedzwiedz

1
훌륭한 XKCD 참조. 그러나 리틀 바비 테이블을 잊지 마세요 ;-) xkcd.com/327
Mawg는 분석 재개 모니카 말한다

나는 그 언어로 모음 소리를 비교하는 것을 고려할 것입니다. 내 독일어를 유창하게 구사하지만, 난 여전히 Ö의 혼란을
Mawg는 분석 재개 모니카 말한다

답변:


15

다른 언어보다 일부 언어에서 더 잘 작동하는 몇 가지 방법이 있습니다. 예를 들어, soundex (및 내가 좋아하는 다른 설명 )는 영어 발음 이름 용으로 설계되었습니다. soundex와 함께 MichaelM240이됩니다. 여기에는 몇 가지 단계가 있습니다.

  1. 첫 글자가 격리됩니다. ( Michael)
  2. 모든 모음은 나머지 ( Mchl) 에서 제거됩니다.
  3. 자음 교체
    • c -> 2
    • l -> 4
  4. 왼쪽 패드는 0입니다.

- 자음 전환의 그룹화는 자신의 음성 유사성을 기반으로 B, F, PV모든지도 1.

그리고 시간이 지남에 따라 이것에 변형이 있습니다 . 이름의 철자가 시간이 지남에 따라 변경 될 수 있지만 계보는 유사하게 남아있는 계보에서 특히 유용합니다.


항공사가 미국 계보 대신 이름을 위해 개발 한 일치 등급 과 같은 접근 방식도 있습니다 .

일치 등급 접근 방식 (MRA)의 인코딩은 다음과 같습니다.

  1. 모든 비를 선도하는 모음을 삭제하는 것은 ( Michael이된다 MchlAnthony됩니다 Anthny)
  2. 복식의 두 번째 상수 제거
  3. 문자열이 6자를 초과하면 처음 3 개와 마지막 3 개를 가져 와서 나머지 문자열을 6 자로 줄이십시오.

이에 대한 전체 사양은 archive.org 에서 찾을 수 있습니다. "소형이 아님"(인쇄 된 양식은 214 페이지)입니다.

비교는 텍스트가있는 시간에 따른 일치하는 임계 값을 가지고있다.

거기 다른 소리 알고리즘도 .


따라서 내가 추천하는 것은 soundex를 그대로 사용하거나, 일치 등급 접근 방식을 취하거나, 루마니아어 자음폴란드어 자음을 기반으로 soundex를 수정하는 것 입니다.

사운 덱스로, 자음이되는 것을 기억 그룹화 (에서 폴란드어, m, n, ɲ무언 그들이 일 또는 함께 목소리 - - 부여, 내가하지 않는 모든 코 자음 그룹화 할 수 있습니다, 당신은 아마 그룹, 입술 치과 및 치조 파열음이 것 폴란드어를 알기 때문에 내가 사실이 아닌 것을 말하고 있는지 모르겠습니다.)

그런 다음 데이터베이스의 모든 이름을 두 개의 서로 다른 soundex 시스템에 적용하고 다른 언어로 가장 충돌이 적은 이름을 찾으십시오. 이것은 당신에게 독특한 이름을 제공합니다. 따라서로 Smith표시되지 않습니다 Smyth.


그러나 이것은 "이름이 다른 이름과 충돌하여 뭉개 질 가능성"만 해결합니다. 그것은 "이름이 올바르게 들리고 잘못 기록되었습니다"라는 다른 방법을 다루지 않으므로 일반적인 이름에주의를 기울여야합니다.

예를 들어, Michael미국에서 아주 흔한 이름은 그것이 1950 년대 초 후반에 1970 년까지였다 정말 인기 . 그러나 어떤 이유로 든이 이름 Micheal은 1950 년대에 인기가있었습니다 (정점에서 83 번째로 가장 일반적인 이름을 얻었습니다). 그리고 나는 지명 된 사람들이 Micheal끊임없이 철자가 틀렸다는 것을 확신합니다 .

따라서 주어진 발음에 대한 이름의 인기를 지배하는 이름이 하나있는 이름에 중점을 두어야합니다. 연도 별 이름에 대한 다른 데이터 소비자에 반짝이기는하지만, 당신이 볼 수있는 소년에 대한 엉망 ... 이름 잼로 시작 으로 Jamaal, Jamal, Jamar등이있다. 덧붙여, 이러한 이름에 대해 약간 다른 soundexes이 미국 ( J540, J540J560-을 l하고 r그들이 밀접하게 음성학에 관련된 경우에도 다른 그룹에있다). 그러나, 일본 말, 누군가를 들어,이 음성 지역에 하나의 소리가 어디에 lr미국 영어로 발음됩니다. 이것은 또한 알고 있어야 할 soundex를 사용하여 주요 자음에 도전을 제기 할 수 있습니다 (저는 한때 일본인 이름의 로마자로 Lisa 대신 Risa라고 불리는 일본 여성과 일했습니다).

저의 예는 미국을위한 것입니다. 해당 데이터에 쉽게 액세스 할 수 있습니다. 분명히 폴란드헝가리어 에는 몇 가지 가 있으며 헝가리어 이름 공통점에 대한 힌트 만 있습니다 ... 영어 이외의 언어로 검색하면 도움이 될 것으로 생각됩니다.

따라서 이름에 대한 soundex가 주어지면 충돌이 거의 없으며 실제 철자는 충돌 집합에 있습니다. 바람직하게는 이것은 일반적인 이름입니다. 이 헝가리어 목록을 보면 Krisztián철자가 틀릴 수 있지만 Zoltán헝가리에서는 2011 년에 22 번 가장 일반적인 아기 이름입니다! 즉, 당신은 잘못 갈 수 없습니다 Michael.


2
멋진 답변! 나는 그것을 구현하려고 노력할 것이고 일단 완료되면 나는 코드를 공유하고 당신의 대답을 받아들입니다.
user1202136

2
이 아이디어를 구현하려는 시도. "사용자 테스트"를 통과하지 못했습니다. :) github.com/cristiklein/idemscriptent-given-names
user1202136

훌륭한 답변 마이클! @ user1202136 대단한 작업! 나는 결과를보고
싶다

1
@ChrisCirefice : Michael의 대답은 간단하지만 "사용자 테스트"를 통과하는 이름을 생성하지는 않습니다. 상위 100 개의 이름 목록에서 철자가 동일한 이름을 찾으려고하는 훨씬 간단한 알고리즘을 사용했습니다. 결과를 여기에서 찾으십시오 : github.com/cristiklein/idemscriptent-given-names
user1202136

1

단어가 다른 언어로 발음되는 방식을 처리하도록 설계된 Double Metaphone 발음 알고리즘을 살펴보고 싶을 것입니다. Metaphone 3도 있지만 비용이 많이 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.