• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tước dấu Tiếng việt đơn giản

Các mẹo vặt linh tinh không thuộc các nhóm trên

Điều hành viên: tungcan5diop, QUANITGROBEST

thanhbinhkgg
Thành viên chính thức
Thành viên chính thức
Bài viết: 23
Ngày tham gia: T.Ba 01/07/2008 10:07 pm
Has thanked: 1 time
Been thanked: 5 time

Tước dấu Tiếng việt đơn giản

Gửi bàigửi bởi thanhbinhkgg » T.Bảy 24/03/2012 2:18 pm

Tên bài viết: Tước dấu Tiếng việt
Tác giả: Sưu tầm
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: hướng dẫn thao tác với VB.NET, C#



VB.NET:

  1. Imports System.Text
  2. Imports System.Text.RegularExpressions
  3.  


  1. Public Shared Function StripDiacritics(accented As String) As String
  2.     Dim regex As New Regex("\p{IsCombiningDiacriticalMarks}+")
  3.  
  4.     Dim strFormD As String = accented.Normalize(NormalizationForm.FormD)
  5.     Return regex.Replace(strFormD, [String].Empty).Replace("đ"C, "d"C).Replace("Đ"C, "D"C)
  6. End Function
  7.  


C#:

  1. using System.Text;
  2. using System.Text.RegularExpressions;
  3.  


  1. public static string StripDiacritics(string accented)
  2.         {
  3.             Regex regex = new Regex("\p{IsCombiningDiacriticalMarks}+");
  4.  
  5.             string strFormD = accented.Normalize(NormalizationForm.FormD);
  6.             return regex.Replace(strFormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');
  7.         }
  8.  


TEST:
  1. MessageBox.Show(StripDiacritics("Dân ta phải biết Sử ta / Cái gì không biết thì tra Gu gồ"))
  2.  



Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 960
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

Re: Tước dấu Tiếng việt đơn giản

Gửi bàigửi bởi dazzlingvit » CN 25/03/2012 4:34 pm

Mình nghĩ không nên dùng công cụ Replace vì mỗi lần thực hiện Replace nó lại phải sinh ra một xâu mới, xong lại Replace... Rất tốn kém.
Giải pháp: duyệt từng ký tự và thay thế từng ký tự ;)
Dazzling V.I.T
Hãy gọi tôi là vịt :)

Hình đại diện của người dùng
thanganhpc
Thành viên trung thành
Thành viên trung thành
Bài viết: 202
Ngày tham gia: T.Tư 25/02/2009 4:04 pm
Đến từ: HCM City
Has thanked: 1 time
Been thanked: 49 time
Liên hệ:

Re: Tước dấu Tiếng việt đơn giản

Gửi bàigửi bởi thanganhpc » T.Bảy 31/03/2012 10:12 am

Đúng là trước giờ mình vẫn dùng 2 array để thay thế tối ưu đc bộ nhớ, nhưng thiết nghĩ thời đại công nghệ như bây giờ tốn thêm 1, 2Mb RAM thì đâu có thấm gì phải ko nào. Chắc phải xem xét và cải tiến hết các hàm trước giờ xài wá :(

ShinichiKudo
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 70
Ngày tham gia: T.Tư 26/03/2008 6:42 pm
Đến từ: Đăk Nông
Has thanked: 4 time
Liên hệ:

Re: Tước dấu Tiếng việt đơn giản

Gửi bàigửi bởi ShinichiKudo » CN 06/05/2012 12:33 pm

Vừa rồi trong đề tài của e cũng có phần tìm kiếm nên phải lọc bỏ dấu, e cũng nghĩ ra được 1 cách lọc dấu. Tuy nhiên thì cách đó code dài dòng và có vẻ ko hay. Cách của e là đưa tất cả các kí tự có dấu có thể gặp vào Array (VD: ó ơ ư...) và kiểm tra từng kí và thay thế nó với kí tự không dấu tương ứng (VD: ư hoặc ừ thay bằng u), trong lúc duyệt thì cũng kiểm tra xem nếu kí tự đó có hashcode < 8000000 thì tiếp tục duyệt kí tự tiếp theo (ko thực hiện replace).

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

Re: Tước dấu Tiếng việt đơn giản

Gửi bàigửi bởi VuVanHoanh » CN 06/05/2012 7:42 pm

cách này là cách của anh Vịt mà ;)
Since 2008...
One love! :x

ShinichiKudo
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 70
Ngày tham gia: T.Tư 26/03/2008 6:42 pm
Đến từ: Đăk Nông
Has thanked: 4 time
Liên hệ:

Re: Tước dấu Tiếng việt đơn giản

Gửi bàigửi bởi ShinichiKudo » CN 06/05/2012 8:45 pm

@VuVanHoanh: Chỉ là phương pháp giống thôi mà :D Còn cách thức thực hiện thì khác nhau chứ :)


Quay về “[.NET] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách