名前のスペルを間違えにくいものを見つけるには?


16

ここに、データマイニングと洗練されたアルゴリズムを使用して解決できると思われる質問がありますが、その方法はよくわかりません。どのデータソースを使用し、どのアルゴリズムを適用するかについてのポインタは大歓迎です。

背景:私はポーランドウクライナ人の赤ちゃんを期待しているルーマニアハンガリー人であり、どの国に落ち着きたいのかについて、まだ心を決めていません。ご想像のとおり、特定の名前を選択することは非常に重要であり、熱い議論です。私の側から見ると、ある国から別の国に移動したときに誰かが私の名前のスペルを間違えたときに経験しなければならないすべての面倒にまだ心を痛めています。たとえば、場合にのみ、あなたが「Adriさんのことになったことを見つけるために、あなたはルーマニアに祝福されるだろう「エイドリアン」と呼ばれたE n」は、いくつかの公式のフランスの文書です。ですから、私の唯一の要件は、ヨーロッパの一部の国で赤ちゃんの名前のつづりを間違えないようにすることです。

問題の声明:フランス、ドイツ、スウェーデン、ポーランド、ルーマニアなどの国のセットを考えると、適切に発音された場合、地元の人々がつづりを間違えにくい名のリストを見つけてください。

より正式には、p(c、n)を、国cで名前nのスペルが間違っている確率を返す関数とします。与えられたCに国のセットをして p₀確率を、見つけるNように与えられた名前のセット

すべてのためのnNおよびCCP(C、N)<p₀

最初の考え:中心的な問題はp(c、n)を実装する方法です。ヒューリスティックで近似することを試みることができます。明らかに、次の2つの場合に名前のつづりが間違っている可能性があります。

  1. その国ではほとんど使われていません。
  2. 別の国の名前に似ていますが、その国ではあまり使われていません。

これら2つの質問に効率的に回答するために、ウィキペディアなどのインターネットをどのように使用できるかわかりません。1つの国で、かなり頻繁に使用される名前のみをどのようにリストしますか?同様に綴られたものをどのように探しますか?


1
他の名前との編集距離が短い場合と比較すると、人気がスペルミスの確率に大きく影響するかどうかはわかりません。例えば、ハンナハンナアンナに似ている/同じように聞こえ、ルーカスルカルーカスに似ています。各国の名前のリストを取得したら、低い編集距離でクラスタリングを開始できます。
アモン

それは人気にも関係していると思います。ダブルnはその言語では奇妙なだけなので、誰もルーマニア語でアンナをつづりません。同様に、フランス人はhを付けずに発音しても、クリスチャンと書く可能性があります。(しゃれが意図さ:D。)
user1202136

5
実用的なアプローチは、GUIDを使用することです。
トニエズウィエズ

1
素晴らしいXKCDリファレンス。しかし、リトルボビーテーブルを忘れないでください;-) xkcd.com/327
Mawgはモニカ

これらの言語の母音を比較することを検討します。私のドイツ語は堪能ですが、私はまだÖの混乱を作る
Mawgはモニカ回復言う

回答:


15

一部の言語では他の言語よりもうまく機能するアプローチがいくつかあります。たとえば、soundex(および別の説明)は、名前の英語の発音用に設計されています。soundexでは、MichaelM240 になります。これにはいくつかの手順があります。

  1. 最初の文字が分離されます。(Mおよびichael
  2. すべての母音が残りから削除されます(Mおよびchl
  3. 子音が置き換えられます
    • c -> 2
    • l -> 4
  4. 左パッドのゼロ。

-子音の変換のグループ化は、その表音の類似性に基づいてBFPVするすべてのマップ1

そして、これには時間の経過とともに変化があります。名前の綴りが時間の経過とともに変化する可能性があるが、発音は同じままである系図で特に役立ちます。


また、航空会社が名前(アメリカの系譜ではなく)のために開発した一致格付けなどのアプローチもあります。

一致評価アプローチ(MRA)のエンコードは次のとおりです。

  1. すべての非主要な母音を削除することは(MichaelなりMchlAnthonyなりましたAnthny
  2. doubleの2番目の定数を削除します
  3. 文字列が6文字より長い場合は、最初の3文字と最後の3文字を使用して、残りの文字列を6文字に減らします。

これに関する完全な仕様はarchive.orgで見つけることができます-「小さくない」ことに注意してください(印刷されたフォームは214ページです)。

比較は、テキストがどのくらいに基づいてマッチングしきい値を持っています。

あり、他の表音アルゴリズムがあまりにも


そのため、私があなたに勧めるのは、soundexをそのまま使用するか、一致評価アプローチをそのまま使用するか、ルーマニア語の子音ポーランド語の子音に基づいてsoundexを変更することです。

同音で、子音がされていることを覚えておいてくださいグループ化され、(でポーランドmnɲグループ化するためにすべての鼻音であり、あなたはおそらくグループ、唇、歯、および肺胞破裂音だろう-ことが、彼らは無声または一緒に表明-付与された、私はしないでくださいポーランド語を知っているので、私はただそこに真実ではないことを言っているかどうかわからない)。

次に、データベース内のすべての名前を2つの異なるsoundexシステムに変換し、異なる言語でどの名前の衝突が最も少ないかを見つけます。これにより、異なる名前が与えられます。だからそれSmithはとして表示されませんSmyth


ただし、これは「他の名前と衝突して誤解される可能性が高い名前」のみを解決します。「正しく聞こえ、間違って書き留められた名前」の他の方法を扱っていないため、一般名に注意を向けるべきです。

たとえば、Michael1950年初頭から1970年後半まで、米国では非常に一般的な名前でした。しかし、何らかの理由で、この名前Michealは1950年代に人気がありました(ピーク時には83番目に一般的な名前になりました)。そして、私はMicheal、名前を挙げられた人々が彼らの名前のスペルを間違えたと確信しています。

したがって、特定の発音の名前の人気を支配する名前が1つある名前に焦点を当てる必要があります。年によって名前のための別のデータ消費者をちらっと見、あなたはそれを見ることができますジャムで始まる名前...少年のためには、混乱しているJamaalJamalJamarなど。ところで、これらの名前は、のためにわずかに異なるsoundexesを持っているアメリカJ540J540そしてJ560- lそしてrそれらが密接に音声学に関連しているにもかかわらず、異なるグループです)。しかし、日本を言う、から誰かのために、表音地域で唯一の音がある場合lと、rアメリカ英語で発音されます。これはまた、知っておくべきsoundexを使用した主要な子音との課題を引き起こす可能性があります(私はかつて、日本の名前のローマ字表記としてリサではなくリサ(「R」)と呼ばれる日本人女性と働いていました)。

私の例は米国向けです。そのデータには簡単にアクセスできます。ポーランドハンガリー語にはいくつかのことがあり、ハンガリー語の名前の共通性を示唆しているだけです。英語以外の言語で検索することが役立つと思われます。

そのため、名前の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.