3 PHẦN III:
3.1.3 Thuật giải nhận dạng bảng mã
• Các đặc trưng của bảng mã:
Đặc trưng đầu tiên dùng để nhận biết văn bản là unicode. Một văn bản là unicode nếu 2 byte đầu của văn bản là FFFEh hoặc FEFFh.
Đặc trưng thứ hai của bảng mã là số byte lưu trữ ký tự trong bảng mã. Trong một bảng mã, một ký tự cĩ thểđược lưu 1 byte, 2 bytes, 3 bytes, hay cĩ khi là 4 bytes, hoặc biến động. Sau đây là bảng thống kê các bảng mã và số byte lưu trữ ký tự : Bảng mã Số byte TCVN3 1 byte VPS 1 byte VISCII 1 byte BK HCM1 1 byte Vietware-F 1 byte VNI Windows 2 bytes BK HCM2 2 bytes Vietware-X 2 bytes Windows-1258 2 bytes UTF-8 Biến động
Đặc trưng thứ ba, quan trọng nhất, để nhận biết bảng mã chính là sự ánh xạ
khác nhau của ký tự. Ví dụ : chữ “” trong bảng mã TCVN3 cĩ giá trị 162, cịn trong bảng mã VPS cĩ giá trị là 194. Đa số các ký tự trong các bảng mã khác nhau sẽ cĩ ánh xạ khác nhau, tuy nhiên cĩ một số ký tự khác nhau của các bảng mã khác nhau lại cĩ cùng một giá trị ánh xạ (ví dụ : chữ ‘oả’ cĩ giá trị trong bảng mã unicode là E16F, và mã này sẽ trùng với chữ ‘ỗ’ trong bảng mã VNI Windows…) . Số lượng những ký tự như vậy, tuy khơng nhiều nhưng sẽ gây ra sự nhập nhằng trong việc nhận dạng bảng mã. Để
khử sự nhập nhằng này,chúng tơi sử dụng một Heristic sau. • Heuristic để khử nhập nhằng bảng mã:
“Khi cĩ sự nhập nhằng về bảng mã của ký tự, ký tự sẽ thuộc về bảng mã của ký tự trước đĩ”.
Chúng ta cĩ thể thấy rằng, cĩ rất ít văn bản sử dụng nhiều bảng mã cùng một lúc. Do đĩ, heuristic này sẽ cho phép chọn những bảng mã cĩ nhiều ký tự thuộc về bảng mã đĩ với I vọng rằng : ký tự này sẽ thuộc về bảng mã giống như những ký tự trước đĩ. Tất nhiên với heuristic này, độ
chính xác sẽ khơng thể là 100%, nhưng do hầu hết các văn bản đều sử
dụng một bảng mã trong tồn bộ văn bản, nên độ chính xác, theo thống kê của chúng tơi là khoảng >95%.
• Thuật giải nhận dạng bảng mã:
B1 : Với mỗi bảng mã, làm cơng việc từ B2, B5. B2 : Đọc một ký tự C ứng với bảng mã.
B3 : Nếu đây C là ký tự Western thì qua B6.
B4 : Nếu C là ký tự hợp lệ và số byte đọc được >= 1, qua bước 6. B5 : Nếu phát hiện sự nhập nhằng, lấy bảng mã trước rồi ánh xạ C. B6 : Lưu lại bảng mã phát hiện được.
• Thực hiện việc chuyển mã:
Sau khi đã xác định được bảng mã, chúng ta đã cĩ thể thực hiện việc chuyển mã. Cơng việc chuyển đổi bảng mã bao gồm chuyển đổi các ký tự và chuyển tag META, tag FONT của HTML. Cơng việc chuyển tag
địi hỏi phải cĩ 1 parser đơn giản.
Ghép nối hai cơng đoạn chuyển định dạng và chuyển bảng mã.
ở module robot, thơng tin được lưu trữ trong bảng DOWNLOADEDDATA. Bảng này cĩ thuộc tính STATUS cho biết trang này
đã được chuẩn (chuyển định dạng, chuyển bảng mã) hay chưa. Do đĩ module này chỉ xử lý những tài liệu cĩ STATUS = 0, sau đĩ đưa dữ liệu này vào bảng INDEXEDDATA để chuẩn bị thực hiện việc index, sau đĩ cập nhật lại thuộc tính STATUS trong bảng DOWNLOADEDDATA.