Bagaimana sulit menemukan salah mengeja nama yang diberikan?

16

Berikut adalah pertanyaan yang saya yakin dapat diselesaikan dengan beberapa penambangan data dan algoritma yang canggih, tetapi saya tidak tahu caranya. Setiap petunjuk tentang sumber data apa yang akan digunakan dan algoritma apa yang harus diterapkan dipersilakan.

Latar Belakang: Saya seorang Rumania-Hongaria yang sedang mengandung bayi dengan bahasa Polandia-Ukraina dan belum cukup menentukan pikiran di negara mana kita ingin menetap. Seperti yang mungkin Anda harapkan, memilih nama yang diberikan adalah hal yang paling penting dan perdebatan yang panas. Dari sisi saya, saya masih trauma dengan semua kerumitan yang harus saya lalui ketika seseorang akan salah mengeja nama saya ketika saya pindah dari satu negara ke negara lain. Misalnya, jika Anda dipanggil "Adrian" Anda akan diberkati di Rumania, hanya untuk menemukan bahwa Anda akhirnya menjadi "Adri e n" adalah beberapa dokumen resmi Perancis. Jadi satu-satunya persyaratan saya adalah membuatnya sangat tidak mungkin untuk nama bayi itu salah eja di beberapa negara Eropa.

Pernyataan Masalah: Dengan serangkaian negara, misalnya, Prancis, Jerman, Swedia, Polandia, dan Rumania, temukan daftar nama yang diberikan, yang jika diucapkan dengan benar, tidak mungkin salah eja oleh penduduk setempat.

Secara lebih formal: Misalkan p (c, n) menjadi fungsi yang mengembalikan probabilitas nama n salah eja di negara c . Diberikan C satu set negara dan p₀ probabilitas, temukan N satu set nama yang diberikan, sedemikian rupa sehingga

untuk semua nN dan cC , p (c, n) <p₀

Pikiran awal : Masalah inti adalah bagaimana mengimplementasikan p (c, n) . Orang bisa mencoba memperkirakannya dengan heuristik. Jelas nama kemungkinan salah eja dalam dua kasus:

  1. Ini sedikit digunakan di negara itu.
  2. Itu mirip dengan nama yang berbeda, yang tidak sedikit digunakan di negara itu.

Saya tidak yakin bagaimana saya bisa menggunakan Internet, misalnya, Wikipedia, untuk secara efisien menjawab dua pertanyaan ini. Bagaimana satu daftar hanya nama yang cukup sering digunakan di suatu negara? Bagaimana orang mencari yang sama ejaannya?

pengguna1202136
sumber
1
Saya tidak yakin popularitas akan sangat mempengaruhi kemungkinan kesalahan mengeja, bila dibandingkan dengan jarak sunting yang rendah ke nama lain. Misalnya Hanna terdengar mirip / identik dengan Hannah dan Anna , dan Lucas mirip dengan Luca dan Lukas . Setelah mendapatkan daftar nama untuk masing-masing negara, Anda bisa mulai dengan mengelompokkan berdasarkan jarak edit yang rendah.
amon
Saya pikir itu ada hubungannya dengan popularitas juga. Tidak ada yang akan mengeja Anna dalam bahasa Rumania, karena n ganda hanya aneh dalam bahasa itu. Demikian pula, orang Prancis kemungkinan akan menulis Kristen bahkan jika Anda mengucapkannya tanpa h . (Pun dimaksudkan.: D)
user1202136
5
Pendekatan pragmatis akan menggunakan GUID.
toniedzwiedz
1
Referensi XKCD hebat. Tapi jangan lupa tabel Little Bobby ;-) xkcd.com/327
Mawg mengatakan mengembalikan Monica
Saya akan mempertimbangkan membandingkan suara vokal dalam bahasa-bahasa tersebut. Bahasa Jerman saya lancar, tetapi saya masih mengacaukan Ö
Mawg mengatakan mengembalikan Monica

Jawaban:

15

Ada beberapa pendekatan yang akan bekerja lebih baik untuk beberapa bahasa daripada yang lain. Misalnya, soundex (dan deskripsi lain yang saya suka ) dirancang untuk pengucapan nama dalam bahasa Inggris. Dengan soundex, Michaelmenjadi M240. Ini memiliki beberapa langkah:

  1. Huruf pertama diisolasi. ( Mdan ichael)
  2. Semua vokal dihapus dari sisa ( Mdan chl)
  3. Konsonan diganti
    • c -> 2
    • l -> 4
  4. Nol pad kiri.

Pengelompokan konversi konsonan didasarkan pada mereka fonetik kesamaan - B, F, Pdan Vsemua peta untuk 1.

Dan ada variasi dalam hal ini dari waktu ke waktu . Ini sangat berguna dalam silsilah di mana ejaan nama dapat berubah dari waktu ke waktu, tetapi pengucapannya tetap sama.


Ada juga pendekatan seperti rating kecocokan yang dikembangkan oleh maskapai untuk nama (bukan silsilah Amerika).

Pengkodean pendekatan peringkat kecocokan (MRA) adalah:

  1. Hapus semua vokal yang tidak terkemuka ( Michaelmenjadi Mchldan Anthonymenjadi Anthny)
  2. Hapus konstanta kedua dari sembarang ganda
  3. Jika string lebih panjang dari 6 karakter, kurangi string yang tersisa menjadi 6 karakter dengan mengambil tiga pertama dan tiga terakhir.

