Tải bản đầy đủ (.pdf) (55 trang)

xây dựng phương pháp kiểm lỗi chính tả tiếng việt sử dụng mô hình từ điển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.02 MB, 55 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH

ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CẤP TRƯỜNG

XÂY DỰNG PHƯƠNG PHÁP KIỂM LỖI CHÍNH TẢ
TIẾNG VIỆT SỬ DỤNG MÔ HÌNH TỪ ĐIỂN
S

K

C

0

0

3

9
0

5
2

9
0

MÃ SỐ T2010 - 40


S KC 0 0 3 0 3 3

Tp. Hồ Chí Minh, tháng 11 năm 2010


BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM


ĐỀ TÀI NCKH CẤP TRƯỜNG

XÂY DỰNG PHƯƠNG PHÁP KIỂM LỖI CHÍNH TẢ
TIẾNG VIỆT SỬ DỤNG MÔ HÌNH TỪ ĐIỂN

MÃ SỐ: T2010-40

THUỘC NHÓM NGÀNH : KHOA HỌC KỸ THUẬT
NGƯỜI CHỦ TRÌ
: THS. MAI TUẤN KHÔI
NGƯỜI THAM GIA
:
ĐƠN VỊ
: KHOA CÔNG NGHỆ THÔNG TIN

TP. HỒ CHÍ MINH – 11/2010


1


MỤC LỤC
MỤC LỤC ..................................................................................................................1
TÓM TẮT ĐỀ TÀI ....................................................................................................3
Mục tiêu của đề tài ................................................................................................3
Những cơ sở để xây dựng đề tài............................................................................3
Phương pháp tiếp cận .............................................................................................3
Những kết quả đạt được .........................................................................................4
ĐẶT VẤN ĐỀ ...........................................................................................5

Phần 1
1.1

Đối tượng nghiên cứu ...................................................................................5

1.2

Tổng quan tình hình nghiên cứu ..................................................................5

1.2.1

Các nghiên cứu của nước ngoài về vấn đề kiểm lỗi chính tả .............5

1.2.2

Các nghiên cứu trong nước về vấn đề kiểm lỗi chính tả ..................10

1.3

Những vấn đề còn tồn tại ...........................................................................11
Các phương pháp thực hiện chi tiết........................................................13


Phần 2
2.1

Mục đích của đề tài ....................................................................................13

2.2

Phương pháp nghiên cứu ............................................................................13

2.3

Nội dung ......................................................................................................13

2.3.1

Dựa trên luật cấu tạo âm tiết tiếng Việt ............................................13

2.3.2

Sử dụng thuật toán minimum Edit Distance: .....................................16

2.3.3

Sử dụng cấu trúc Finite State Transducer ..........................................16

2.4

Kết quả đạt được ........................................................................................24


2.4.1

Tính khoa học .......................................................................................24

2.4.2

Khả năng triển khai ứng dụng vào thực tế .........................................24

2.4.3

Hiệu quả kinh tế - xã hội ....................................................................25


2

2.4.4

Sản phẩm ..............................................................................................25

2.5

Đánh giá ......................................................................................................28

2.6

Kết luận .......................................................................................................32

Phần 3

Tổng kết ...................................................................................................33


3.1

Tổng kết ......................................................................................................33

3.2

Hướng phát triển .........................................................................................33

TÀI LIỆU THAM KHẢO .........................................................................................35

MỤC LỤC BẢNG BIỂU
Bảng 2-1 Cấu trúc file XML dựa trên luật cấu tạo âm tiết ...................................15
Bảng 2-2 Thuật toán tách câu .................................................................................22
Bảng 2-3 Thuật toán thay thế ..................................................................................23
Bảng 2-4 Quy trình kiểm tra chính tả .....................................................................24
Bảng 2-5 Các nút chức năng trong chương trình ....................................................27
Bảng 2-6 Đánh giá các chức năng đạt được ...........................................................28
Bảng 2-7 So sánh với VietSpell ..............................................................................32

MỤC LỤC HÌNH
Hình 1-1 Sơ đồ dò tìm lỗi bằng ma trận tiếng nhầm lẫn .........................................8
Hình 2-1 Giao diện chính .........................................................................................26
Hình 2-2 Cửa sổ tuỳ chọn ........................................................................................27
Hình 2-3 Cửa sổ danh sách từ nước ngoài ..............................................................28


3

TÓM TẮT ĐỀ TÀI

Mục tiêu của đề tài
Hiện nay đã có một số phần mềm kiểm tra chính tả tiếng Việt đã ra mắt, tuy
nhiên các nhà cung cấp đã không thể trụ được trên thò trường do các sản phẩm ù chưa
thực sự đạt được hiệu quả như người dùng mong muốn.
Mục tiêu của tác giả là xây dựng một phần mềm kiểm tra chính tả tiếng Việt có
khả năng phát hiện lỗi chính tả tốt và cung cấp phục vụ cộng đồng.
Những cơ sở để xây dựng đề tài
Ở Việt Nam, trung bình số người sử dụng máy tính và truy cập internet tăng đột
biến trong các năm gần đây. Các văn bản viết tay ngày càng ít đi và thay vào đó là các
tập tin văn bản được lưu trữ trên ổ đóa cứng.
C# là ngôn ngữ lập trình mà tác giả sử dụng để phát triển ứng dụng minh hoạ trên
nền tảng .Net Framework 2.0. Môi trường soạn thảo văn bản được sử dụng là Microsoft
Word 2007. Trong quá trình xây dựng, tác giả cũng nhận được rất nhiều ý kiến đóng
góp cũng như hỗ trợ từ phía những người quan tâm đến vấn đề chính tả tiếng Việt.
Phương pháp tiếp cận
Phương pháp tiếp cận của tác giả là dựa trên tư tưởng vét cạn do tác giả đề xuất.
Tức là từ một từ được xem là đúng chính tả, tác giả sẽ phát sinh và lưu trữ lại tất cả các
trường hợp bò sai chính tả có thể có của từ đó. Sau này khi gặp một từ có dạng sai tương
tự như trường hợp đã lưu trữ, chương trình sẽ báo là có lỗi và đưa ra gợi ý là từ gốc của
từ đó.
Bộ từ điển được tạo ra dựa trên quy trình tạo từ điển do giáo viên hướng dẫn đưa
ra, quy trình đó cụ thể sẽ được trình bày chi tiết ở chương 4 các phương pháp thực hiện
chi tiết.
Chương trình sử dụng một số thư viện có sẵn của bộ Visual Studio.Net 2005 và
thêm vào các xử lý của tác giả để thực hiện các công việc theo quy trình kiểm lỗi chính
tả do tác giả đề xuất, chi tiết cũng được trình bày ở Phần 2 “các phương pháp thực hiện
chi tiết”.


