web-dev-qa-db-ja.com

与えられた名前のスペルミスを見つけにくい方法は?

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

背景:私はルーマニア語-ハンガリー語です。ポーランド語-ウクライナ語の赤ちゃんを期待していて、私たちがどの国に私たちの心を設定していないのですか?落ち着きたい。ご想像のとおり、特定の名前を選択することは 非常に重要 であり、熱い議論です。私は、ある国から別の国に移ったときに誰かが私の名前のスペルを間違えたときに経験しなければならなかったすべての面倒にまだトラウマを抱えています。たとえば、「エイドリアン」と呼ばれた場合、ルーマニアでは祝福されますが、最終的に「アドリen」になったことがわかるだけで、公式フランス文書。したがって、私の唯一の要件は、一部のヨーロッパ諸国で赤ちゃんの名前のスペルミスが発生する可能性を極めて低くすることです。

問題の説明:フランス、ドイツ、スウェーデン、ポーランド、ルーマニアなどの国のセットが与えられた場合、適切に発音されたときに指定された名前のリストを見つける、地元の人がスペルミスをすることはほとんどありません。

より正式には:p(c、n)を国nが国c[〜#〜] c [〜#〜]国のセットとp₀確率が与えられると、[〜#〜] n [〜#〜]指定された名前のセット。

すべてのn[〜#〜] n [〜#〜]およびc[〜#〜] c [〜#〜]p(c、n)<p₀

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

  1. その国ではほとんど使われていません。
  2. これは、その国ではほとんど使用されていない、別の名前に似ています。

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

16
user1202136

他の言語よりもいくつかの言語でうまくいくいくつかのアプローチがあります。たとえば、 soundex (および 私が好きな別の説明 )は、名前の英語の発音用に設計されています。 soundexでは、MichaelはM240になります。これにはいくつかのステップがあります。

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

子音変換のグループ化は、それらの音声の類似性に基づいています-BFPおよびVすべてが1にマッピングされます。

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


match rating のようなアプローチもあります。これは、航空会社によって(アメリカの家系ではなく)名前のために開発されました。

マッチレーティングアプローチ(MRA)のエンコーディングは次のとおりです。

  1. 先行しない母音をすべて削除します(MichaelMchlになり、AnthonyAnthnyになります)
  2. Doubleの2番目の定数を削除します
  3. 文字列が6文字より長い場合は、最初の3文字と最後の3文字を使用して、残りの文字列を6文字に減らします。

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

比較には、テキストの長さに基づいて一致するしきい値があります。

他の音声アルゴリズムも があります。


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

Soundexでは、子音はgrouped(ポーランド語ではmnɲ鼻の子音はすべてグループ化されます。口唇破裂、歯科破裂、歯槽破裂は、無声であれ一緒であれ、グループ化される可能性があります。もちろん、ポーランド語はわかりません。そこではありません)。

次に、データベース内のすべての名前を2つの異なるsoundexシステムに変換し、どの言語で衝突のセットが最も少ないかを調べます。これにより、明確な名前が付けられます。そのため、SmithSmythとして表示されません。


ただし、これで解決できるのは、「他の名前と衝突して聞き間違えやすい名前」だけです。それは、「正しく聞こえ、間違って書き留められた名前」の別の方法については触れていません。そのため、一般的な名前に注意を向けるべきです。

たとえば、Michaelは、1950年の初めから1970年の終わりまで、米国では非常に一般的な名前でした。これは 本当に人気のある でした。ただし、何らかの理由で、Michealという名前は1950年代に人気が出ました(ピーク時には83番目に一般的な名前になりました)。そして、私はMichealという名前の人々が常に名前のスペルを間違えたことは確かです。

したがって、特定の発音の名前の人気を左右する1つの名前がある名前に焦点を当てる必要があります。年ごとに名前を別のデータコンシューマーでちらりと見ると、 Jam ...で始まる名前は男の子にとって混乱です with JamaalJamalJamarなど。ちなみに、これらの名前は、AmericanJ540J540およびJ560-lrは、音声学では密接に関連していますが、異なるグループに属しています。ただし、たとえば日本からの人にとって、lrがアメリカ英語で発音される音声領域には1つの音しかありません。これはまた、soundexを使用する主要な子音に注意する必要があるかもしれません(以前、私は、リサではなくリサ(R)と呼んでいた日本人の女性と一緒に、日本の名前のローマ字表記として使用していました)。

私の例は米国向けであることに注意してください。そのデータには簡単にアクセスできます。どうやら ポーランドの場合ハンガリー語 があり、ヒントは ハンガリー語 の名前の共通性だけです...以外の言語で検索しているのではないかと思いますそこで英語が役立つかもしれません。

したがって、名前にsoundexを指定すると、衝突はほとんど発生せず、実際のスペルは衝突のセットに含まれます。好ましくは、これは一般的な名前です。そのハンガリー語のリストを見ると、Krisztiánを使用するとスペルミスが発生する可能性が高くなり、Zoltánを使用する可能性は低くなります(2011年にハンガリーで#22最も一般的な赤ちゃんの名前!)。とはいえ、Michaelを使用しても問題はありません。

15
user40980

おそらく、さまざまな言語で単語がどのように発音されるかを処理するように設計されたDouble Metaphone音声アルゴリズムを調べたいと思います。 Metaphone 3もありますが、使用するには費用がかかります。

1
John Smith