Regex เพื่อแยกคำจากภาษาอื่น

ฉันรู้ว่าฉันสามารถแยกตัวอักษรและตัวเลขภาษาอังกฤษได้โดยใช้ A-Za-z0-9 regex

ฉันจะแยกคำจากภาษาอื่น เช่น ภาษาอาหรับ และอนุญาตให้ใช้เฉพาะตัวอักษรและตัวเลขในสคริปต์ได้อย่างไร และไม่มีอะไรอื่นอีก

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

ตอนนี้ฉันสงสัยว่ามีวิธีอื่นใดที่ใช้อยู่หรือมีคนรู้ว่าสามารถใช้วิเคราะห์ข้อความของภาษาอื่นได้

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

สรุปแล้วภาษาอื่นสามารถวิเคราะห์โดยใช้ regex ได้อย่างไร


person Vish    schedule 09.08.2011    source แหล่งที่มา


คำตอบ (4)


โดยทั่วไป นิพจน์ทั่วไปไม่มีประสิทธิภาพเพียงพอที่จะแยกคำในภาษาที่ไม่ได้ใช้ตัวแยกคำ (เช่น ช่องว่าง)

หากต้องการแยกคำจากภาษาจีน คุณต้องมีพจนานุกรมคำศัพท์ที่รู้จักจำนวนมาก และคุณต้องแบ่งประโยคตามคำที่รู้จัก โดยเลือกใช้รายการพจนานุกรมที่ยาวกว่า (เพราะว่าอักขระแต่ละตัวเป็นคำที่ถูกต้อง)

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

person Nayuki    schedule 09.08.2011
comment
555 ตอนนี้มันทำให้ฉันสับสนเพราะฉันไม่รู้ว่าจะต้องใช้วิธีใดเนื่องจากฉันหาพจนานุกรมคำศัพท์ภาษาจีนไม่เจอ บางทีคุณอาจช่วยฉันด้วยลิงก์บางส่วน - person Vish; 10.08.2011
comment
Googling สำหรับไฟล์พจนานุกรมภาษาจีนฟรีให้สิ่งนี้: mdbg.net/chindict/chindict php?page=cedict . ฉันจะเพิ่มคำตอบอื่นเกี่ยวกับวิธีแยกคำในภาษาจีน - person Nayuki; 10.08.2011

สมมติว่าเรามีพจนานุกรมภาษาจีนอยู่ในมือ และเราต้องการแยกวลีดังนี้: 中國是位於亞洲東部的一個廣大地域或國度

วิธีหนึ่งคือการสแกนจากด้านซ้ายและหยิบตัวอักษรให้ได้มากที่สุดโดยที่ยังมีคำอยู่ในพจนานุกรมอยู่ จากนั้นเราก็ก้าวไปข้างหน้าด้วยตัวอักษรจำนวนมากนั้นแล้วทำซ้ำ แนวทางนี้เรียกว่าวิธีโลภ ซึ่งจะทำให้เราต้องแยกวลีนี้: [中國][是][位於][亞洲][東部][的][一][個][廣大][地域][或] [國度]

นี่ไม่ใช่แนวทางเดียว เพราะบางครั้งการแยกทางที่ดีที่สุดก็ไม่ใช่การละโมบ ตัวอย่างเช่น หากเรามีพจนานุกรม {A, B, C, D, AB, BCD} และข้อความ ABCD เราก็สามารถแบ่งข้อความเป็น [AB][C][D] หรือเป็น [A][BCD] . การแยกครั้งหลังอาจเป็นที่ต้องการมากกว่าครั้งก่อน

สะดวก หน้าเว็บนี้สามารถสาธิตการแยกคำในทางปฏิบัติ: http://www.mdbg.net/chindict/chindict.php

person Nayuki    schedule 10.08.2011
comment
ฉันจะไม่แปลกใจเช่นกันหากมีการเล่นคำในภาษาจีนที่เกี่ยวข้องกับการนำคำที่สั้นกว่าหลายคำมารวมกันเป็นคำที่ยาวกว่า และด้วยเหตุนี้จึงไม่มีการแยกวิเคราะห์ที่ถูกต้องแม้แต่คำเดียว - person porges; 10.08.2011
comment
แม้ว่าวลีตัวอย่างของฉันจะแสดงคำหนึ่งและสองอักขระ แต่คำที่ยาวกว่านี้อาจพบได้ในบริบททางเทคนิคหรือบริบทเฉพาะเจาะจง สำหรับวรรณกรรม มีสำนวน 4 ตัวอักษรมากมาย สำหรับเรื่องทางเทคนิค มีคำว่า 碳水化合物 = คาร์โบไฮเดรต - person Nayuki; 10.08.2011

หากคุณเพียงต้องการกรองตามอักขระและไม่ใช่โครงสร้างทางภาษาที่มีลำดับสูงกว่า คุณสามารถทำสิ่งเดียวกันกับภาษาส่วนใหญ่ได้ - คุณเพียงแค่ต้องมีไลบรารีนิพจน์ทั่วไปที่รองรับ Unicode คุณสามารถค้นหารายการได้ที่นี่ และกรองตามช่วงเหล่านั้น

person dfb    schedule 09.08.2011

เช่นเดียวกับที่ [A-Za-z0-9] ใช้สำหรับข้อความภาษาอังกฤษ (โดยประมาณ) ดังนั้น [\p{Script=Arabic}0-9] ก็สามารถใช้เป็นข้อความภาษาอาหรับได้ (โดยประมาณ)

person MRAB    schedule 10.08.2011