4


Những kết quả đạt được
Tác giả đã xây dựng xong bộ từ điển theo cấu trúc Finite State Recognition dành
cho từ đơn có nghóa, từ đơn tham gia cấu tạo từ ghép, từ ghép có chiều dài hai, ba,
bốn,... n chữ. Ngoài ra, bộ từ điển cũng cho biết một từ không có trong từ điển sẽ là
trường hợp sai của từ nào, điều này sẽ giúp cho việc cài đặt thuận lợi hơn trong việc
gợi ý cho người dùng sửa lỗi khi gặp trường hợp sai.
Dựa trên bộ từ điển xây dựng được, nhóm đã xây dựng một ứng dụng có thể nhúng
vào MSWord để kiểm tra lỗi chính tả. Chương trình có những chức năng sau đây:


Đưa ra gợi ý trên mỗi từ mà chương trình nghi ngờ sai lỗi chính tả, người
dùng có quyền chấp nhận sửa từ hoặc bỏ qua từ đó.



Nếu gặp một từ nước ngoài hoặc viết tắt, chương trình sẽ vẫn nghi ngờ sai
nếu không có trong thư viện từ nước ngoài, người dùng có quyền thêm từ
này vào thư viện từ nước ngoài để bỏ qua nếu gặp từ này lần tiếp theo.



Cũng tương tự với các thuật ngữ của các chuyên ngành khác nhau, nếu các
từ không thuộc từ điển (của chương trình), chương trình sẽ làm tương tự như
đối với một từ nước ngoài.



Chương trình sẽ không phải xây dựng lại khi có thêm các từ mới được bổ
sung vào từ điển. Do vậy sau một thời gian thử nghiệm, chương trình sẽ cập

nhật thêm các từ không có trong từ điển (của chương trình) để chương trình
có thể bắt lỗi tốt hơn.



Chương trình bắt và sửa được những lỗi về vật lý – những lỗi sai chính tả
hoàn toàn, ví dụ chuwowng – và đưa ra từ gợi ý chính xác hoặc các gần
đúng nhất để người dùng có thể dựa vào đó sửa cho phù hợp.



Chương trình bắt được các lỗi về logic – lỗi mà nếu xét từng từ đơn thì nó
đúng chính tả, nhưng khi đi chung với nhau lại sai chính tả, ví dụ trương
chình – mà dữ liệu đã được lưu trữ cũng như một số trường hợp gần đúng
mà dữ liệu chưa có lưu trữ.



Chương trình có thể bổ sung ngữ liệu và thay thế ngữ liệu một cách độc lập
hoàn toàn với chương trình.



Độ dài của một cụm từ chương trình có thể bắt và sửa lỗi là không giới hạn.



Sửa được hết toàn bộ các lỗi trên mức từ và các nhập nhằng trong cả 59
trường hợp sai lỗi chính tả trong cuốn từ điển chính tả tiếng Việt của Giáo
sư Nguyễn Như Ý đã đề cập đến và một số lỗi thường gặp khác.



5

Phần 1 ĐẶT VẤN ĐỀ
1.1

Đối tượng nghiên cứu
Máy vi tính đã đem lại những lợi ích to lớn cho xã hội loài người. Ở Việt Nam,

trung bình số người sử dụng máy tính hiện nay rất lớn và các văn bản viết tay ngày
càng ít đi và thay vào đó là các tập tin văn bản được lưu trữ trên ổ đóa cứng. Với việc
bùng nổ văn bản điện tử như vậy, thì vấn đề sai lỗi chính tả trong văn bản là một điều
khó tránh khỏi. Các dạng văn bản bò sai lỗi chính tả và phương pháp để sửa lỗi trong
các dạng văn bản đó chính là đối tượng nghiên cứu của đề tài này.
1.2
1.2.1

Tổng quan tình hình nghiên cứu
Các nghiên cứu của nước ngoài về vấn đề kiểm lỗi chính tả

1.2.1.1 Phương pháp kiểm lỗi dựa trên ngữ cảnh
Một trong những đầu mối để phân biệt một từ với những từ nhập nhằng với nó là
các từ xung quanh nó trong câu. Ví dụ: khi đang xem xét để chọn lựa giữa desert và
dessert, nếu như có các từ như arid, sand, sun, … gần đó, ta sẽ chọn desert, còn nếu như
gặp các từ như chocolate, delicious, … gần đó, ta chọn dessert. Phương pháp kiểm lỗi
dựa trên ngữ cảnh[12] được Golding xây dựng dựa trên nhận xét này. Trong giai đoạn
học, với mỗi từ thường bò viết sai chính tả, hệ thống sẽ ghi nhớ những từ thường xuất
hiện xung quanh nó trong ngữ liệu. Khi chạy thực tế
1.2.1.2 Phương pháp kiểm lỗi dựa trên các phép lai Bayes

Phương pháp kiểm lỗi dựa trên ngữ cảnh[12] rất tốt trong việc phát hiện các
nguyên tắc chung nhất phụ thuộc vào những từ lân cận, nhưng không quan tâm đến trật
tự của chúng. Trong trường hợp đó, các phương pháp đặc trưng lân cận tỏ ra rất thích
hợp để rút ra các quy luật về trật tự.
Một đặc trưng lân cận là một mẫu các yếu tố về cú pháp xung quanh từ đang xét.
Có hai đặc trưng thường được sử dụng trong các phương pháp này, đó là nhãn từ loại và
từ lân cận.


6

Phương pháp lai Bayes[11] được thực hiện theo cách thức tương tự với phương
pháp kiểm lỗi dựa trên ngữ cảnh[12]. Ý tưởng chính ở đây là phân biệt những từ dễ bò
dùng nhầm lẫn với nhau dựa vào các đặc trưng lân cận của chúng. Mỗi đặc trưng lân
cận cung cấp vài dấu hiệu với khả năng quyết đònh khác nhau cho những từ trong tập
nhầm lẫn. Những dấu hiệu này được kết hợp với nhau và tính toán theo một luật quyết
đònh (thường là Bayes). Sau cùng, từ nào có độ hợp lý cao nhất sẽ được chọn.
Tuy nhiên, phương pháp lai Bayes cũng có nhược điểm, đó là khi một từ có các
đặc trưng mâu thuẫn hoặc hàm chứa nhau, gọi là xung đột. Để phương pháp này hoạt
động tốt, các đặc trưng xung đột với nhau cần phải được phát hiện và loại bỏ. Hiện nay,
ngoài heuristic, vẫn chưa có một phương pháp hoàn chỉnh để giải quyết vấn đề này.
1.2.1.3 Phương pháp kiểm lỗi dựa trên sự sàng lọc
Phương pháp sàng lọc[10] là sự kết hợp của hai phương pháp kiểm lỗi dựa trên
ngữ cảnh[12] và lai Bayes[11] để tận dụng ưu điểm của cả hai phương pháp này: kiểm
lỗi dựa trên ngữ cảnh[12] sẽ rút ra các nguyên tắc tốt nhất theo cách độc lập với trật tự
từ, còn lai Bayes[11] được dùng để rút ra các nguyên tắc phụ thuộc vào trật tự.
Phương pháp này đòi hỏi phải xây dựng một danh sách rất lớn các đặc trưng - ở
đây là các đặc tính ngữ cảnh và lai Bayes. Những đặc trưng được sắp xếp theo khả
năng quyết đònh giảm dần, trong đó khả năng quyết đònh của mỗi đặc trưng phản ánh
độ tin cậy của nó trong việc ra quyết đònh. Một từ nhập nhằng sẽ được phân loại bằng

cách duyệt qua danh sách và so khớp từng đặc trưng với ngữ cảnh. Đặc trưng phù hợp
đầu tiên sẽ được dùng để phân loại từ đang xét.
Vì danh sách quyết đònh đưa ra lời giải chỉ dựa vào một đặc trưng mạnh nhất,
hiệu suất của nó phần lớn phụ thuộc vào cách xác đònh khả năng quyết đònh cho những
đặc trưng. Đây chính là nhược điểm của phương pháp này bởi vì việc tìm ra một công
thức đánh giá tổng quát là rất khó.
Do đó, phương pháp sàng lọc[10] có thể được cải tiến bằng cách dùng nhiều đặc
trưng hơn. Theo đó, để lựa chọn các từ tốt nhất, hệ thống sẽ duyệt qua toàn bộ danh
sách đặc trưng, so sánh từng đặc trưng với ngữ cảnh, rồi kết hợp chúng để đưa ra lời


7

giải sau cùng. Việc kết hợp các đặc trưng có thể được thực hiện nhờ vào một bộ phân
loại. Ví dụ như là Bayes.
1.2.1.4 Mô hình CInsunSpell cho tiếng Hoa
Mô hình kiểm lỗi này có tên là CInsunSpell[13] được đề xuất bởi Li Jianhua và
Wang Xiaolong, là sự kết hợp giữa Trigram tiếng, phương pháp ước lượng Bayes và
phân phối trọng tự động, được dùng cho sửa lỗi chính tả tiếng Hoa.
Trigram được dùng trong bước kiểm lỗi. Theo đó, một cửa sổ Trigram kích thước
5 được dùng để đánh giá mối liên kết giữa các tiếng với nhau. Cửa sổ Trigram thực ra
là một chuỗi con, với tiếng cần xét ở trung tâm, và 4 tiếng lân cận ở xung quanh (2
tiếng liền trước và 2 tiếng liền sau). Tiếng trung tâm được xem là sai chính tả khi hai
liên kết trước và sau nó đều yếu.

Liên kết này được xem là yếu nếu nó có giá trò nhỏ

hơn một giá trò ngưỡng.
Nhược điểm của mô hình n-gram là dữ liệu quá thưa thớt, dẫn đến các xác suất ngram sẽ rất thấp (thường có giá trò bằng 0). Để khắc phục, các tác giả của CInsunSpell
dùng thêm bi-gram cùng với làm mòn bằng cách mở rộng cửa sổ bi-gram từ 3 tiếng

thành 4 tiếng về phía sau để nâng cao hiệu suất phát hiện lỗi.
Bộ phân loại Bayes được dùng trong bước sửa lỗi. Ý tưởng chính là tìm chuỗi
thích hợp nhất (có xác suất cao nhất) từ chuỗi đầu vào để làm phương án sửa lỗi. Để
đánh giá sự phù hợp của chuỗi sửa lỗi, Bayes được kết hợp với phương pháp phân phối
trọng số tự động dựa trên số phép biến đổi ngắn nhất (Minimum Edit Distance[16]) để
biến chuỗi đầu vào thành chuỗi sửa lỗi.
Theo thử nghiệm của tác giả, CInsunSpell có tỷ lệ phát hiện lỗi là khoảng 60%,
tỷ lệ lỗi tích cực khoảng 10%. Hai giá trò này thay đổi tuỳ thuộc vào các ngưỡng được
dùng trong hệ thống.
1.2.1.5 Phương pháp kiểm lỗi dựa trên ngữ cảnh cho tiếng Nhật
Phương pháp của Nagata[15] được áp dụng đầu tiên cho các hệ thống nhận dạng
chữ viết (OCR). Tuy nhiên nó cũng có thể được dùng để sửa các lỗi chính tả do con
người gây ra.


8

Phương pháp này gồm hai giai đoạn: trong giai đoạn thứ nhất, câu nhập vào được
chia thành nhiều chuỗi tiếng, với điều kiện mỗi chuỗi tiếng tạo thành một từ có trong từ
điển hoặc gần giống với ít nhất một từ nào đó có trong từ điển. Trong giai đoạn thứ hai,
bằng các phương pháp thống kê, n chuỗi từ tốt nhất (được tạo thành từ những ‚từ‛ đã
có ở giai đoạn trước) được chọn làm ứng viên sửa lỗi. Dưới đây là ví dụ minh hoạ cho
cách tiếp cận này.
Câu đầu vào:
Tôi

lam

việc




hợp

tát

xả

họp

tác

sả

tạt



mua

bán

Ma trận tiếng nhầm lẫn
lám
làm

báng

lãm
lạm


Hình 1-1 Sơ đồ dò tìm lỗi bằng ma trận tiếng nhầm lẫn
Để có thể chia chuỗi đầu vào thành các chuỗi con một cách hợp lý, hệ thống dùng
hai phương pháp, đó là mô hình ngôn ngữ thống kê và thuật toán Forward-DB
Backward A* để tách từ.
Ngôn ngữ thống kê được dùng để tính xác suất kết hợp của chỗi con và chuỗi
nhãn từ loại. Xác suất kết hợp này thực ra là tích xác suất xuất hiện của chuỗi con với
xác suất xuất hiện của chuỗi nhãn trong ngữ liệu huấn luyện. Sau cùng, thuật toán


9

