[Hỏi đáp] Regex Tokenizer cho tiếng việt


#1

Chào mọi người, hiện tại em đang muốn tìm hiểu word segmentation cho tiếng việt, đặc biệt là bước từ raw text sang token dạng thô (sử dụng regex), vậy có pattern bao quát cho tiếng việt không ạ hay cách xây dựng pattern này? đa phần các tập dữ liệu hiện tại đã xử lý bước này. Em cảm ơn.


#2

Bạn có thể cho một vài ví dụ về token dạng thô là như thế nào không?


#3

em cũng không biết có phải gọi là thô hay không in = ’ Ngoài việc dùng thép Trung Quốc thay cho vật liệu của các nước G7, thành phố cũng kiểm tra nhiều vấn đề khác của dự án.’ out = [‘Ngoài’, ‘việc’, ‘dùng’, ‘thép’, ‘Trung’, ‘Quốc’, ‘thay’, ‘cho’, ‘vật’, ‘liệu’, ‘của’, ‘các’, ‘nước’, ‘G7’, ‘,’, ‘thành’, ‘phố’, ‘cũng’, ‘kiểm’, ‘tra’, ‘nhiều’, ‘vấn’, ‘đề’, ‘khác’, ‘của’, ‘dự’, ‘án’, ‘.’] trong đó với word_segmentation thì ‘thành’, ‘phố’ phải là ‘thành_phố’

em dùng regex theo link nhưng cho tiếng việt thì không được tốt lắm.


#4

bạn muốn tự code nó ra hay dùng tool r nó tự token cho mình?


#5

em muốn sử dụng bước này để preprocess raw_text bằng regex với pattern tìm được để gắn nhãn B-W, I-W và tự thực hiện phần word_segmentation ạ


#6

Mình chưa hiểu ý bạn lắm! Ý bạn là ntn á? “Thành phố Hà Nội” --> “Thành”,“Phố”,“Hà”,“Nội” hay “thành_phố”,“Hà Nội”?


#7

ý em là “Thành phố Hà Nội” --> “Thành”,“Phố”,“Hà”,“Nội” ạ


#8

b đọc qua split trong xử lý string python nhé


#9

Có phải bạn muốn như này?

import regex
sentence = "Chào mừng bạn đến với forum machinelearningcoban.com"
words = regex.split('[^\p{Latin}]', sentence)
print(words)
>>> ['Chào', 'mừng', 'bạn', 'đến', 'với', 'forum', 'machinelearningcoban', 'com']

Hi vọng giúp ích cho bạn!


#10

mình có một vài regex , không biết dúng ý bạn k?

    specials = ["->", "\.\.\.",">>"]
    digit = "\d+([\.,_]\d+)+"
    email = "(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
    web = "^(http[s]?://)?(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+$"
    word = "\w+"
    non_word = "[^\w\s]"

#11

Mình thấy pattern của NLTK bạn đang dùng khá ổn so với yêu cầu của bạn đó chứ, mình nghĩ bạn show ra các trường hợp không tốt đề từ đó bổ sung thêm vào pattern đó.

Thông thường thì nhiều người sẽ liệt kê ra các cases cũng như edge cases. Sau đó sẽ viết các patterns cho nó. Nếu sau đó xuất hiện thêm các edge cases thì lại viết tiếp bổ sung, cứ thế (chính vì thế khó mà có một pattern bao quát).

Mặt khác, bạn cũng có thể điều chỉnh model chính để nó làm việc tốt với output từ pattern ban đang xài (mình thường thấy cái này hơn).


#12

vâng để em làm thử theo cách này ạ


#13

Mình có viết tool này trên java, bạn có thể dùng thử xem có đúng ý bạn ko nhé:

Chắc chắn là tốc độ sẽ tốt hơn nhiều so với python.


#14

Khi nào bạn nhận được câu trả lời thì tick vào ô tương ứng với câu trả lời đó nhé. Cảm ơn bạn.


#15

vâng ạ, em quên mất không tích vào :frowning: