คุณอาจสนใจใช้วิธีใดวิธีหนึ่งต่อไปนี้ทั้งนี้ขึ้นอยู่กับกรณี:
วิธีที่ 0: ใช้ API หรือไลบรารี
โดยปกติแล้วจะมีปัญหาเล็กน้อยกับไลบรารีเหล่านี้เนื่องจากบางส่วนไม่ถูกต้องสำหรับข้อความขนาดเล็กบางภาษาหายไปช้าต้องเชื่อมต่ออินเทอร์เน็ตไม่ฟรี ... แต่โดยทั่วไปแล้วจะเหมาะกับความต้องการส่วนใหญ่ .
วิธีที่ 1: แบบจำลองภาษา
แบบจำลองภาษาทำให้เรามีความน่าจะเป็นของลำดับคำ สิ่งนี้มีความสำคัญเนื่องจากช่วยให้เราตรวจจับภาษาของข้อความได้อย่างมีประสิทธิภาพแม้ว่าข้อความนั้นจะมีคำในภาษาอื่น ๆ ก็ตาม (เช่น"" Hola "แปลว่า" สวัสดี "ในภาษาสเปน" )
คุณสามารถใช้แบบจำลองภาษา N (หนึ่งภาษาต่อหนึ่งภาษา) เพื่อให้คะแนนข้อความของคุณ ภาษาที่ตรวจพบจะเป็นภาษาของโมเดลที่ให้คะแนนสูงสุดแก่คุณ
ถ้าคุณต้องการสร้างแบบจำลองภาษาง่ายๆสำหรับสิ่งนี้ฉันจะไป 1 กรัม ในการดำเนินการนี้คุณจะต้องนับจำนวนครั้งที่แต่ละคำจากข้อความขนาดใหญ่ (เช่น Wikipedia Corpus ในภาษา "X") ปรากฏ
จากนั้นความน่าจะเป็นของคำจะเป็นความถี่หารด้วยจำนวนคำทั้งหมดที่วิเคราะห์ (ผลรวมของความถี่ทั้งหมด)
the 23135851162
of 13151942776
and 12997637966
to 12136980858
a 9081174698
in 8469404971
for 5933321709
...
=> P("'Hola' means 'hello' in spanish") = P("hola") * P("means") * P("hello") * P("in") * P("spanish")
หากข้อความที่จะตรวจพบมีขนาดค่อนข้างใหญ่ฉันขอแนะนำให้สุ่มตัวอย่าง N คำแบบสุ่มแล้วใช้ผลรวมของลอการิทึมแทนการคูณเพื่อหลีกเลี่ยงปัญหาความแม่นยำของทศนิยม
P(s) = 0.03 * 0.01 * 0.014 = 0.0000042
P(s) = log10(0.03) + log10(0.01) + log10(0.014) = -5.376
วิธีที่ 2: การตัดกันชุด
วิธีที่ง่ายกว่านั้นคือการเตรียมชุด N (หนึ่งชุดต่อภาษา) ด้วยคำที่ใช้บ่อยที่สุด M จากนั้นตัดข้อความของคุณกับแต่ละชุด ชุดที่มีจำนวนทางแยกมากที่สุดจะเป็นภาษาที่คุณตรวจพบ
spanish_set = {"de", "hola", "la", "casa",...}
english_set = {"of", "hello", "the", "house",...}
czech_set = {"z", "ahoj", "závěrky", "dům",...}
...
text_set = {"hola", "means", "hello", "in", "spanish"}
spanish_votes = text_set.intersection(spanish_set)
english_votes = text_set.intersection(english_set)
czech_votes = text_set.intersection(czech_set)
...
วิธีที่ 3: การบีบอัด Zip
สิ่งนี้เป็นความอยากรู้อยากเห็นมากกว่าสิ่งอื่นใด แต่นี่เป็นไปได้ ... คุณสามารถบีบอัดข้อความของคุณ (เช่น LZ77) จากนั้นวัดระยะทางไปรษณีย์ตามข้อความที่บีบอัดข้อมูลอ้างอิง โดยส่วนตัวแล้วฉันไม่ชอบเพราะมันช้ากว่าไม่แม่นยำและอธิบายได้น้อยกว่าวิธีอื่น อย่างไรก็ตามอาจมีแอปพลิเคชั่นที่น่าสนใจสำหรับวิธีนี้ หากต้องการอ่านเพิ่มเติม: ต้นไม้ภาษาและการซิป