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

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

 ประวัติ 
ซาวเดกซ์เกิดขึ้นในปี ค.ศ. 1918 โดย Robert C. Russell และ Margaret K. Odell โดยในตอนแรกใช้ชื่อว่า อินเดกซ์ (Index) ซึ่งเป็นขั้นตอนวิธีในการจัดเก็บข้อมูลแบบธรรมดาทั่วๆไป ขึ้นกับตัวอักษรของคำนั้นเป็นหลัก ซึ่งเขาได้จดสิทธิบัตรเอาไว้ใน 2 ปีต่อมา หลังจากนั้นเขาได้พัฒนาให้ขั้นตอนวิธีเก็บข้อมูลโดยใช้การออกเสียงของมนุษย์เป็นหลัก แบ่งเป็น 6 แบบ คือ ฐานริมฝีปากทั้งสอง, ฐานริมฝีปากกับฟัน, ฐานฟัน, ฐานปุ่มเหงือก, ฐานเพดานอ่อน, ฐานเส้นเสียง ตามการใช้อวัยวะในช่องปากในการออกเสียง

ขั้นตอนการสร้างรหัสของซาวเดกซ์
รหัสของซาวเดกซ์มีความยาว 4 ตัวอักษร ตัวแรกของรหัสจะเป็นตัวอักษร อีก 3 ตัวข้างหลังจะเป็นตัวเลข ซึ่งตัวอักษรใดที่มีเสียงเหมือนหรือคล้ายๆกัน จะใช้ตัวเลขเดียวกัน ซึ่งขั้นตอนการสร้างรหัสนั้นจะมี ดังนี้
 ตัวอักษรที่จะนำมาเข้ารหัสจะต้องเป็นอักษรละตินของภาษาอังกฤษเท่านั้น (รุ่นดั้งเดิมใช้กับภาษาอังกฤษแบบอเมริกัน)
 ตัวอักษรตัวแรกของรหัสของซาวเดกซ์จะต้องเป็นตัวใหญ่ (uppercase letter) เสมอ โดยจะมาจากตัวอักษรตัวแรกของข้อมูลป้อนเข้าที่นำมาเข้ารหัส
 ถ้าตัวอักษรใดเป็นตัวอักษรสระ (A,E,I,O,U) หรือตัว H,W,Y จะไม่นำไปเข้ารหัสต่อไป เพราะอาจจะทำให้รหัสเกิดความผิดพลาดได้
 ทำการเข้ารหัสกับตัวอักษรที่เหลือจากข้อ 3 โดยแปลงให้เป็นตัวเลขต่างๆ ตามข้อกำหนด ดังนี้
 ตัวอักษร B, F, P, V เป็นเลข 1
 ตัวอักษร C, G, J, K, Q, S, X, Z เป็นเลข 2
 ตัวอักษร D, T เป็นเลข 3
 ตัวอักษร L เป็นเลข 4
 ตัวอักษร M, N เป็นเลข 5
 ตัวอักษร R เป็นเลข 6
 หลังจากทำการแปลงตัวอักษรในข้อมูลป้อนเข้าเป็นตัวเลขแล้ว ตอนนี้ตัวอักษรทั้งหมด (ยกเว้นตัวหน้า) จะถูกแปลงเป็นตัวเลข (ข้อ 4) หรือตัดทิ้ง (ข้อ 3) ไปแล้ว เราจะมาพิจารณาตัวเลขแต่ละคู่ติดกัน ถ้าในแต่ละคู่ติดกันนั้นเป็นเลขเดียวกันจะต้องตัดออกไปหนึ่งตัวให้เหลือเลขตัวเดียว
 ทำไปเรื่อยๆจนรหัสที่ได้ตรงตามรูปแบบที่ต้องการ (1 ตัวอักษร + 3 ตัวเลข) ถ้าเกิดกรณีที่เลขยังไม่ครบ 3 ตัว ให้เติมเลข 0 เข้าไปจนมีเลขครบ จะได้รหัสซาวเดกซ์ตามรูปแบบ <อักษรตัวใหญ่> <ตัวเลข> <ตัวเลข> <ตัวเลข>

ตัวอย่าง
พิจารณาคำว่า “Robert” และ “Rupert” มีรหัสซาวเดกซ์อย่างไร
 ขั้นตอน  “Robert”  “Rupert” 1. เป็นอักษรละตินของภาษาอังกฤษ  ใช่  ใช่ 2. นำอักษรตัวแรกไปใส่ในรหัส  R  R 3. พิจารณาตัวอักษรถัดไปของคำ ถ้าเป็นสระหรือ H,W,Y ตัดทิ้ง  Rbrt  Rprt 4. นำตัวอักษรมาแปลงเป็นตัวเลข  R163  R163 5. เลขคู่ติดกันมีเลขซ้ำหรือไม่ ถ้าซ้ำตัดออกหนึ่งตัว  ไม่ใช่  ไม่ใช่ 6. รหัสที่ได้นั้นตรงตามรูปแบบของรหัส <อักษรตัวใหญ่> <ตัวเลข> <ตัวเลข> <ตัวเลข>  ใช่  ใช่ ผลลัพธ์สุดท้าย  R163  R163
จะพบว่า “Robert” และ “Rupert” มีรหัสซาวเดกซ์เหมือนกัน หมายความว่าออกเสียงคล้ายกัน

แหล่งข้อมูลอื่น
http://www.blackwasp.co.uk/Soundex.aspx 
http://www.ics.uci.edu/~dan/genealogy/Miller/javascrp/soundex.htm
Soundex programming code
http://creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm 
http://www.techrepublic.com/blog/programming-and-development/how-do-i-implement-the-soundex-function-in-c/656
ทดลองใช้ Soundex กับ Soundex Converter
http://www.webcalc.net/phoneticalgorithms.php 
http://resources.rootsweb.ancestry.com/cgi-bin/soundexconverter 
http://www.eogn.com/soundex/