Trong quá trình triển khai các dự án, đôi khi bạn muốn xóa dấu tiếng việt của một câu văn bản bất kỳ. Chẳng hạn một bài toán đơn giản là bài toán tạo url cho bài viết từ tiêu đề của bài viết. Trong bài này mình xin chia sẻ một số cách đơn giản nhất để có thể xóa dấu tiếng việt từ một chuỗi văn bản bất kỳ nha.
Ý tưởng xóa dấu tiếng việt
Việc xóa dấu tiếng việt là không quá khó, bởi trong tiếng việt thực tế chỉ có 6 nguyên âm có thể có chứa dấu. Dưới đây là danh sách đã qua xử lý lowercase.
áàảãạăắằẳẵặâấầẩẫậ éèẻẽẹêếềểễệ óòỏõọôốồổỗộơớờởỡợ íìỉĩị úùủũụưứừửữự ýỳỷỹỵ
Như vậy, bạn chỉ việc thay thế từng hàng ở trên với ký tự không có dấu tương ứng của chúng là xong. Cách đơn giản nhất để làm việc này là sử dụng vài dòng regex.
Sau đây mình sẽ demo code xóa dấu tiếng Việt trong Python, các ngôn ngữ khác cũng với ý tưởng tương tự thôi.
Code Xóa dấu tiếng Việt
Sau đây là script xóa dấu tiếng việt ở một số ngôn ngữ mình cài đặt cũng như tham khảo.
Xóa dấu tiếng việt trong Python
Bạn có thể tự cài đặt như ý tưởng mình nói ở trên, như sau:
def no_accent_vietnamese(s): s = re.sub('[áàảãạăắằẳẵặâấầẩẫậ]', 'a', s) s = re.sub('[ÁÀẢÃẠĂẮẰẲẴẶÂẤẦẨẪẬ]', 'A', s) s = re.sub('[éèẻẽẹêếềểễệ]', 'e', s) s = re.sub('[ÉÈẺẼẸÊẾỀỂỄỆ]', 'E', s) s = re.sub('[óòỏõọôốồổỗộơớờởỡợ]', 'o', s) s = re.sub('[ÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢ]', 'O', s) s = re.sub('[íìỉĩị]', 'i', s) s = re.sub('[ÍÌỈĨỊ]', 'I', s) s = re.sub('[úùủũụưứừửữự]', 'u', s) s = re.sub('[ÚÙỦŨỤƯỨỪỬỮỰ]', 'U', s) s = re.sub('[ýỳỷỹỵ]', 'y', s) s = re.sub('[ÝỲỶỸỴ]', 'Y', s) s = re.sub('đ', 'd', s) s = re.sub('Đ', 'D', s) return s
Hoặc có cách đơn giản hơn là dùng thư viện :v
import unidecode def remove_accent(text): return unidecode.unidecode(text)
Sử dụng Javascript
// https://gist.github.com/hu2di/e80d99051529dbaa7252922baafd40e3 function change_alias(alias) { var str = alias; str = str.toLowerCase(); str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g,"a"); str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g,"e"); str = str.replace(/ì|í|ị|ỉ|ĩ/g,"i"); str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g,"o"); str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g,"u"); str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g,"y"); str = str.replace(/đ/g,"d"); str = str.replace(/!|@|%|^|*|(|)|+|=|<|>|?|/|,|.|:|;|'|"|&|#|[|]|~|$|_|`|-|{|}|||\/g," "); str = str.replace(/ + /g," "); str = str.trim(); return str; }
Xóa dấu tiếng Việt trong Java
import java.text.Normalizer; import java.util.regex.Pattern; public class NlpUtils{ public static String removeAccent(String s) { String temp = Normalizer.normalize(s, Normalizer.Form.NFD); Pattern pattern = Pattern.compile("\p{InCombiningDiacriticalMarks}+"); temp = pattern.matcher(temp).replaceAll(""); return temp.replaceAll("đ", "d"); } public static void main(String []args){ System.out.println(removeAccent("xin chào đồng chí!")); } }
Để lại một bình luận