2. Áp dụng các kỹ thuật phân loại văn bản tiếng Việt vào SpamAssassin
2.2.3. Xây dựng mơđun tách từ
Thuật tốn tách từ được sử dụng trong mơ đun tách từ này là thuật tốn tách t ừ trái qua phải. Tuy rằng trong quá trình tách văn bản theo phương pháp tách từ trái qua phải cĩ gặp phải một số trường hợp nhập nhằng trong câu nhưng nĩ lại hiệu quả trong trường hợp yêu cầu cao về tốc độ xử lý.
▪ Đầu vào: Là nội dung và tiêu đề thư đã ở dạng văn bản “sạch”
▪ Nhiệm vụ: Bao gồm
o Tách thư thành các từ nằm trong từ điển theo phương pháp tách từ trái sang phải.
o Nếu xuất hiện từ mới, thêm vào từ điển. • Đầu ra:
Đầu ra là biểu diễn khơng gian véc tơ dạng Boolean của bức thư hay đơn giản là mảng các từ cĩ trong thư nằm trong từ điển
Chúng ta định nghĩa hằng MAX_SYL là số lượng tiếng tối đa trong một từ khĩa mà cĩ thể tách được.
• Giải thuật:
o Lần lượt lấy ra các xâu chuẩn trong tệp thư @msg
o Đối với mỗi xâu chuẩn $XCi, thực hiện việc tách từ khố trong xâu như sau:
1. Đếm số tiếng của xâu = $numSyllable 2. Nếu số tiếng $numSyllable <= MAX_SYL
thì thực hiện hàm LessThanOrEqualMaxSylls($XCi) 3. Nếu $numSyllable > MAX_SYL thì
thì thực hiện hàm GreaterThanMaxSylls($XCi)
Hàm LessThanOrEqualMaxSylls(): hàm này thực hiện phân tách từ khố đối với
xâu chuẩn cĩ kích thước nhỏ hơn MAX_SYL. Dưới đây là giải thuật của hàm:
0. Bắt đầu
1. $XC1 = @_; (Lấy tham số của hàm) 2. Tìm kiếm $XC1 trong từ điển.
3. Nếu cĩ trong từ điển thì tách từ khố → nhảy sang bước 5. 4. Nếu khơng cĩ thì
4.1 Giảm dần số tiếng của $XC1 cho đến khi tìm thấy trong từ điển hoặc là khơng tìm thấy từ nào
4.2 Nếu tìm thấy thì cắt bỏ từ khố đã tách, đặt $XC2 = các tiếng cịn lại, gọi đệ quy hàm với $XC2: LessThanOrEqualMaxSylls($XC2) 4.3 Nếu khơng tìm thấy từ nào cĩ nghĩa là phải loại bỏ tiếng đầu tiên trong xâu chuẩn ban đầu, và đặt $XC2 bằng các tiếng cịn lại của xâu chuẩn, tương tự cũng gọi đệ quy hàm với $XC2:
LessThanOrEqualMaxSylls($XC2) 5. Kết thúc
Hàm GreaterThanMaxSylls (): Hàm này thực hiện phân tách được các xâu cĩ số
tiếng lớn hơn MAX_SYL..
0. Bắt đầu $cwa=@_(Lấy tham số của hàm) 1. Tính số tiếng của xâu chuẩn $cwa
$numSylls
2. Nếu ($numSylls<= MAX_SYL.) thì chuyển xâu cho hàm LessThanOrEqualMaxSylls($cwa)
3. Ngược lại, nếu $numSylls > MAX_SYL thì
3.1 Lấy ra MAX_SYL tiếng đầu tiên trong xâu chuẩn $XC1 = MAX_SYL tiếng đầu tiên
3.2 Tách từ khố từ xâu $XC1.
Nếu tìm thấy thì thực hiện tách từ khố
Nếu khơng tìm thấy một từ nào thì bỏ từ đầu tiên 3.3 Đặt $XC1 là phần cịn lại của xâu
3.4 Gọi đệ quy hàm đối với $XC1 GreaterThanMaxSylls ($XC1) 4. Kết thúc