Xử lý tách tiếng việt (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

moctriet

Thành viên thường trực
Tham gia
17/12/17
Bài viết
230
Được thích
140
Mình tình cờ ngang qua một câu hỏi trên facebook về việc tách chữ tiếng Việt ra.
Ví dụ text gốc là thể này:
Dịch vụ miễn phí của Google dịch nhanh các từ, cụm từ và trang web giữa tiếng Việt và hơn 100 ngôn ngữ khác.

Nay bị biến thành:
DịchvụmiễnphícủaGoogledịchnhanhcáctừ,cụmtừvàtrangwebgiữatiếngViệtvàhơn100ngônngữkhác.

Mình đã thử dùng regex để tách như sau:
(?<first>ph|th|tr|ch|nh|ng|kh|gh|ngh)(?!(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z|ph|th|tr|ch|nh|ng|kh|gh|ngh|\s))(?!b|c|d|đ|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)
${first}

(?<last>[^\s|n](ph|th|tr|ch|nh|ng|kh|gh|ngh))
${last}

Kết quả:
Dịch vụmiễn phícủaGoogledịch nhanh cáctừ,cụmtừvà trang webgiữatiếng Việtvàhơn100 ngôn ngữ khác.

Nhưng xử lý vẫn chưa được các dạng từ-từ có cấu trúc với các ký tự không phải ph|th|tr|ch|nh|ng|kh|gh|ngh
(phụ âm + nguyên âm) + (nguyên âm + phụ âm)
(phụ âm + nguyên âm) + (phụ âm + nguyên âm + phụ âm)

Anh chị nào có ý kiến gì để giúp tách nó ra không ạ
 
Mình tình cờ ngang qua một câu hỏi trên facebook về việc tách chữ tiếng Việt ra.
Ví dụ text gốc là thể này:
Dịch vụ miễn phí của Google dịch nhanh các từ, cụm từ và trang web giữa tiếng Việt và hơn 100 ngôn ngữ khác.

Nay bị biến thành:
DịchvụmiễnphícủaGoogledịchnhanhcáctừ,cụmtừvàtrangwebgiữatiếngViệtvàhơn100ngônngữkhác.

Mình đã thử dùng regex để tách như sau:
(?<first>ph|th|tr|ch|nh|ng|kh|gh|ngh)(?!(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z|ph|th|tr|ch|nh|ng|kh|gh|ngh|\s))(?!b|c|d|đ|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)
${first}

(?<last>[^\s|n](ph|th|tr|ch|nh|ng|kh|gh|ngh))
${last}

Kết quả:
Dịch vụmiễn phícủaGoogledịch nhanh cáctừ,cụmtừvà trang webgiữatiếng Việtvàhơn100 ngôn ngữ khác.

Nhưng xử lý vẫn chưa được các dạng từ-từ có cấu trúc với các ký tự không phải ph|th|tr|ch|nh|ng|kh|gh|ngh
(phụ âm + nguyên âm) + (nguyên âm + phụ âm)
(phụ âm + nguyên âm) + (phụ âm + nguyên âm + phụ âm)

Anh chị nào có ý kiến gì để giúp tách nó ra không ạ
Nhìn mắt thì hiểu đấy, nhưng không có quy luật nào sao tách được, giống mò kim đáy biển quá.
 
Nhìn mắt thì hiểu đấy, nhưng không có quy luật nào sao tách được, giống mò kim đáy biển quá.
Vì tiếng việt đa phần phức tạp trong nguyên âm, nên mình sẽ chỉ căn cứ theo phụ âm để tách, mấu chốt là mình viết regex chưa đúng lắm, chứ không phải không nghĩ được phương pháp

Ví dụ với cụm từ: vụmiễn phícủaGoogledịch
Mình sẽ kiểm tra các từ có cấu trúc: ABC (nguyên âm, phụ âm, nguyên âm)
A. Không phải ký tự trong số: (?!(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z|\s)
B. Ký tự trong số (b|c|d|đ|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)*
C. (?!(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z|\s)

Nó sẽ khớp: ụmi, ícủ, aGo, edị
Thì tách thành A + space +B + C thành kết quả: vụ miễn, phí của Google dịch
 
Mình tình cờ ngang qua một câu hỏi trên facebook về việc tách chữ tiếng Việt ra.
Ví dụ text gốc là thể này:
Dịch vụ miễn phí của Google dịch nhanh các từ, cụm từ và trang web giữa tiếng Việt và hơn 100 ngôn ngữ khác.

Nay bị biến thành:
DịchvụmiễnphícủaGoogledịchnhanhcáctừ,cụmtừvàtrangwebgiữatiếngViệtvàhơn100ngônngữkhác.

Mình đã thử dùng regex để tách như sau:
(?<first>ph|th|tr|ch|nh|ng|kh|gh|ngh)(?!(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z|ph|th|tr|ch|nh|ng|kh|gh|ngh|\s))(?!b|c|d|đ|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)
${first}

(?<last>[^\s|n](ph|th|tr|ch|nh|ng|kh|gh|ngh))
${last}

Kết quả:
Dịch vụmiễn phícủaGoogledịch nhanh cáctừ,cụmtừvà trang webgiữatiếng Việtvàhơn100 ngôn ngữ khác.

Nhưng xử lý vẫn chưa được các dạng từ-từ có cấu trúc với các ký tự không phải ph|th|tr|ch|nh|ng|kh|gh|ngh
(phụ âm + nguyên âm) + (nguyên âm + phụ âm)
(phụ âm + nguyên âm) + (phụ âm + nguyên âm + phụ âm)

Anh chị nào có ý kiến gì để giúp tách nó ra không ạ
Tách chính xác chắc không nổi vì điểm "mốc" phân cách giữa các từ có thể bị nhầm lẫn.
Tạm thấy "mốc" phân cách giữa các từ có thể là:
- phụ âm/ phụ âm
- nguyên âm/ nguyên âm
- phụ âm/ nguyên âm và ngược lại
Có thể lập bảng phụ âm, nguyên âm, vần, nhưng chắc không đạt 100% được
 
KínhÔTô: Kí nhôt ô, kí nhô tô, kín hôt ô, kín hô tô, kính ôt ô, kính ô tô
AnhEm: A nhem, an hem, anh em
 
KínhÔTô: Kí nhôt ô, kí nhô tô, kín hôt ô, kín hô tô, kính ôt ô, kính ô tô
AnhEm: A nhem, an hem, anh em
Vấn đề này em có nghĩ. Cơ bản tách những phần dễ, phần khó vẫn cần người check.
Cái nào có phụ âm kép do dễ nhần từ thì sẽ check cum từ sau khi tách qua từ điển.
Một số từ điển online chỉ tra được đúng cụm từ nó có trong dữ liệu, nếu crawl có kết quả xem như nó đúng, crawl sai thì tách lại.
 
Vấn đề này em có nghĩ. Cơ bản tách những phần dễ, phần khó vẫn cần người check.
Cái nào có phụ âm kép do dễ nhần từ thì sẽ check cum từ sau khi tách qua từ điển.
Một số từ điển online chỉ tra được đúng cụm từ nó có trong dữ liệu, nếu crawl có kết quả xem như nó đúng, crawl sai thì tách lại.
Cá là bài toán này làm không được!
Dù có làm được cũng không xài được!
Bởi nếu như văn bản chừng độ 100 trang, mỗi trang 100 dòng mà check bằng mắt thì có mà.. đói luôn!
 
Cá là bài toán này làm không được!
Dù có làm được cũng không xài được!
Bởi nếu như văn bản chừng độ 100 trang, mỗi trang 100 dòng mà check bằng mắt thì có mà.. đói luôn!
Kết luận cái này khó ^^. Vậy để có thời gian hơn em ngâm cứu xem, không được thì ém luôn.
 
Kết luận cái này khó ^^. Vậy để có thời gian hơn em ngâm cứu xem, không được thì ém luôn.
Thì tôi cũng chỉ nói theo quan điểm cá nhân thôi. Đương nhiên nếu bạn làm được vụ này tôi sẽ hoan hô hết mình (vì sẽ học từ bạn những giải thuật mà tôi chưa nghĩ ra)
 
Web KT

Bài viết mới nhất

Back
Top Bottom