จะหาชื่อที่สะกดยากได้อย่างไร?


16

นี่คือคำถามที่ฉันเชื่อว่าสามารถแก้ไขได้ด้วย data mining และอัลกอริธึมที่ซับซ้อน แต่ฉันก็ไม่รู้เหมือนกัน ตัวชี้ใด ๆ เกี่ยวกับแหล่งข้อมูลที่จะใช้และอัลกอริทึมที่จะนำไปใช้ใดบ้างยินดีต้อนรับ

แบ็คกราวน์:ฉันเป็นชาวโรมาเนียน - ฮังการีที่คาดหวังว่าจะมีลูกด้วยภาษาโปแลนด์ - ยูเครนและไม่ได้ตั้งความคิดของเราในประเทศที่เราต้องการปักหลัก อย่างที่คุณคาดหวังการเลือกชื่อที่ให้นั้นมีความสำคัญที่สุดและมีการถกเถียงกันอย่างเผ็ดร้อน จากด้านข้างของฉันฉันยังคงมีบาดแผลจากความยุ่งยากทั้งหมดที่ฉันต้องทำเมื่อใครบางคนจะสะกดชื่อของฉันเมื่อฉันย้ายจากประเทศหนึ่งไปยังอีก ตัวอย่างเช่นหากคุณถูกเรียกว่า "เอเดรียน" คุณจะได้รับพรในโรมาเนียเพียงเพื่อจะพบว่าคุณได้รับ "เอเดรียอี " เป็นเอกสารภาษาฝรั่งเศสอย่างเป็นทางการ ดังนั้นความต้องการเพียงอย่างเดียวของฉันคือการทำให้ชื่อของทารกถูกสะกดผิดในบางประเทศในยุโรป

คำแถลงปัญหา:เมื่อมีกลุ่มประเทศเช่นฝรั่งเศสเยอรมนีสวีเดนโปแลนด์และโรมาเนียค้นหารายชื่อที่ให้ไว้ซึ่งเมื่อออกเสียงอย่างถูกต้องจะไม่ถูกสะกดโดยคนในท้องถิ่น

อีกอย่างเป็นทางการ: Let P (c, n)เป็นฟังก์ชั่นที่ให้ผลตอบแทนน่าจะเป็นของชื่อnถูกสะกดผิดในประเทศค ได้รับCชุดของประเทศและ p₀ความน่าจะเป็นหาNชุดของชื่อที่กำหนดเช่นว่า

สำหรับnNและcC ทั้งหมด , p (c, n) <p₀

ความคิดเริ่มต้น : ปัญหาหลักคือวิธีการใช้P (c, n) เราสามารถลองประมาณด้วยฮิวริสติก เห็นได้ชัดว่าชื่อนั้นสะกดผิดในสองกรณี:

  1. มันใช้น้อยในประเทศนั้น
  2. มันคล้ายกับชื่ออื่นที่ไม่ได้ใช้เพียงเล็กน้อยในประเทศนั้น

ฉันไม่แน่ใจว่าฉันจะใช้อินเทอร์เน็ตอย่างไรเช่น Wikipedia เพื่อตอบคำถามสองข้อนี้อย่างมีประสิทธิภาพ รายการหนึ่งจะใช้ชื่อที่ใช้บ่อยในประเทศได้อย่างไร คนเราจะมองหาตัวสะกดที่คล้ายกันอย่างไร


1
ฉันไม่แน่ใจว่าความนิยมจะส่งผลกระทบอย่างมากต่อความน่าจะเป็นของการสะกดคำผิดเมื่อเทียบกับชื่ออื่นที่มีระยะทางแก้ไขน้อย เช่นฮันนาเสียงคล้าย / เหมือนกันกับฮันนาห์และแอนนาและลูคัสมีความคล้ายคลึงกับLucaและลูคัส เมื่อคุณได้รับรายชื่อสำหรับแต่ละประเทศคุณสามารถเริ่มต้นด้วยการจัดกลุ่มโดยแก้ไขระยะทางที่ต่ำ
amon

ฉันคิดว่ามันเกี่ยวกับความนิยมด้วย ไม่มีใครสะกดว่าAnnaในโรมาเนียเนื่องจาก double nนั้นแปลกในภาษานั้น ในทำนองเดียวกันคนฝรั่งเศสมีแนวโน้มที่จะเขียนคริสเตียนแม้ว่าคุณออกเสียงได้โดยไม่ต้องต่อชั่วโมง (เล่นสำนวนเจตนา: D)
user1202136

5
แนวทางปฏิบัติจะใช้ GUID
toniedzwiedz

1
การอ้างอิง XKCD ที่ยอดเยี่ยม แต่อย่าลืมตาราง Little Bobby ;-) xkcd.com/327
Mawg พูดว่าการคืนสถานะโมนิก้า

ฉันจะพิจารณาเปรียบเทียบเสียงสระในภาษาเหล่านั้น ภาษาเยอรมันของฉันคล่องแคล่ว แต่ฉันก็ยังยุ่งเหยิงของÖ
Mawg พูดว่าคืนสถานะโมนิก้า

คำตอบ:


15

มีวิธีการบางอย่างที่จะทำงานได้ดีขึ้นสำหรับบางภาษากว่าคนอื่น ๆ ตัวอย่างเช่นsoundex (และคำอธิบายอื่นที่ฉันชอบ ) ได้รับการออกแบบสำหรับการออกเสียงชื่อภาษาอังกฤษ ด้วย soundex Michaelกลายเป็น M240 มีหลายขั้นตอน:

  1. ตัวอักษรตัวแรกถูกแยก ( Mและichael)
  2. สระทั้งหมดจะถูกลบออกจากส่วนที่เหลือ ( Mและchl)
  3. พยัญชนะถูกแทนที่
    • c -> 2
    • l -> 4
  4. ศูนย์แผ่นด้านซ้าย

การจัดกลุ่มของการแปลงพยัญชนะอยู่บนพื้นฐานของความคล้ายคลึงกันการออกเสียงของพวกเขา - B, F, Pและทั้งหมดของแผนที่จะV1

และมีรูปแบบในช่วงเวลานี้ มันมีประโยชน์อย่างยิ่งในลำดับวงศ์ตระกูลที่การสะกดชื่ออาจเปลี่ยนไปตามกาลเวลา แต่การออกเสียงยังคงเหมือนเดิม


นอกจากนี้ยังมีวิธีการเช่นคะแนนการแข่งขันที่พัฒนาโดยสายการบินสำหรับชื่อ (มากกว่าลำดับวงศ์ตระกูลอเมริกัน)

การเข้ารหัสของวิธีการให้คะแนนการแข่งขัน (MRA) คือ:

  1. ลบสระที่ไม่เป็นผู้นำทั้งหมด ( Michaelกลายเป็นMchlและAnthonyกลายเป็นAnthny)
  2. ลบค่าคงที่ที่สองของคู่ใด ๆ
  3. หากสตริงยาวกว่า 6 อักขระให้ลดสตริงที่เหลือเป็น 6 ตัวอักษรโดยใช้สามตัวแรกและสามตัวสุดท้าย

ข้อมูลจำเพาะทั้งหมดนี้สามารถพบได้ในarchive.org - โปรดทราบว่ามันเป็น "ไม่เล็ก" (แบบฟอร์มที่พิมพ์คือ 214 หน้า)

การเปรียบเทียบมีเกณฑ์การจับคู่ตามระยะเวลาของข้อความ

มีขั้นตอนวิธีการออกเสียงอื่น ๆ ด้วย


ดังนั้นสิ่งที่ฉันอยากจะแนะนำให้คุณทำอย่างใดอย่างหนึ่งใช้ Soundex เป็นคือใช้วิธีการให้คะแนนการแข่งขันที่เป็นอยู่หรือปรับเปลี่ยน Soundex ตามพยัญชนะโรมาเนียและพยัญชนะโปแลนด์

โปรดจำไว้ว่ามี Soundex พยัญชนะที่มีการจัดกลุ่ม (ในโปแลนด์m, n, ɲมีทั้งหมดเสียงพยัญชนะนาสิกจะถูกจัดกลุ่มและคุณจะมีแนวโน้มที่กลุ่มริมฝีปาก, ทันตกรรม, และถุงออกเสียง - ไม่ว่าจะเป็นใบ้หรือเปล่งออกมาร่วมกัน - รับฉันทำไม่ได้ รู้ภาษาโปแลนด์ดังนั้นไม่รู้ว่าฉันแค่พูดสิ่งที่ไม่จริงใช่ไหม)

จากนั้นเพียงซ่อนชื่อทั้งหมดในฐานข้อมูลไปยังระบบ soundex ที่แตกต่างกันสองระบบและค้นหาว่าชื่อใดมีชุดการชนที่ต่ำที่สุดในภาษาต่างๆ สิ่งนี้ให้ชื่อที่แตกต่าง เพื่อที่จะไม่แสดงขึ้นเป็นSmithSmyth


อย่างไรก็ตามนี่จะแก้ได้เพียง "ชื่อที่มีแนวโน้มว่าจะชนกับชื่ออื่นและผิด" มันไม่ได้พูดถึงวิธีอื่น ๆ ของ "ชื่อที่ได้ยินถูกต้องเขียนลงอย่างไม่ถูกต้อง" และสำหรับสิ่งนั้นเราควรมุ่งความสนใจไปที่ชื่อสามัญ

