Bỏ dấu tiếng việt python

This entry is part 27 of 29 in the series Python Không Khó

72 / 100

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
  • Code Xóa dấu tiếng Việt
    • Xóa dấu tiếng việt trong Python
    • Sử dụng Javascript
    • Xóa dấu tiếng Việt trong Java

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:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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)

    returns

Hoặc có cách đơn giản hơn là dùng thư viện :v

import unidecode

def remove_accent(text):

    returnunidecode.unidecode(text)

Sử dụng Javascript

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// https://gist.github.com/hu2di/e80d99051529dbaa7252922baafd40e3

functionchange_alias(alias){

    varstr=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;

publicclassNlpUtils{

    publicstatic StringremoveAccent(Strings){Stringtemp=Normalizer.normalize(s,Normalizer.Form.NFD); Pattern pattern=Pattern.compile("\\p{InCombiningDiacriticalMarks}+");temp=pattern.matcher(temp).replaceAll("");

    return temp.replaceAll("đ","d");}

     publicstaticvoidmain(String[]args){

        System.out.println(removeAccent("xin chào đồng chí!"));

     }

}