Spesifikasi lengkap untuk ini dapat ditemukan di archive.org - perhatikan bahwa ini "tidak kecil" (formulir yang dicetak 214 halaman).

The perbandingan memiliki ambang yang cocok berdasarkan berapa lama teks.

Ada juga algoritma fonetik lainnya .


Jadi, yang saya sarankan Anda lakukan adalah mengambil soundex apa adanya, mengambil pendekatan peringkat kecocokan apa adanya, atau memodifikasi soundex berdasarkan konsonan Rumania dan konsonan Polandia .

Ingat bahwa dengan soundex, konsonan yang dikelompokkan (dalam bahasa Polandia, m, n, ɲsemua konsonan nasal untuk dikelompokkan, dan Anda akan kemungkinan kelompok labial, gigi, dan alveolar plosif - akan mereka bersuara atau menyuarakan bersama-sama - yang diberikan, saya tidak tahu bahasa Polandia jadi tidak tahu jika saya hanya mengatakan hal-hal yang tidak benar di sana).

Kemudian, cukup sembunyikan semua nama dalam basis data ke dua sistem soundex yang berbeda dan cari tahu nama-nama apa yang memiliki rangkaian tumbukan terendah dalam berbagai bahasa. Ini memberi Anda nama yang berbeda. Jadi itu Smithtidak muncul sebagai Smyth.


Namun, ini hanya memecahkan "nama yang kemungkinan akan bertabrakan dengan nama lain dan salah dengar." Itu tidak membahas cara lain dari "nama yang didengar dengan benar, ditulis secara tidak benar" dan untuk itu, orang harus memusatkan perhatian mereka pada nama-nama umum.

Sebagai contoh, Michaeladalah nama yang sangat umum di AS dari awal 1950 hingga akhir 1970. Itu benar - benar populer . Namun, untuk beberapa alasan, nama Michealitu agak populer di tahun 1950-an (naik ke nama ke-83 yang paling umum pada puncaknya). Dan saya yakin orang-orang yang bernama Michealterus-menerus membuat nama mereka salah eja.

Dengan demikian, Anda harus fokus pada nama di mana ada satu nama yang mendominasi popularitas nama untuk pengucapan yang diberikan. Melirik konsumen data yang lain untuk nama-nama tahun, Anda dapat melihat bahwa nama yang diawali dengan Jam ... untuk anak laki-laki yang berantakan dengan Jamaal, Jamal, Jamardan lain-lain. Kebetulan, nama-nama ini memiliki soundex yang sedikit berbeda untuk Amerika ( J540, J540dan J560- ldan rdalam kelompok yang berbeda meskipun mereka terkait erat dalam fonetik). Namun, untuk seseorang dari, katakanlah Jepang, hanya ada satu suara di wilayah fonetik di mana ldanrdiucapkan dalam bahasa Inggris Amerika. Ini juga dapat menimbulkan tantangan dengan konsonan terkemuka menggunakan soundex yang orang harus sadar (saya pernah bekerja dengan seorang wanita Jepang yang menyebut dirinya Risa (dengan 'R') daripada Lisa sebagai Romanisasi nama Jepangnya).

Anda akan perhatikan bahwa contoh saya adalah untuk Amerika Serikat. Data itu mudah diakses. Rupanya ada beberapa hal untuk Polandia dan Hongaria , dan hanya mengisyaratkan kesamaan nama Hongaria ... Saya menduga bahwa mencari dalam bahasa selain bahasa Inggris mungkin membantu di sana.

Jadi, mengingat soundex untuk sebuah nama, beberapa tabrakan dan ejaan yang sebenarnya ada di set tabrakan. Lebih disukai, ini adalah nama umum. Melihat daftar hungaria itu, pergi dengan Krisztiánkemungkinan akan mendapatkan salah eja sementara, Zoltánkurang mungkin begitu (# 22 nama bayi paling umum di 2011 di Hongaria!). Yang mengatakan, Anda tidak bisa salah dengan Michael.


sumber
2
Jawaban yang luar biasa! Saya akan mencoba mengimplementasikannya dan setelah selesai saya membagikan kode dan menerima jawaban Anda.
user1202136
2
Upaya menerapkan gagasan ini. Tidak cukup lulus "pengujian pengguna". :) github.com/cristiklein/idemscriptent-given-names
user1202136
Jawaban yang sangat bagus Michael! @ user1202136 kerja bagus pada skrip! Saya tertarik untuk melihat hasilnya :)
Chris Cirefice
1
@ ChrisCirefice: Sementara jawaban Michael sangat mengagumkan, saya menemukan itu tidak menghasilkan nama yang akan lulus "uji pengguna". Saya menggunakan algoritma yang jauh lebih sederhana, yang mencoba menemukan nama yang dieja secara identik dalam daftar 100 nama teratas. Silakan temukan hasilnya di sini: github.com/cristiklein/idemscriptent-given-names
user1202136
1

Anda mungkin ingin melihat ke dalam algoritma fonetik Metafon Ganda, yang dirancang untuk menangani bagaimana kata-kata diucapkan dalam berbagai bahasa. Ada juga Metaphone 3, tetapi itu membutuhkan uang untuk digunakan.

John Smith
sumber