ตัวอย่างเช่นMichaelเป็นชื่อที่พบบ่อยมากในสหรัฐอเมริกาตั้งแต่ต้นปี 1950 ถึงปลายปี 1970 มันเป็นที่นิยมมาก อย่างไรก็ตามด้วยเหตุผลบางอย่างชื่อMichealได้รับความนิยมในช่วงปี 1950 (ลุกขึ้นชื่อที่พบมากที่สุดที่ 83 ที่จุดสูงสุด) และฉันมั่นใจว่าผู้คนMichealที่มีชื่อถูกสะกดชื่ออย่างต่อเนื่อง

ดังนั้นคุณควรมุ่งเน้นไปที่ชื่อที่มีชื่อเดียวที่มีอิทธิพลต่อความนิยมของชื่อสำหรับการออกเสียงที่กำหนด วินาศภัยข้อมูลของผู้บริโภคอีกชื่อโดยปีนี้คุณจะเห็นว่าชื่อเริ่มต้นด้วยการแจม ... สำหรับเด็กมีระเบียบกับJamaal, Jamal, Jamarและอื่น ๆ อนึ่งชื่อเหล่านี้มี soundexes แตกต่างกันเล็กน้อยสำหรับชาวอเมริกัน ( J540, J540และJ560- The lและrอยู่ในกลุ่มที่แตกต่างกันถึงแม้ว่าพวกเขามีความสัมพันธ์อย่างใกล้ชิดในการออกเสียง) อย่างไรก็ตามสำหรับใครบางคนจากญี่ปุ่นพูดว่ามีเพียงเสียงเดียวในภูมิภาคสัทศาสตร์ที่lและrมีการออกเสียงในภาษาอังกฤษแบบอเมริกัน นี่อาจเป็นสิ่งที่ท้าทายกับพยัญชนะชั้นนำที่ใช้ soundex ที่ใคร ๆ ก็ควรระวัง (ฉันเคยทำงานกับผู้หญิงชาวญี่ปุ่นคนหนึ่งที่เรียกตัวเองว่า Risa (ที่มี 'R') มากกว่า Lisa เป็น Romanization ของชื่อญี่ปุ่นของเธอ)

คุณจะทราบว่าตัวอย่างของฉันสำหรับสหรัฐอเมริกา ข้อมูลนั้นสามารถเข้าถึงได้ง่าย เห็นได้ชัดว่ามีบางสิ่งสำหรับโปแลนด์และฮังการีและมีเพียงคำแนะนำที่คนธรรมดาสามัญของชื่อฮังการี ... ฉันสงสัยว่าการค้นหาในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษอาจมีประโยชน์

ดังนั้นในการตั้งชื่อ soundex การชนกันน้อยและการสะกดคำที่แท้จริงอยู่ในชุดของการชน นี่เป็นชื่อสามัญ มองไปที่รายชื่อชาวฮังการีKrisztiánนั้นอาจจะมีการสะกดผิดในขณะที่Zoltánมีโอกาสน้อยกว่านั้น (ชื่อทารกที่พบมากที่สุดอันดับที่ 22 ในฮังการีในปี 2011! Michaelที่กล่าวว่าคุณไม่สามารถไปอย่างผิดปกติกับ


2
คำตอบที่ยอดเยี่ยม! ฉันจะพยายามที่จะใช้มันและเมื่อฉันเสร็จฉันแบ่งปันรหัสและยอมรับคำตอบของคุณ
user1202136

2
ความพยายามที่จะใช้ความคิดนี้ ยังไม่ผ่าน "การทดสอบผู้ใช้" :) github.com/cristiklein/idemscriptent-given-names
user1202136

คำตอบที่ยอดเยี่ยมไมเคิล! @ user1202136 ใช้งานได้ดีกับสคริปต์! ฉันสนใจที่จะเห็นผลลัพธ์ :)
Chris Cirefice

1
@ChrisCirefice: ในขณะที่คำตอบของไมเคิลนั้นยอดเยี่ยมมากฉันพบว่ามันไม่ได้สร้างชื่อที่จะผ่านการทดสอบผู้ใช้ ฉันใช้อัลกอริทึมที่ง่ายกว่านี้มากซึ่งพยายามค้นหาชื่อที่สะกดเหมือนกันในรายชื่อ 100 อันดับแรก กรุณาค้นหาผลลัพธ์ได้ที่นี่: github.com/cristiklein/idemscriptent-given-names
user1202136

1

คุณอาจต้องการดูอัลกอริทึมการออกเสียง Double Metaphone ซึ่งออกแบบมาเพื่อจัดการกับวิธีการออกเสียงคำในภาษาต่างๆ นอกจากนี้ยังมี Metaphone 3 แต่ต้องเสียค่าใช้จ่าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.