Forward-DB Backward A*[14] được dùng để đánh giá các xác suất kết hợp đó, sau
cùng tìm ra cách kết hợp có xác suất lớn nhất làm lời giải cho bài toán tách từ.
Theo đánh giá của tác giả, phương pháp này giúp cải thiện độ chính xác của hệ
OCR từ 90% đến 96%, hiệu suất tách từ là 93%.
1.2.1.6 Đánh giá chung cho các phương pháp trên
Các phương pháp kiểm lỗi dựa trên ngữ cảnh[12], lai Bayes[11] và phương pháp
sàng lọc[10] đã được ứng dụng thành công cho các ngôn ngữ châu Âu như tiếng Anh,
tiếng Pháp, tiếng Tây Ban Nha[2], … Tuy nhiên, để áp dụng các mô hình đó cho tiếng
Việt, văn bản đầu vào cần phải được tách từ bằng một mô hình tách từ mờ. Mô hình
tách từ mờ không tốt sẽ làm giảm đáng kể hiệu suất chung của toàn hệ thống. Cho đến
nay, vẫn chưa có một mô hình tách từ mờ hoàn chỉnh cho tiếng Việt[2]. Ngoài ra, hầu
hết các phương pháp cho tiếng Anh đều đòi hỏi ngữ liệu đã được gán nhãn từ loại,
trong khi cho đến nay vẫn chưa có kho ngữ liệu tiếng Việt thoã mãn yêu cầu này.
Thêm vào đó, các phương pháp như phương pháp sàng lọc[10] và Bayes[11] đòi hỏi hệ
thống phải thực hiện nhiều thao tác xử lý khá phức tạp để nhận ra từ sai chính tả nên
cũng khó được áp dụng vào thực tế. Do đó, chúng tôi chỉ xem những mô hình của
Golding[12], [11], [10] như là nguồn tài liệu tham khảo thêm mà không áp dụng.
Với hệ thống CInsunSpell[13] cho kiểm lỗi tiếng Hoa, các tác giả đã dùng cửa sổ

Bigram và Trigram ở mức tiếng để dò tìm tiếng sai chính tả. Đó là cách tiếp cận rất
phù hợp cho tiếng Việt vì không cần phải tách từ. Bên cạnh đó, mô hình này cũng còn
có những ưu điểm khác. Ưu điểm đầu tiên là tính đơn giản trong cài đặt cũng như trong
quá trình xử lý. Ưu điểm thứ hai cũng là ưu điểm quan trọng nhất, CInsunSpell không
đòi hỏi kho ngữ liệu đã được huấn luyện đã được tách từ hay gán nhãn từ loại mà chỉ
cần một kho ngữ liệu đúng chính tả. Với những đặc điểm đó, việc áp dụng CInsunSpell
cho tiếng Việt là rất khả thi và thực tế đã được áp dụng trong nghiên cứu[2] và cũng đã
thu được những kết quả đáng ghi nhận trong sản phẩm VCLSpell.
Mô hình sửa lỗi chính tả của Nagata cho tiếng Nhật[15], về mặt lý thuyết cũng có
thể áp dụng ngay cho tiếng Việt mà không cần sửa đổi nhiều vì Nhật-Việt đều là các
ngôn ngữ đơn lập. Tuy nhiên, cũng như một số mô hình dùng cho tiếng Anh, mô hình


10

này cần có kho ngữ liệu đã được tách từ và gán nhãn từ loại, đó là điều chưa thể đáp
ứng được. Bên cạnh đó, việc dò tìm phương án sửa lỗi bằng ma trận tiếng nhầm lẫn, khi
áp dụng vào tiếng Việt, sẽ phải đương đầu với một thử thách mới: bùng nổ tổ hợp, nhất
là trong thực tế, các lỗi sai khi nhập liệu rất đa dạng nên tập nhầm lẫn khá lớn. Do đó,
việc áp dụng mô hình này hiện nay là rất khó khăn.
1.2.2

Các nghiên cứu trong nước về vấn đề kiểm lỗi chính tả
Kiểm lỗi chính tả tiếng là một bài toán khó, nhất là kiểm lỗi chính tả cho các

ngôn ngữ đơn lập như tiếng Việt, tiếng Hoa[4].
Trước khi tôi thực hiện đề tài này, đã có một số công trình nghiên cứu về kiểm lỗi
chính tả tiếng Việt với các hướng tiếp cận khác nhau. Tuy nhiên, ngoài Vietspell và
Chính Tả Cú Mèo, thì các kết quả nghiên cứu còn lại chưa đưa ra sản phẩm ứng dụng
vào thực tế.

1.2.2.1 Kiểm lỗi chính tả bằng mô hình lưới từ
Nghiên cứu[3] đã trình bày mô hình lưới từ cho kiểm lỗi chính tả tiếng Việt. Mô
hình này hoạt động dựa trên việc tách từ mờ, sau đó đánh giá các cách tách từ khác
nhau để tìm ra cách tách từ có vẻ hợp lý nhất làm câu sửa lỗi. Trong đó, lưới từ thực
chất là một dạng cấu trúc dữ liệu đặc biệt, giống như một đồ thò thưa có hướng không
chu trình. Cấu trúc dữ liệu này giúp cho việc tách từ mờ và đánh giá các cách tách từ
được dễ dàng và nhanh chóng, bởi vì có thể áp dụng các thuật toán tìm đường đi trên
đồ thò với nó.
Lưới từ là một mô hình mạnh và chặt chẽ. Về lý thuyết, nếu được cài đặt và huấn
luyện hoàn chỉnh thì hiệu suất của nó sẽ rất khả quan.
Tuy nhiên mô hình này có một nhược điểm rất khó khắc phục đó là việc bùng nổ
tổ hợp sẽ khiến cho việc cài đặt và tốc độ xử lý của chương trình gặp khó khăn. Từ đó
làm cho lưu trữ cũng là một vấn đề lớn với phương pháp này.
Mô hình này còn sử dụng N-gram để ước lượng các giá trò cần thiết. Tuy nhiên,
do ngữ liệu huấn luyện chưa thực sự tốt nên việc ước lượng chưa đạt kết quả như ý


11

muốn. Cách tổ chức dữ liệu lưu trữ N-gram cũng chưa tốt làm tốn nhiều không gian lưu
trữ các N-gram. Điều này làm giảm tính thực tế của chương trình.
Như vậy, bên cạnh những ưu điểm, mô hình lưới từ vẫn còn những nhược điểm
nhất đònh. Nếu khắc phục được những nhược điểm đó, lưới từ sẽ trở thành phương pháp
hữu hiệu để giải quyết bài toán kiểm lỗi chính tả.
1.2.2.2 Kiểm lỗi chính tả bằng mô hình N-gram kết hợp với phương pháp ước lượng
Bayes để tính xác suất N-gram và các mô hình tách từ
Phương pháp này áp dụng mô hình CInsunSpell[4] của tiếng Hoa vào tiếng Việt,
là một phương pháp tốt, bắt lỗi với hiệu suất có thể chấp nhận được. Tuy nhiên phương
pháp này còn một số hạn chế sau:



Không bắt và sửa được các trường hợp sai trên mức chữ do bộ gõ gây ra, vấn đề

lựa chọn và sắp xếp các ứng viên lỗi còn chưa hợp lý[2].


Bắt lỗi tốt trên Bigram và kết hợp với Trigram nên về bản chất của phương pháp,

nếu n-gram có n>=4 thì dữ liệu để lưu trữ n-gram là vô cùng lớn.


Thống kê trên kho ngữ liệu thực tế nên sẽ tồn tại: kho dữ liệu dù lớn nhưng vẫn

chưa thực sự đầy đủ, trong kho dữ liệu tồn tại nguy cơ sai lỗi chính tả, v.v…


Do bản chất của N-gram nên nếu như từ bò sai cả 2 chữ thì khả năng đưa gợi ý

chính xác là không xác nhận được.
1.3

Những vấn đề còn tồn tại
Tóm lại, mỗi phương án giải quyết cho vấn đề kiểm lỗi chính tả trước chúng tôi

đều đã có nhiều đóng góp tích cực cho bài toán kiểm lỗi chính tả, tuy nhiên các nghiên
cứu này chưa đạt được sự hoàn thiện cần thiết và đôi khi quá thiên về lý thuyết mà
chưa đánh giá đến khả năng ứng dụng thực sự nên các nghiên cứu này chưa đưa ra
được sản phẩm cụ thể để ứng dụng vào thực tế được.
Sau đây là những vấn đề mà những nghiên cứu trước chúng tôi hoặc là thiếu hoặc
là chưa đề cập đến:



Mỗi nghiên cứu đều chưa lường hết được các lỗi trên mức chữ và lỗi trên từ ghép.



Không đề cập đến việc giải quyết lỗi trên các từ dài.



Chưa giải quyết được hết các luật về lỗi chính tả do các nhà ngôn ngữ học đưa ra.


12



Chửa ủửa ra chửụng trỡnh aựp duùng vaứo thửùc teỏ.


13

Phần 2
2.1

Các phương pháp thực hiện chi tiết

Mục đích của đề tài

Đề xuất một giải pháp sử dụng từ điển trong việc kiểm lỗi chính tả tiếng Việt. Xây

dựng bộ dữ liệu đủ lớn để phương pháp kiểm lỗi này có thể vận hành tốt.
2.2

Phương pháp nghiên cứu
Sử dụng các quy tắc về âm tiết trong tiếng Việt, kết hợp với các trường hợp gây

lỗi chính tả được các nhà ngôn ngữ học tổng kết lại trong các tài liệu [2], [6], [7], [9] để
từ đó đưa ra giải pháp kiểm lỗi.
Đối với các lỗi chính tả trên mức tiếng thì sử dụng mô hình kiểm lỗi sử dụng cấu
trúc Finite State Transducer do tác giả Oflazer [8] đã áp dụng thành công trong việc
kiểm lỗi chính tả trong tiếng Anh
Đối với các lỗi chính tả ở mức từ ghép, tác giả đề xuất một mô hình kiểm lỗi mới
dựa trên các quy tác về âm tiết trong tiếng Việt, từ đó phát sinh ra các dự đoán lỗi
chính tả. Việc kiểm lỗi chính tả sẽ được dựa trên phương pháp so khớp cụm từ với các
cụm từ được dự đoán là lỗi chính tả này, từ đó đưa ra từ gợi ý tương ứng.
2.3
2.3.1

Nội dung
Dựa trên luật cấu tạo âm tiết tiếng Việt
Dựa vào đặc điểm của tiếng Việt, nếu ta loại trừ các từ việt hoá từ các ngôn ngữ

khác, chúng ta sẽ nhận thấy trong bất kỳ một từ tiếng Việt nào cũng có sự tham gia của
ít nhất 1 nguyên âm (a, â, ă, ô, o, ơ, u, ư, y, i, ê, e) cộng với các phụ âm đầu (c, h, k, l,
m, g, n, r, t, q, p, s, d, x, v, b) và các phụ âm cuối (c, p, t, n, m, ch, ng).
Dựa vào cấu trúc này, ta sẽ liệt kê được tất cả các trường hợp có thể thành lập
nên cụm nguyên âm ở giữa một từ bất kỳ, và với mỗi cụm như vậy ta sẽ liệt kê được có
bao nhiêu cụm phụ âm đầu có thể ghép vào phía trước nó và bao nhiêu cụm phụ âm
đuôi có thể ghép vào phía sau nó. Kết quả thu được là một file XML có cấu trúc như
sau:



14

<?xml version="1.0" encoding="utf-8"?>
<Root>
<DSAmDau>
<AmDau>b</AmDau>
<AmDau>c</AmDau>
<AmDau>ch</AmDau>
<AmDau>d</AmDau>
<AmDau>ñ</AmDau>
<AmDau>g</AmDau>
<AmDau>gh</AmDau>
<AmDau>h</AmDau>
<AmDau>k</AmDau>
<AmDau>kh</AmDau>
<AmDau>l</AmDau>
<AmDau>m</AmDau>
<AmDau>n</AmDau>
<AmDau>ng</AmDau>
<AmDau>ngh</AmDau>
<AmDau>nh</AmDau>
<AmDau>p</AmDau>
<AmDau>ph</AmDau>
<AmDau>q</AmDau>
<AmDau>r</AmDau>
<AmDau>s</AmDau>
<AmDau>t</AmDau>
<AmDau>th</AmDau>

<AmDau>tr</AmDau>
<AmDau>v</AmDau>
<AmDau>x</AmDau>
<AmDau>
</AmDau>
</DSAmDau>
<DSAmCuoi>
<AmCuoi>c</AmCuoi>
<AmCuoi>ch</AmCuoi>
<AmCuoi>m</AmCuoi>
<AmCuoi>n</AmCuoi>
<AmCuoi>ng</AmCuoi>
<AmCuoi>nh</AmCuoi>
<AmCuoi>p</AmCuoi>
<AmCuoi>t</AmCuoi>


15

<AmCuoi>
</AmCuoi>
</DSAmCuoi>
<DSCTTuDon>
<CTTuDon>
<ChuoiAmDau>001000100000010000010000000</ChuoiAmDau>
<ToHopAmGiua>a</ToHopAmGiua>
<ChuoiAmCuoi>001001000</ChuoiAmCuoi>
</CTTuDon>
<CTTuDon>
<ChuoiAmDau>001001110001010000010000000</ChuoiAmDau>

<ToHopAmGiua>á</ToHopAmGiua>
<ChuoiAmCuoi>001101000</ChuoiAmCuoi>
</CTTuDon>
<CTTuDon>
<ChuoiAmDau>000010101011010010010011010</ChuoiAmDau>
<ToHopAmGiua>e</ToHopAmGiua>
<ChuoiAmCuoi>110001101</ChuoiAmCuoi>
</CTTuDon>
<CTTuDon>
<ChuoiAmDau>001000100100010010010000000</ChuoiAmDau>
<ToHopAmGiua>ẻ</ToHopAmGiua>
<ChuoiAmCuoi>101001100</ChuoiAmCuoi>
</CTTuDon>
<CTTuDon>
<ChuoiAmDau>001100101010010001010001000</ChuoiAmDau>
<ToHopAmGiua>iêu</ToHopAmGiua>
<ChuoiAmCuoi>101101011</ChuoiAmCuoi>
</CTTuDon>
<CTTuDon>
<ChuoiAmDau>001100101010010001010001000</ChuoiAmDau>
<ToHopAmGiua>ỉu</ToHopAmGiua>
<ChuoiAmCuoi>101101011</ChuoiAmCuoi>
</CTTuDon>
</DSCTTuDon>
</Root>
Bảng 2-1 Cấu trúc file XML dựa trên luật cấu tạo âm tiết
Với phương án này, ta sẽ không xử lý được một số trường hợp sai chính tả như:
xiêng,... Nếu dùng phương pháp liệt kê để loại trừ các trường hợp sai này thì cũng rất



16

khó vì số lượng từ đơn trong tiếng Việt là rất lớn. Hơn nữa, phương án này chỉ có thể áp
dụng với từ đơn.
Kết luận: phương pháp này không đem lại hiệu quả cho việc kiểm tra và sửa lỗi
chính tả, tuy nhiên nó là tiền đề giúp cho công việc kiểm tra, tách từ, nhân từ về sau trở
nên thuận lợi và dễ dàng hơn rất nhiều.
2.3.2

Sử dụng thuật toán minimum Edit Distance:
Phương pháp này cũng là một nhánh của phương pháp sử dụng cấu trúc Finite

State Transducer phía dưới, tuy nhiên nó là một hướng tiếp cận không tốt và đã không
giải quyết được bài toán như mong muốn. Tuy nhiên nhóm vẫn trình bày để các nhóm
nghiên cứu sau này tránh đi vào hướng tiếp cận này.
Phương pháp này lưu trữ các từ đơn theo cấu trúc Finite State Transducer bên
dưới, và việc kiểm lỗi vật lý của từ đơn sau đó đưa ra các gợi ý là rất tốt. Tuy nhiên,
khi nhóm sử dụng để cho khoảng cách của từng từ đơn với từng từ đơn tương ứng trong
một từ ghép thì kết quả đưa ra quá nhiều gợi ý sai, và từ đó nhóm đã ngừng việc tiếp
cận theo hướng này.
2.3.3

Sử dụng cấu trúc Finite State Transducer

2.3.3.1 Xây dựng bộ từ điển
Mỗi từ trong từ điển tiếng Việt sẽ được lưu lại theo dạng một đồ thò có hướng.
Theo chiều từ đầu từ đến cuối từ sẽ bao gồm các cung nối giữa hai ký tự liền kề nhau.
Như vậy một từ gồm n ký tự (gồm cả khoảng trắng nếu là từ ghép) sẽ có n+1 cung.
Nhãn của cung xuất phát một từ bao giờ cũng là 0 và kết thúc là 99.
Với phương án này tốc độ kiểm tra một từ sẽ rất cao, công việc chúng ta phải

làm là duyệt qua từng ký tự trong từ và tìm cung nối giữa nó và ký tự trước đó. Ngược
lại nhược điểm của cách làm này là sự tổn phí về bộ nhớ. Như vậy nếu với một máy có
cấu hình thấp, việc thực thi chương trình sẽ gặp phải khó khăn khi nạp chương trình vào
bộ nhớ, nhưng chú ý rằng khi chạy chương trình vẫn đảm bảo đạt tốc độ cao. Rất may,
vào thời điểm hiện nay tất cả các máy để bàn đều có cấu hình khá cao không những


17

đáp ứng tốt nhu cầu soạn thảo văn bản mà còn đáp ứng được cả những ứng dụng lớn
hơn. Do vậy vấn đề về bộ nhớ coi như đã được giải quyết.
Tạm coi như vấn đề kiểm tra 1 từ đúng hay sai thông qua bộ từ điển (automat)
đã hoàn thành. Vấn đề lúc này là với một từ sai ta sẽ đưa ra gợi ý sao cho gần đúng
nhất với ngữ cảnh của văn bản. Dựa trên ý tưởng chủ đạo sửa từ dựa trên từ, do vậy ta
sẽ căn cứ trên từ sai để đưa ra từ gần đúng nhất. Các trường hợp mà bộ từ điển đưa ra
với 1 từ sai đó là :
Trường hợp 1: Sai sót do bộ gõ tiếng Việt như: gõ dư ký tự bỏ dấu, . . .
Trường hợp 2: Sai do người dùng nhầm lẫn giữa các phụ âm đầu, cụm nguyên âm và
các phụ âm cuối.
Còn lại, nếu một từ hoàn toàn sai, không nằm trong phạm vi các trường hợp sai
trên, chương trình sẽ đưa ra một danh sách các từ gần đúng với từ đó nhất dựa vào thuật
toán Minimum Edit Distance.
Với trường hợp 1 : sai do người dùng gõ dấu nhờ chương trình hỗ trợ (vietkey hoặc
unikey) lỗi thường gặp nhất là ký tự dùng để bỏ dấu thường được gõ 2 lần, và như vậy
dấu đã có sẽ mất đi và thay vào đó là ký tự dùng để bỏ dấu xuất hiện 2 lần trong từ vừa
gõ. Một số phiên bản cũ của Vietkey và Unikey, dấu có thể còn đặt sai vò trí, thậm chí
có thể xuất hiện hai dấu giống nhau trong cùng một từ.
Vd : với từ ‚sống‛ sẽ rất dễ được gõ thành ‚soongs‛ hoặc ‚sóngo‛. Cụ thể là trong từ
‚sống‛ hai ký tự dùng để bỏ dấu là ‘s’ và ‘o’. Nếu 1 trong hai ký tự này được gõ sau
khi đã có nguyên âm thì dấu sẽ đặt trên nguyên âm phù hợp, xong nếu 1 trong 2 ký tự

này được gõ thêm 1 lần nữa thì dấu vừa đặt sẽ mất đi và được thay thế bằng 1 trong 2
ký tự vừa nhập.
Như vậy, với 1 từ đơn ta phải tính toán ra tất cả các trường hợp có thể sai do
việc gõ dấu gây nên. Các trường hợp gõ sai do người dùng sử dụng cách gõ VNI và
TELEX là tương tự nhau. Bằng cách lấy tất cả các ký tự dùng để hỗ trợ bỏ dấu cho từ


18

đơn sau đó hoán vò các ký tự này với điều kiện các ký tự này phải nằm sau các ký tự
nguyên âm mà nó đặt dấu trên đó.
Ví dụ : bò | bo2 | bof
Với từ ‚bò‛ ta có các trường hợp sai khi gõ theo kiểu VNI là ‚bo2‛ và theo TELEX là
‚bof‛
Một vấn đề khác nữa là dấu được đặt sai vò trí. Nếu tuân theo quy tắc đặt dấu
tiếng Việt thì dấu của từ không phải đặt ở vò trí nào cho đẹp mắt mà bắt buộc phải đặt
đúng vò trí đã quy đònh (ví dụ : không được viết ‘hóa’ mà phải viết là ‘hoá’). Với vấn
đề này, nhóm giải quyết bằng cách liệt kê tất cả các vò trí mà dấu có thể đặt tại đó. Kết
hợp với từ gốc đúng chính tả, danh sách vừa liệt kê sẽ là các trường hợp sai của từ gốc
đó.
Với trường hợp 2 : do lãnh thổ nước ta trải dài, phong tục tập quán của các vùng miền
cũng khác nhau, tiếng đòa phương cũng ăn sâu vào thói quen của người thuộc vùng
miền đó. Muốn liệt kê được các ‘biến thể’ của một cụm nguyên âm hay một phụ âm
đầu, một phụ âm cuối ta phải tiếp xúc với nhiều người thuộc nhiều vùng miền khác
nhau. Sau khi đã có kết quả tương đối đầy đủ nhóm đã kết hợp giữa các trường hợp sai
của từng thành phần trong từ để tạo nên các trường hợp sai cho một từ.
Sau khi giải quyết các trường hợp trên, nhóm liệt kê được một danh sách các từ có thể
là trường hợp sai của một từ trong từ điển tiếng Việt. cụ thể được bố trí như sau:
từ gốc | trường hợp 1 | trường hợp 2 | trường hợp 3 | . . .
Ví dụ :

âm nhạc | âm nhạt | ân nhạc | ân nhạt
áo | a1o | aó | ao1 | aos | aso
Toàn bộ quy trình tạo ra bộ từ điển theo phương pháp trên như sau:
Bước 1 : tách lọc lấy tập hợp tất cả các từ đơn có trong tiếng Việt
ở bước này, đầu vào của chương trình là thư viện từ điển tiếng Việt và kết quả
thu được sau khi chạy xong chương trình là tập hợp tất cả các từ đơn có trong


19

tiếng Việt. Chú ý, nhưng từ đơn này có thể có nghóa hoặc là một chữ trong từ
ghép.
Bước 2 : phân loại các từ có chiều dài1 khác nhau
Từ thư viện từ điển tiếng Việt, các từ có cùng chiều dài được đưa vào cùng một
file sau khi xử lý xong. Như vậy, cuối bước này ta sẽ có các file từ đơn, từ ghép
có chiều dài 2, 3, 4, 5, . . .
Bước 3 : liệt kê tất cả các trường hợp sai cho tất cả các từ đơn thu được ở bước 1
Các trường hợp sai do : gõ dấu; nhầm lẫn phụ âm đầu, phụ âm cuối, cụm
nguyên âm chính; đặt dấu sai vò trí.
Kết thúc bước này, ta thu được một file có chứa đầy đủ các trường hợp sai của
từng từ đơn cụ thể.
Chú ý : các trường hợp sai không được phép có trong từ điển, cũng có nghóa là
từ đơn ngày không thể là trường hợp sai của từ đơn khác.
Bước 4 : liệt kê tất cả các trường hợp sai cho tất cả các từ đơn khi tham gia vào từ ghép
Các trường hợp sai do : nhầm lẫn phụ âm đầu, phụ âm cuối, cụm nguyên âm
chính
sau bước này ta thu được một file chứa đầy đủ các trường hợp sai của từng từ
đơn khi tham gia vào từ ghép.
Chú ý : các trường hợp sai ở bước này khác so với bước 3. Một từ đơn có thể là
trường hợp sai của một từ đơn khác.

Bước 5 : liệt kê tất cả các trường hợp sai cho các từ ghép
Các trường hợp sai của từ ghép là sự kết hợp của từng trường hợp sai của các từ
đơn tạo nên nó. Kết quả của bước 4 là cơ sở để thực hiện bước 5.
Chú ý : Một từ ghép có trong từ điển không thể là trường hợp sai của một từ
ghép khác. Có thể nhiều từ ghép có cùng chung một trường hợp sai.
Bước 6 : loại trừ và thêm vào các trường hợp sai do người dùng đònh nghóa thêm

1

Được tính theo từ, không tính theo ký tự


20

Từ kết quả của bước 5, nếu người dùng cần thêm hoặc bỏ bớt trường hợp nào
cần thiết thì chỉ cần liệt kê các trường hợp đó ra. Chương trình sẽ thêm vào hoặc
loại bỏ theo yêu cầu của người dùng.
Bước 7 : liệt kê các trường hợp sai cho từ đơn có nghóa
Từ đơn được lấy từ kết quả phân loại ở bước 2, các trường hợp sai ở bước này
tập trung trên từng thành phần của từ : phụ âm đầu, phụ âm cuối và cụm nguyên
âm chính.
Chú ý : từ đơn này không thể là trường hợp sai của từ đơn khác, các từ đơn cũng
có thể có chung một trường hợp sai nào đó.
Bước 8 : chuyển các trường hợp sai đã thực hiện ở các bước trên về cùng một cấu trúc
Finite State Transducer
Từ kết quả của bước 3, bước 6, bước 7 cùng với các kết quả phân loại ở bước 2
xây dựng cấu trúc cho từng loại : từ đơn dùng ở giai đoạn đầu, từ ghép, từ đơn
có nghóa.
Bộ từ điển được sử dụng trong chương trình như sau :
Chương trình bắt lỗi theo ba giai đoạn.

Giai đoạn 1: Duyệt qua tất cả các từ đơn để tìm ra các lỗi cơ bản nhất và gợi ý cho
người dùng. Ở giai đoạn này các từ đơn được kiểm tra độc lập với các từ lân cận.
Giai đoạn 2: Duyệt qua các cụm từ trong câu. Nếu phát hiện cụm từ nào là trường hợp
sai của một từ ghép nào đó trong từ điển tiếng Việt, chương trình sẽ đưa ra gợi ý đúng
cho cụm từ nghi ngờ và nhắc người dùng thay thế bằng từ do người dùng nhập hoặc do
chương trình gợi ý. Trong trường hợp người dùng chấp nhận thay thế từ do chương trình
nghi ngờ sai, từ mới sẽ được thay vào vò trí từ (cụm từ) đang xét và con trỏ nhảy qua
cụm từ đó. Ngược lại cụm từ mới được xét sẽ được lấy bằng cụm từ đang xét giảm đi
một chữ ở vò trí cuối cùng và tiếp tục lặp lại giai đoạn này đến khi cụm từ có chiều dài
là 1.
Giai đoạn 3: ở giai đoạn này cụm từ có chiều dài là một chữ, chương trình sẽ kiểm tra
sự tồn tại của từ này trong từ điển tiếng Việt. Nếu không có sự tồn tại này, chương trình


21

sẽ đưa ra danh sách gợi ý dựa vào thuật toán Minimum Edit Distance. Trong trường hợp
hai từ dính liền nhau, chương trình sẽ đưa ra gợi ý là 2 từ và đề nghò người dùng thay
thế.
2.3.3.2 Cài đặt chương trình dựa trên bộ từ điển đã xây dựng
2.3.3.2.1 Biểu diễn đồ thò trên máy tính
Trong bộ nhớ, từ điển được lưu dưới dạng danh sách kề.
Biểu diễn đồ thò G=(E,V) theo danh sách kề:
Ke(v) = { u

V: (v,u)

E}

Ke(v) sẽ là tập các đỉnh kề với đỉnh v.

Ta có:

 Ke(v)

 2m , m là số cạnh.

v V

Từ cách biểu diễn trên, ta xây dựng hai lớp Node và CTuDien:
+ Cấu trúc của một Node gồm mã Unicode của ký tự và con trỏ trỏ tới đỉnh kề với nó.
+ Lớp CTuDien bao gồm các phương thức như:


Nạp từ điển vào danh sách kề.



Tìm kiếm một cung có tồn tại trong đồ thò.



Kiểm tra một từ có tồn tại trong từ điển hay không.



Lấy một từ đúng chính tả.



Hủy từ điển.


2.3.3.2.2 Namespace Microsoft.Office.Interop.Word
Để tăng tính tiện dụng, chương trình được tích hợp vào một chương trình soạn thảo văn
bản phổ biến là Microsoft Word. Để điều khiển các thao tác trong word ta sử dụng các
hàm VBA thông qua namespace Microsoft.Office.Interop.Word.
Do trong văn bản Word có chứa rất nhiều đối tượng đặc biệt như hình ảnh, table,
symbol…nên trước khi kiểm tra chính tả, ta phải loại bỏ các ký tự đặc biệt này.


22

2.3.3.2.3 Lớp CSentence
Mỗi thể hiện của lớp CSentence chứa nội dung một đoạn văn bản nhỏ trong văn
bản word, là tập hợp các đối tượng có kiểu Microsoft.Office.Interop.Word.Range
Trong lớp CSentence ta xây dựng các phương thức tiện ích để xử lý văn bản word
bao gồm:


Đếm số từ có trong câu.



Lấy nội dung của câu.



Thay thế một từ




Thay thế nguyên một câu.



Xoá một từ tại vò trí trong câu.



Xoá nguyên một câu.

2.3.3.2.4 Lớp CWord
Mỗi thể hiện của lớp CWord chứa nội dung một từ trong văn bản word, là một đối
tượng có kiểu Microsoft.Office.Interop.Word.Range. Trong lớp này ta cũng xây dựng
một số phương thức để thuận tiện khi sử dụng, bao gồm:


Kiểm tra từ này có chứa các ký tự đặc biệt không.



Kiểm tra từ này có phải là một ký tự phân cách câu không. Do trong namespace
Microsoft.Office.Interop.Word dấu chấm, dấu phẩy, dấu chấm than…cũng được
xem như là một từ.



Kiểm tra một từ đang viết hoa, viết thường hay viết hoa đầu câu để sau khi sửa
lỗi ta sẽ trả về đònh dạng cũ của từ đó.

2.3.3.2.5 Tách câu

Bước 1: Lấy một vùng văn bản từ văn bản Word.
Bước 2: Loại bỏ các ký tự đặc biệt như dấu tab, hình ảnh, dấu enter…
Bước 3: Tách thành các câu nhỏ hơn dựa trên các ký tự phân cách câu. Đưa các câu
chuẩn vừa tách vào hàng đợi chờ xử lý.
Bảng 2-2 Thuật toán tách câu


23

2.3.3.2.6 Thay thế
Bước 1: Lưu lại đònh dạng cũ của cụm từ sẽ thay thế như font, size, màu chữ, viết hoa,
viết thường...
Bước 2: Thay cụm từ cũ bằng cụm từ mới
Bước 3: Phục hồi lại đònh dạng cũ.
Bảng 2-3 Thuật toán thay thế
2.3.3.2.7 Quy trình kiểm tra chính tả
Bước 1:
Kiểm tra hàng đợi có rỗng không.
+ Nếu hàng đợi không rỗng thì lấy câu tiếp theo để kiểm tra.
+ Nếu hàng đợi rỗng và chưa đến cuối văn bản thì tách các câu tiếp theo đưa
vào hàng đợi để xử lý tiếp.
Bước 2:
Kiểm tra ở mức từ đơn, gợi ý sửa các lỗi chính tả cơ bản.
Bước 3:
Kiểm tra ở mức từ ghép (mặc đònh là 3 và chiều dài từ ghép có thể lên tới mức 11).
+ Kiểm tra cụm từ này có thuộc danh sách từ nước ngoài hay không.
+ Nếu thuộc danh sách này thì ta bỏ qua và tiếp tục kiểm tra cụm từ tiếp
theo.
+ Nếu không thuộc danh sách này ta đưa vào từ điển tương ứng để kiểm tra
nếu đúng chính tả thì ta giảm chiều dài từ ghép xuống 1 từ để tiếp tục kiểm

tra.
+ Nếu sai chính tả ta đưa ra danh sách các từ gợi ý dựa trên từ điển và kiểm
tra từ ghép này có bò dính từ không.
Bước 4:


×