Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
1,88 MB
Nội dung
MỤC LỤC LỜI MỞ ĐẦU .5 Chương Giới thiệu DotNet C# 1.1 Tổng quan MS.NET 1.1.1 Nguồn gốc NET 1.1.2 Microsoft NET 1.1.3 Kiến trúc NET Framework 1.1.4 Common Language Runtime (CLR) 10 1.1.5 Thư viện lớp NET Framework 11 1.1.6 Phát triển ứng dụng Client 12 1.1.7 Biên dịch MSIL 14 1.2 Tổng quan C# 15 1.2.1 Giới thiệu C# 15 1.2.2 Tại phải sử dụng ngôn ngữ C# 16 1.2.3 C# ngôn ngữ khác 20 CHƯƠNG Giới thiệu phân lớp văn 22 2.1 Một số khái niệm 22 2.2 Bài toán phân lớp văn 24 CHƯƠNG Các phương pháp biểu diễn văn 27 3.1 Mô hình không gian véc tơ (Space Vector Model) 27 3.1.1 Mô hình Boolean 28 3.1.2 Mô hình tần suất 28 3.1.3 Phương pháp xử lý véc tơ thưa 30 3.2 Loại bỏ từ dừng biểu diễn văn 31 3.2.1 Loại bỏ từ dừng (Stop Words) 31 3.2.2 Định luật Zipf 33 CHƯƠNG Các thuật toán phân lớp văn 35 4.1 Một số thuật toán 35 4.1.1 Thuật toán định 35 4.1.2 Thuật toán k-NN 42 4.2 Phương hướng giải 45 3.2.1 Lựa chọn mô hình biểu diễn văn 45 4.2.2 Lựa chọn thuật toán phân lớp văn 46 4.2.3 Phương án tách thuật ngữ 48 4.2.4 Hiệu suất phân lớp văn 50 4.3 Một số kết thực nghiệm 51 4.3.1 Giới thiệu chương trình phân lớp văn (Demo) 51 4.3.2 Kết thực nghiệm 64 4.3.2.1 Thuật toán K-NN 64 4.3.2.2 Thuật toán ID3: 65 KẾT LUẬN 67 Một số kết đạt 67 Hướng phát triển 67 LỜI MỞ ĐẦU Ngày nay, dạng liệu văn loại liệu dùng phổ biến Nó có mặt nhiều nơi, nhiều lĩnh vực đời sống xã hội, tinh thần, kinh tế khoa học… người Bên cạnh đó, phát triển nhanh chóng mạng máy tính toàn cầu làm cho nhu cầu xử lý văn ngày trở nên cần thiết Bài toán xử lý văn đặt lâu toán hay khai thác liệu văn Văn chia hai dạng: bán cấu trúc phi cấu trúc Dạng bán cấu trúc bao gồm: email, văn HTML,… dạng phi cấu trúc kể đến văn text Có nhiều cách quan niệm lĩnh vực xử lý văn bản, Lewis [6] chia hai nhóm lĩnh vực phân lớp văn (Text Classfication) gồm công việc xác định văn phần văn vào hay nhiều lớp xác định trước Hiểu văn (Text Understanding) bao gồm công việc phức tạp để xử lý nội dung văn tóm tắt văn (Text Sumarization), chắt lọc thông tin (Text Extraction)…Trong đó, toán phân lớp văn tiền đề cho toán sau, toán quan trọng định thành công toán lại Với lý đó, em định chọn đồ án: “Nghiên cứu toán phân lớp văn tiếng Việt ” nhằm góp phần nhỏ việc khai phá liệu văn Đồ án chia thành chương: Chương 1: Giới thiệu sơ qua DotNet ngôn ngữ lập trình C# Chương 2: Nhắc lại vài khái niệm liên quan đến văn trình bày cụ thể toán phân lớp văn Ở đây, em đưa khái niệm độ liên quan văn sở phân lớp văn sau Chương 3: Mô tả phương pháp biểu diễn văn để tạo thuận lợi cho việc xử lý chúng công đoạn quan trọng Trong chương này, em trình bày ưu, nhược điểm phương pháp, để từ đưa lựa chọn thích hợp Chương 4: trình bày thuật toán phân lớp văn thường gặp, chẳng hạn: thuật toán định, thuật toán k-láng giềng gần nhất,….và em đưa hướng giải cụ thể từ lý thuyết trình bày Tuy nhiên, việc xử lý tiếng Việt, em chưa đề cập sâu mà đưa ý tưởng để giải Cuối cùng, em xin chân thành cám ơn thầy giáo ThS.Nguyễn Đình Dũng cung cấp kiến thức tảng, gợi ý để hoàn thành đồ án Chương Giới thiệu DotNet C# 1.1 Tổng quan MS.NET 1.1.1 Nguồn gốc NET Đầu năm 1998, sau hoàn tất phiên Version Internet Information Server(IIS), đội ngũ lập trình Microsoft nhận thấy họ nhiều sáng kiến để kiện toàn IIS Họ bắt đầu xây dựng kiến trúc tảng ý tưởng đặt tên Next Generation Windows Services (NGWS) Sau Visual Basic trình làng vào cuối 1998, dự án mang tên Visual Studio xác nhập vào NGWS Đội ngũ COM+/MTS góp vào universal runtime cho tất ngôn ngữ lập trình chung Visual Studio, tham vọng họ cung cấp cho ngôn ngữ lập trình công ty khác dùng chung Công việc xúc tiến cách hoàn toàn bí mật hội nghị Professional Developers’ Conference Orlado vào tháng 7/2000 Đến tháng 11/2000 Microsoft phát hành Beta NET gồm đĩa CD Tính đến lúc Microsoft làm việc với NET gần năm rồi, Beta tương đối vững .NET mang dáng dấp sáng kiến áp dụng trước code UCSD Pascal Java Virtual Machine Có điều Microsoft góp nhặt sáng kiến người khác, kết hợp với sáng kiến để làm nên sản phẩm hoàn chỉnh từ bên lẫn bên Hiện Microsoft công bố phiên release NET Thật Microsoft đặt cược vào NET theo thông tin công ty, tập trung 80% sức mạnh Microsoft để nghiên cứu triển khai NET (bao gồm nhân lực tài ?), tất sản phẩm Microsoft chuyển qua NET 1.1.2 Microsoft NET Microsoft NET gồm phần chính: Framework Integrate Development Environment (IDE) Framework cung cấp cần thiết bản, chữ Framework có nghĩa khung hay khung cảnh ta dùng hạ tầng sở theo qui ước định để công việc trôi chảy IDE cung cấp môi trường giúp triển khai dễ dàng, nhanh chóng ứng dụng dựa tảng NET Nếu IDE Microsoft NET 1.0 Ngôn Ngữ Lập Trình C# dùng trình soạn thảo ví Notepad hay trình soạn thảo văn sử dụng command line để biên dịch thực thi, nhiên việc nhiều thời gian Tốt dùng IDE phát triển ứng dụng, cách dễ sử dụng Thành phần Framework quan trọng NET cốt lõi tinh hoa môi trường, IDE công cụ để phát triển dựa tảng Trong NET toàn ngôn ngữ C#, Visual C++ hay Visual Basic.NET dùng IDE Tóm lại Microsoft NET tảng cho việc xây dựng thực thi ứng dụng phân tán hệ Bao gồm ứng dụng từ client đến server dịch vụ khác Một số tính Microsoft NET cho phép nhà phát triển sử dụng sau: Một mô hình lập trình cho phép nhà phát triển xây dựng ứng dụng dịch vụ web ứng dụng client với Extensible Markup Language (XML) Tập hợp dịch vụ XML Web, Microsoft NET My Services cho phép nhà phát triển đơn giản tích hợp người dùng kinh nghiệm Cung cấp server phục vụ bao gồm: Windows 2000, SQL Server BizTalk Server, tất điều tích hợp, hoạt động, quản lý dịch vụ XML Web ứng dụng Các phần mềm client Windows XP Windows CE giúp người phát triển phân phối sâu thuyết phục người dùng kinh nghiệm thông qua dòng thiết bị Nhiều công cụ hỗ trợ Visual Studio NET, để phát triển dịch vụ Web XML, ứng dụng Windows hay web cách dể dàng hiệu 1.1.3 Kiến trúc NET Framework NET Framework platform làm đơn giản việc phát triển ứng dụng môi trường phân tán Internet .NET Framework thiết kế đầy đủ để đáp ứng theo quan điểm sau: Để cung cấp môi trường lập trình hướng đối tượng vững chắc, mã nguồn đối tượng lưu trữ thực thi cách cục Thực thi cục phân tán Internet, thực thi từ xa Để cung cấp môi trường thực thi mã nguồn mà tối thiểu việc đóng gói phần mềm tranh chấp phiên Để cung cấp môi trường thực thi mã nguồn mà đảm bảo việc thực thi an toàn mã nguồn, bao gồm việc mã nguồn tạo hãng thứ ba hay hãng mà tuân thủ theo kiến trúc NET Để cung cấp môi trường thực thi mã nguồn mà loại bỏ lỗi thực script hay môi trường thông dịch Để làm cho người phát triển có kinh nghiệm vững nắm vững nhiều kiểu ứng dụng khác Như từ ứng dụng Windows đến ứng dụng dựa web Để xây dựng tất thông tin dựa tiêu chuẩn công nghiệp để đảm bảo mã nguồn NET tích hợp với mã nguồn khác NET Framework có hai thành phần chính: Common Language Runtime (CLR) thư viện lớp NET Framework CLR tảng NET Framework Chúng ta hiểu runtime agent quản lý mã nguồn thực thi, cung cấp dịch vụ cốt lõi như: quản lý nhớ, quản lý tiến trình, quản lý từ xa Ngoài thúc đẩy việc sử dụng kiểu an toàn hình thức khác việc xác mã nguồn, đảm bảo cho việc thực bảo mật mạnh mẽ Thật vậy, khái niệm quản lý mã nguồn nguyên lý tảng runtime Mã nguồn mà đích tới runtime biết mã nguồn quản lý (managed code) Trong mã nguồn mà đích tới runtime biết mã nguồn không quản lý (unmanaged code) Thư viện lớp, thành phần khác NET Framework tập hợp hướng đối tượng kiểu liệu dùng lại, cho phép phát triển ứng dụng từ ứng dụng truyền thống command-line hay ứng dụng có giao diện đồ họa (GUI) đến ứng dụng cung cấp ASP.NET, Web Form dịch vụ XML Web 1.1.4 Common Language Runtime (CLR) Như đề cập CLR thực quản lý nhớ, quản lý thực thi tiến trình, thực thi mã nguồn, xác nhận mã nguồn an toàn, biên dịch dịch vụ hệ thống khác Những đặc tính tảng cho mã nguồn quản lý chạy CLR Do trọng đến bảo mật, thành phần quản lý cấp mức độ quyền hạn khác nhau, phụ thuộc vào nhiều yếu tố nguyên thủy chúng như: liên quan đến Internet, hệ thống mạng nhà máy, hay máy tính cục Điều có nghĩa rằng, thành phần quản lý có hay quyền thực thao tác truy cập tập tin, thao tác truy cập registry, hay chức nhạy cảm khác CLR thúc đẩy việc mã nguồn thực việc truy cập bảo mật Ví dụ, người sử dụng giới hạn việc thực thi nhúng vào trang web chạy hoạt hình hình hay hát nhạc, truy cập liệu riêng tư, tập tin hệ thống, hay truy cập mạng Do đó, đặc tính bảo mật CLR cho phép phần mềm đóng gói Internet có nhiều đặc tính mà không ảnh hưởng đến việc bảo mật hệ thống 10 CLR thúc đẩy cho mã nguồn thực thi mạnh mẽ việc thực thi mã nguồn Type System (CTS) CTS đảm bảo mã nguồn quản lý tự mô tả (selfdescribing) Sự khác Microsoft trình biên dịch ngôn ngữ hãng thứ ba việc tạo mã nguồn quản lý thích hợp với CTS Điều mã nguồn quản lý sử dụng kiểu quản lý khác thể hiện, thúc đẩy nghiêm ngặt việc sử dụng kiểu liệu xác an toàn Thêm vào đó, môi trường quản lý runtime thực việc tự động xử lý layout đối tượng quản lý tham chiếu đến đối tượng, giải phóng chúng chúng không sử dụng Việc quản lý nhớ tự động giải hai lỗi chung ứng dụng: thiếu nhớ tham chiếu nhớ không hợp lệ Trong runtime thiết kế cho phần mềm tương lai, hỗ trợ cho phần mềm ngày trước Khả hoạt động qua lại mã nguồn quản lý mã nguồn không quản lý cho phép người phát triển tiếp tục sử dụng thành phần cần thiết COM DLL Runtime thiết kế để cải tiến hiệu suất thực Mặc dù CLR cung cấp nhiều tiêu chuẩn dịch vụ runtime, mã nguồn quản lý không dịch Có đặc tính gọi Just-in-Time (JIT) biên dịch tất mã nguồn quản lý vào ngôn ngữ máy hệ thống vào lúc mà thực thi Khi đó, trình quản lý nhớ xóa bỏ phân mảnh nhớ gia tăng tham chiếu nhớ cục bộ, kết gia tăng hiệu thực thi 1.1.5 Thư viện lớp NET Framework Thư viện lớp NET Framework tập hợp kiểu liệu dùng lại kết hợp chặt chẽ với Common Language Runtime Thư viện lớp hướng đối tượng cung cấp kiểu liệu mà mã nguồn quản lý dẫn xuất Điều không làm cho kiểu liệu NET Framework dễ sử dụng mà làm giảm thời gian liên quan đến việc học 11 đặc tính NET Framework Thêm vào đó, thành phần hãng thứ ba tích hợp với lớp NET Framework Cũng mong đợi người phát triển với thư viện lớp hướng đối tượng, kiểu liệu NET Framework cho phép người phát triển thiết lập nhiều mức độ thông dụng việc lập trình, bao gồm nhiệm vụ như: quản lý chuỗi, thu thập hay chọn lọc liệu, kết nối với sở liệu, truy cập tập tin Ngoài nhiệm vụ thông dụng Thư viện lớp đưa vào kiểu liệu để hỗ trợ cho kịch phát triển chuyên biệt khác Ví dụ người phát triển sử dụng NET Framework để phát triển kiểu ứng dụng dịch vụ sau: Ứng dụng Console Ứng dụng giao diện GUI Windows (Windows Forms) Ứng dụng ASP.NET Dịch vụ XML Web Dịch vụ Windows Trong lớp Windows Forms cung cấp tập hợp lớn kiểu liệu nhằm làm đơn giản việc phát triển ứng dụng GUI chạy Windows Còn viết ứng dụng ASP.NET sử dụng lớp Web Forms thư viện NET Framework 1.1.6 Phát triển ứng dụng Client Những ứng dụng client gần với ứng dụng kiểu truyền thống lập trình dựa Windows Đây kiểu ứng dụng hiển thị cửa sổ hay form desktop cho phép người dùng thực thao tác hay nhiệm vụ Những ứng dụng client bao gồm ứng dụng xử lý văn bản, xử lý bảng tính, ứng dụng lĩnh vực thương mại công cụ nhập liệu, công cụ tạo báo cáo Những ứng dụng client thường sử dụng cửa sổ, menu, toolbar, button hay thành phần GUI khác, chúng 12 o tenKN: tên khái niệm o tenTN: tên thuật ngữ có liên quan đến khái niệm o xs: với thuật ngữ có phần trăm liên quan đến khái niệm Bảng TD: chứa từ dừng Tiếng Việt để tiện cho việc phân loại 4.3.1.4 Sơ lược hoạt động chương trình Khi có văn đầu vào chương trình thực việc đọc văn vào nhớ: while (true) { if (MyOpenFileDialog.ShowDialog() == DialogResult.Cancel) return; FileStream FStream; try { FStream = new FileStream(MyOpenFileDialog.FileName, FileMode.Open, FileAccess.Read); StreamReader SReader = new StreamReader(FStream); int i = 0; while (SReader.Peek() >= 0) { string str = SReader.ReadLine(); tep[i] = str; i++; } soDong = i; } catch (Exception) { MessageBox.Show("Error opening file", "File Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } Mỗi văn input sau đọc vào nhớ lưu mảng kiểu xâu (String) Ứng với phần tử mảng dòng văn Sau chương trình tiến hành việc loại bỏ ký tự thừa từ dừng: String[] loaiBoNhieu(string xauVao) { int j = xauVao.Trim().Length;// -1; char[] kyTuDacBiet = { '.', ',', '(', ')', '?', ':', '"', '…', ':' }; 54 while (j > 0) { for (int k = 0; k < kyTuDacBiet.Length; k++) if (xauVao[j] == kyTuDacBiet[k]) { //MessageBox.Show(xauVao[j].ToString()); xauVao = xauVao.Remove(j, 1); } j ; } String[] temp = tachTu(xauVao); int temp1 = 0; dataSetTableAdapters.TDTableAdapter tuDung = new DoAn.dataSetTableAdapters.TDTableAdapter(); foreach (DataRow row in tuDung.GetData().Rows) { for (int i = 0; i < temp.Length; i++) if(temp[i]!= null) if (temp[i].ToLower() == row[0].ToString().Trim().ToLower()) { temp[i] = null; temp1++; } } String[] xauRa = new string[temp.Length - temp1]; j = 0; temp1 = 0; while (j < temp.Length) { if (temp[j] != null) { xauRa[temp1] = temp[j]; temp1++; } j++; } return xauRa; } Giá trị đầu hàm mảng từ đơn âm Sau chương trình bắt đầu tiến hành phân loại Đối với thuật toán K-NN: Chương trình so sánh trực tiếp với sở giữ liệu để tìm thuật ngữ, khái niệm có văn vào từ tính toán so sánh với văn có sở liệu để đưa định 55 String[][] vectoVanBan(String[][] vectoThuatNgu) { int soVanBan = 0, soThuatNgu = 0; dataSetTableAdapters.VBKNTableAdapter vbkn = new DoAn.dataSetTableAdapters.VBKNTableAdapter(); String[] vb = new string[vbkn.GetData().Rows.Count]; for (int i = 0; i < vectoThuatNgu.Length; i++) { if (vectoThuatNgu[i][0] != "") { soThuatNgu += Convert.ToInt32(vectoThuatNgu[i][1]); } } for (int i = 0; i < vectoThuatNgu.Length; i++) { if (vectoThuatNgu[i][0] != "") { double a = 1; double temp = (Convert.ToInt32(vectoThuatNgu[i][1]) * a / soThuatNgu); vectoThuatNgu[i][1] = temp.ToString(); //MessageBox.Show(temp.ToString()); } } foreach (DataRow row in vbkn.GetData().Rows) { for (int i = 0; i < vb.Length; i++) if (vb[i] != null) { if (vb[i].ToLower() != row[0].ToString().ToLower()) { soVanBan++; } } else { int j = 0; bool kt = true; while ((j < i) && (kt)) { if (vb[j].ToLower() == row[0].ToString().ToLower()) kt = false; else j++; } if (kt) 56 vb[j] = row[0].ToString(); } } String[][][] vectoVB = new string[soVanBan][][]; for (int i = 0; i < soVanBan; i++) { vectoVB[i] = new string[vectoThuatNgu.Length][]; for (int j = 0; j < vectoThuatNgu.Length; j++) { vectoVB[i][j] = new string[3]; if (vectoThuatNgu[j][0] != "") vectoVB[i][j][0] = vb[i]; vectoVB[i][j][1] = vectoThuatNgu[j][0]; vectoVB[i][j][2] = vectoThuatNgu[j][1]; bool kt = true; foreach (DataRow row in vbkn.GetData().Rows) { //MessageBox.Show(row[0].ToString()); if (vectoVB[i][j][0] != null) { if (vectoVB[i][j][0].ToLower() == row[0].ToString().ToLower()) { if (vectoVB[i][j][1].ToLower() == row[1].ToString().ToLower()) { kt = false; //MessageBox.Show(vectoVB[i][j][1], row[1].ToString()); break; } } } } if (vectoVB[i][j][0] != null) if (kt) vectoVB[i][j][2] = "0"; } } return vectoThuatNgu; } 57 Đối với thuật toán định ID3: Chương trình dựa vào sở liệu để tạo nên với nút gốc tên văn có sở liệu, nút khác thuật ngữ khái niệm tương ứng có văn public class DecisionTreeID3 { private DataTable mSamples; private int mTotalPositives = 0; private int mTotal = 0; private string mTargetAttribute = "result"; private double mEntropySet = 0.0; private int countTotalPositives(DataTable samples) { int result = 0; foreach (DataRow aRow in samples.Rows) { if ((bool)aRow[mTargetAttribute] == true) result++; } return result; } private double calcEntropy(int positives, int negatives) { int total = positives + negatives; double ratioPositive = (double)positives/total; double ratioNegative = (double)negatives/total; if (ratioPositive != 0) ratioPositive = -(ratioPositive) * System.Math.Log(ratioPositive, 2); if (ratioNegative != 0) ratioNegative = - (ratioNegative) * System.Math.Log(ratioNegative, 2); double result = ratioPositive + ratioNegative; return result; } 58 private void getValuesToAttribute(DataTable samples, Attribute attribute, string value, out int positives, out int negatives) { positives = 0; negatives = 0; foreach (DataRow aRow in samples.Rows) { if ( ((string)aRow[attribute.AttributeName] == value) ) if ( (bool)aRow[mTargetAttribute] == true) positives++; else negatives++; } } private double gain(DataTable samples, Attribute attribute) { string[] values = attribute.values; double sum = 0.0; for (int i = 0; i < values.Length; i++) { int positives, negatives; positives = negatives = 0; getValuesToAttribute(samples, attribute, values[i], out positives, out negatives); double entropy = calcEntropy(positives, negatives); sum += -(double)(positives + negatives)/mTotal * entropy; } return mEntropySet + sum; } private Attribute getBestAttribute(DataTable samples, Attribute[] attributes) { double maxGain = 0.0; 59 Attribute result = null; foreach (Attribute attribute in attributes) { double aux = gain(samples, attribute); if (aux > maxGain) { maxGain = aux; result = attribute; } } return result; } private bool allSamplesPositives(DataTable samples, string targetAttribute) { foreach (DataRow row in samples.Rows) { if ( (bool)row[targetAttribute] == false) return false; } return true; } private bool allSamplesNegatives(DataTable samples, string targetAttribute) { foreach (DataRow row in samples.Rows) { if ( (bool)row[targetAttribute] == true) return false; } return true; } private ArrayList getDistinctValues(DataTable samples, string targetAttribute) { ArrayList distinctValues = new ArrayList(samples.Rows.Count); foreach(DataRow row in samples.Rows) 60 { if (distinctValues.IndexOf(row[targetAttribute]) == 1) distinctValues.Add(row[targetAttribute]); } return distinctValues; } private object getMostCommonValue(DataTable samples, string targetAttribute) { ArrayList distinctValues = getDistinctValues(samples, targetAttribute); int[] count = new int[distinctValues.Count]; foreach(DataRow row in samples.Rows) { int index = distinctValues.IndexOf(row[targetAttribute]); count[index]++; } int MaxIndex = 0; int MaxCount = 0; for (int i = 0; i < count.Length; i++) { if (count[i] > MaxCount) { MaxCount = count[i]; MaxIndex = i; } } return distinctValues[MaxIndex]; } private TreeNode internalMountTree(DataTable samples, string targetAttribute, Attribute[] attributes) { if (allSamplesPositives(samples, targetAttribute) == true) return new TreeNode(new Attribute(true)); if (allSamplesNegatives(samples, targetAttribute) == true) 61 return new TreeNode(new Attribute(false)); if (attributes.Length == 0) return new TreeNode(new Attribute(getMostCommonValue(samples, targetAttribute))); mTotal = samples.Rows.Count; mTargetAttribute = targetAttribute; mTotalPositives = countTotalPositives(samples); mEntropySet = calcEntropy(mTotalPositives, mTotal mTotalPositives); Attribute bestAttribute = getBestAttribute(samples, attributes); TreeNode root = new TreeNode(bestAttribute); DataTable aSample = samples.Clone(); foreach(string value in bestAttribute.values) { aSample.Rows.Clear(); DataRow[] rows = samples.Select(bestAttribute.AttributeName + " = " + "'" + value + "'"); foreach(DataRow row in rows) { aSample.Rows.Add(row.ItemArray); } ArrayList aAttributes = new ArrayList(attributes.Length - 1); for(int i = 0; i < attributes.Length; i++) { if (attributes[i].AttributeName != bestAttribute.AttributeName) aAttributes.Add(attributes[i]); } if (aSample.Rows.Count == 0) { 62 return new TreeNode(new Attribute(getMostCommonValue(aSample, targetAttribute))); } else { DecisionTreeID3 dc3 = new DecisionTreeID3(); TreeNode ChildNode = dc3.mountTree(aSample, targetAttribute, (Attribute[])aAttributes.ToArray(typeof(Attribute))); root.AddTreeNode(ChildNode, value); } } return root; } public TreeNode mountTree(DataTable samples, string targetAttribute, Attribute[] attributes) { mSamples = samples; return internalMountTree(mSamples, targetAttribute, attributes); } } Sau chương trình dựa vào khai niệm, thuật ngữ có văn vào để xử lý đưa định xem văn vào thuộc lớp văn số văn sở liệu Attribute[] attributes = new Attribute[] {ceu, temperatura, humidade, vento}; DataTable samples = getDataTable(); String[] chuoiTu = loaiBoNhieu(vbVao[dong]); for (int i = 0; i < chuoiTu.Length; i++) { string tuKhoa = ""; if (i < chuoiTu.Length - 1) tuKhoa = chuoiTu[i] + " " + chuoiTu[i + 1]; richTextBox1.AppendText(chuoiTu[i] + " "); DecisionTreeID3 id3 = new DecisionTreeID3(); TreeNode root = id3.mountTree(samples, chuoiTu[i], attributes); printNode(root, ""); 63 4.3.2 Kết thực nghiệm 4.3.2.1 Thuật toán K-NN Đối với thuật toán K-NN em kiểm thử với số văn kết thu mong muốn số vấn đề hạn chế, khắc phục Ví dụ: Văn vào: “Ngày nay, dạng liệu văn loại liệu dùng phổ biến Nó có mặt nhiều nơi, nhiều lĩnh vực đời sống xã hội, tinh thần, kinh tế khoa học…của người Bên cạnh đó, phát triển nhanh chóng mạng máy tính toàn cầu làm cho nhu cầu xử lý văn ngày trở nên cần thiết Bài toán xử lý văn đặt lâu toán hay khai thác liệu văn văn chia hai dạng: bán cấu trúc phi cấu trúc Dạng bán cấu trúc bao gồm : e-mail, văn HTML,…” Kết sau loại bỏ ký tự đặc biệt từ dừng: 64 Kết tìm kiếm thuật ngữ có văn vào: Kết tìm kiếm khái niệm: Khi ta tính độ tương tự văn theo công thức (12) với vectơ W trọng số ma trận với dòng văn sở liệu, cột thuật ngữ Như có có hai văn sở liệu gần với văn vào “Khoa Học” “Công Nghiệp” 4.3.2.2 Thuật toán ID3: Đối với thuật toán ID3, sau tìm thấy thuật ngữ văn vào (như trình bày mục trên) chương trình bắt đầu thực thuật toán với đầu vào thuật ngữ sở liệu cho kết : văn có nội dung gần giống với văn đầu vào văn “Khoa Học” với độ tương tự là: “0.521” 65 Kết luận: sau thử nghiệm với số văn em thấy chương trình thực số thuật toán (cụ thể ID3 K-NN ) phân loại văn cách khả quan Mặc dù chương trình số mặt hạn chế như: tốc độ xử lý chậm (nếu văn đưa vào lớn thời gian chờ đợi lâu) nhiều thao tác thừa (đặc biệt số thao tác mà tác động trực tiếp vào sở liệu), việc xử lý từ đa âm tiết gượng ép nên chưa tối ưu việc xử lý, … Tuy nhiên chương trình có thành công định, phân lớp văn theo thuật toán đề xuất, cải tiến chương trình để chương trình trở thành chương trình hoàn thiện thuật toán lẫn sở liệu 66 KẾT LUẬN Một số kết đạt Trong đồ án, em đưa cách tiếp cận phương pháp tách thuật ngữ, biểu diễn xử lý văn tiếng Việt Cách tiếp cận có ưu điểm sau: - Có khả khắc phục khó khăn toán xử lý tiếng Việt font chữ, chữ hoa, chữ thường, từ nhiều tiếng - Đây cách tiếp cận theo hướng người dùng, người dùng tự xác định chủ đề mong muốn hướng xử lý văn phù hợp với Ngoài người dùng xây dựng từ điển thuật ngữ riêng theo lĩnh vực mà quan tâm Điều thể tính cá nhân hóa hệ thống Tuy nhiên, hướng tiếp cận số hạn chế, việc xử lý văn thuật ngữ cho kết không tốt phương pháp xử lý văn khái niệm Hướng phát triển - Do hạn chế kết mô hình đưa ra, em dự kiến phát triển đề tài theo hướng tiếp cận lý thuyết tập mờ (Fuzzy theory) Cách tiếp cận gặp nhiều khó khăn bước xử lý hàm phụ thuộc Em dự kiến sử dụng giải thuật máy học, lý thuyết tập thô (Rough sets) để giải triệt để vấn đề - Hiện xu hướng phát triển chung Internet đa phương tiện Do em dự kiến xây dựng hệ thống hoàn chỉnh để tích hợp vào Internet, hệ thống có chức Agent có khả tự động bóc tách thông tin từ Internet theo yêu cầu người dùng 67 TÀI LIỆU THAM KHẢO [1] Fabrizio Sebastiani, March 2002 “Machine Learning in Automated Text Categorization”, ACM Computing Surveys, Vol 34, No 1, (Site: http://faure.iei.pi.cnr.it/~fabrizio/Publications/ACMCS02.pdf) [2] C Apte, F Damerau, and S.M Weiss, 1994 “Automated Learning of Decision Rules for Text Categorization”, ACM Transactions on Information Systems, (Site: http://www.research.ibm.com/dar/papers/pdf/tois94_with_cover.pdf) [3] D Lewis and M Ringuette, (1994) “A Comparison of Two Learning Algorithms for Text Categorization”, In 3rd Annual Symposium on Document Analysis and Information Retrieval, pp.81-93 (Site: http://citeseer.nj.nec.com/lewis94comparison.html) [4] D.E Johnson, F.J Oles, T Zhang and T.W Goetz, (2001, Oct ) “A Decision-Tree-Based Symbolic Rules Induction System for Text Categorization”, IBM Research Report [5] Eui-Hong (Sam) Han, George Karypis, Vipin Kumar, 1999 “Text Categorization Using Weight Adjusted k-Nearest Neighbor Classification” (Site: http://www-users.cs.umn.edu/~karypis/publications/Papers/PDF/wknn.pdf) [6] D Lewis, (1991) “Representation and Learning in Information Retrieval”, PhD Thesis, Graduate School of the University of Massachusetts (Site: http://citeseer.nj.nec.com/lewis91learning.html) [7] T Joachims, (1998) “Text Categorization with Support Vector Machines: Learning with many Relevant Features”, Proceedings 10th European Conference on Machine Learning (ECML), pp.137-142 (Site: http://citeseer.nj.nec.com/joachims98text.html) [8] Ilya Baraev, November 2000 “Information Retrieval: Standard and AIbased methods”, [9] T.M Mitchell (1997), “Machine Learning”, Mc Graw Hill, pp 52-76 68