Cỏc bước của chương trỡnh

Một phần của tài liệu Xử lý văn bản tiếng việt theo mô hình tập thô dung saii (Trang 102 - 107)

Chương trỡnh được cài đặt bằng ngụn ngữ C++, sử dụng cỏc thư viện STL, BOOST và một số thư viện ThirdParty khỏc, mụi trường chạy là Windows. Ngồi ra, để tiến hành so sỏnh với một số phương phỏp khỏc, tỏc giả sử dụng thờm một số cụng cụ bổ trợ sau:

SenseCluster: là một tiện ớch viết bằng ngụn ngữ Perl cho phộp phõn nhúm cỏc đối tượng giống nhau dựa trờn phương phỏp học khụng

giỏm sỏt (unsupervised learning). Tiện ớch này cũng hỗ trợ việc phõn tớch trị riờngvector riờng. Ngồi ra nú cũng hỗ trợ kỹ thuật LSA.

Graphical Clustering Toolkit (gCLUTO): Là ứng dụng giao diện đồ họa cho phộp clustering cỏc dữ liệu đa chiều và phõn tớch cỏc đặc trưng của cỏc cluster. Nú cũng cung cấp cỏc cụng cụ để trực quan húa dữ liệu dựa trờn ma trận, biểu diễn dữ liệu theo kiểu đỉnh nỳi (sử dụng OpenGL).

SVDPACKC: là một thư viện mĩ nguồn mở (ngụn ngữ C) dựng để phõn tớch SVD.

Chương trỡnh gồm cú cỏc bước cơ bản như sau:

Bước tin x lý văn bn: Cỏc văn bản đầu vào được tập hợp lại trong một thư mục trờn đĩa cứng, sau đo sẽ thực hiện quỏ trỡnh tỏch thuật ngữ cho cỏc văn bản, ở đõy tỏc giả luận văn sử dụng chương trỡnh

vnTokenizer được viết bởi tỏc giả Lờ Hụng Phương, đõy là chương trỡnh tỏch thuật ngữ tiếng Việt tương đối tốt. Trước khi tỏch từ, cỏc văn bản được chuyển về dạng chữ in thường, như vậy cỏc thuật ngữđược tỏch sẽ là chữ thường. Cỏc từ dừng trong tiếng Việt cũng được loại bỏ. Khi kết thỳc bước này, ta sẽ cú ma trận tần số-tài liệu dựng để biểu diễn số lần xuất hiện của một thuật ngữ trong một tài liệu, ký hiện ma trận này là TF.

Tớnh cỏc lp dung sai ca cỏc thut ng: Với một ngưỡng θ cho trước, ta sẽ tớnh cỏc lớp dung sai cho cỏc thuật ngữ. Kết thỳc quỏ trỡnh này ta thu được một ma trận nhị phõn để biểu diễn cỏc lớp dung sai của cỏc thuật ngữ; đõy là một ma trận kớch thước NìN với N là tổng số thuật ngữ, phần tử (i, j) =1 núi lờn rằng thuật ngữ j thuộc về lớp dung sai của thuật ngữi, bằng 0 nếu ngược lại, ký hiệu ma trận này là TOL.

Tớnh xp x trờn, xp x dưới ca cỏc tài liu: Dựa vào ma trận tần suất và ma trận biểu diễn lớp dung sai của cỏc thuật ngữ đĩ thu được từ 2 bước ở trờn, ta tiến hành tớnh cỏc xấp xỉ trờn và xấp xỉ dưới cho cỏc tài

liệu. Kết thỳc bước này ta cú một ma trận nhị phõn kớch thước NìM với

N là tổng số thuật ngữ, M là tổng số tài liệu, ký hiệu ma trận này là

UPPER, nếu phần tửUPPER[i, j] = 1 thỡ cú nghĩa là thuật ngữi thuộc về xấp xỉ trờn của tài liệu j, nếu ngược lại UPPER[i, j] = 0. Tương tự, ta cú

LOWER là ma trận nhị phõn để biểu diễn xấp xỉ dưới cho cỏc tài liệu.

Xõy dng mụ t cho cỏc tài liu: Căn cứ vào cỏc kết quả đĩ cú ở cỏc bước ở trờn, ta sẽ biểu diễn cỏc văn bản theo mụ hỡnh TRSM, như vậy kết thỳc bươc này ta cú ma trận trọng số, ký hiệu là WEIGHT. Mỗi phần tử

WEIGHT[i, j] sẽ cho biết trọng số của thuật ngữi trong tài liệu j.

Xđồng nghĩa: Sử dụng giải phỏp thứ nhất như đĩ trỡnh bày ở phần trờn. Nhỡn chung cả 2 giải phỏp đều cần đến bước phõn tớch SVDđể rỳt gọn khụng gian của ma trận đầu vào sang một khụng gian xấp xỉ mới cú số chiều bộ hơn. Sau đú tỡnh toỏn cỏc giỏ trị tương tự giữa cỏc từ trong khụng gian đĩ rỳt gọn này.

Chương trỡnh cú cỏc lớp cơ bản sau:

• Lớp IndexTerm dựng để lưu trữ một thuật ngữ, trong lớp này cú một member để lưu lại danh sỏch cỏc tài liệu chứa thuật ngữ này cựng với cỏc đặc trưng thống kờ khỏc chẳng hạn như số lần xuất hiện của thuật ngữ trong tài liệu hay trọng số của thuật ngữ trong tài liệu.

class IndexTerm

{

public:

IndexTerm(const std::wstring&); ~IndexTerm(void);

// Toan tu so sanh 2 thuat ngu

bool operator == (const std::wstring&);

bool operator == (const IndexTerm&);

// Toan tu lay ve trong so cua thuat ngu trong tai lieu // nIndex

double& operator [](int nIndex);

// Phuong thuc lay so lan xuat hien cua thuat ngu trong 1 tai // lieu

int GetNumOccurrence(int iDocIndex);

public:

// Tong so thuat ngu

static int N;

// Index cua thuat ngu

int m_nIndex;

std::wstring m_sTerm;

// Danh sach cac tai lieu chua thuat ngu nay cung cac dac // trung thong ke khac

std::vector<Statistic> m_vDocList;

// Lop dung sai cua thuat ngu

std::vector<IndexTermPtr_t> m_vToleranceClass; };

• Lớp Document: Dựng để lưu trữ một tài liệu, nú cú một thuộc tớnh để lưu trữ tất cả cỏc thuật ngữ xuất hiện trong tài liệu, mặt khỏc cũng cú cỏc thành viờn để lưu trữ cỏc xấp xỉ trờn và xấp xỉ dưới của tài liệu.

class Document

{

public:

Document(const std::string& strFileName); ~Document(void);

// Toan tu tinh so lan xuat hien cua thuat ngu pTerm trong

// tai lieu

int operator [] (IndexTermPtr_t pTerm);

// Dua them mot thuat ngu vao danh sach

void AddTerm(IndexTermPtr_t pTerm);

public:

// Tong so tai lieu thu thap duoc

static int M;

// Chi so cua tai lieu

int m_nIndex;

// Ten file tuong ung voi tai lieu nay

std::string m_sFileName;

// Danh sach thuat ngu xuat hien trong tai lieu

std::vector<IndexTermPtr_t> m_vTerms;

// Xap xi tren cua tai lieu nay

std::vector<IndexTermPtr_t> m_vUpperApproximation;

// Xap xi duoi cua tai lieu nay

std::vector<IndexTermPtr_t> m_vLowerApproximation; };

• Lớp DocCollection: Dựng để lưu trữ tồn bộ tập cỏc văn bản đầu vào, nú cú cỏc phương thức để tớnh toỏn cỏc lớp dung sai, tớnh giỏ trị cho ma trận tần suất, ma trận trọng số tài liệu-thuật ngữ.

class DocCollection

{

public:

DocCollection(const std::string& sPath);

DocCollection(std::string sPath, int iThreshold); ~DocCollection(void);

// Doc thu muc chua tap cac van ban dau vao, trich xuat noi

// dung cac file

void Init();

// Tach cac thuat ngu trong 1 chuoi

// Ghi ra stream

friend std::wofstream& operator << (std::wofstream& aStream,

const DocCollection& docs);

// So tai lieu chua dong thoi 2 thuat ngu

int NumOccur(IndexTermPtr_t pTerm1, IndexTermPtr_t pTerm2);

// So tai lieu chua thuat ngu

int NumOccur(IndexTermPtr_t pTerm);

// So lan xuat hien cua 1 thuat ngu trong 1 tai lieu

int NumOccur(IndexTermPtr_t pTerm, DocumentPtr_t pDoc);

// Lop dung sai cua mot thuat ngu

std::vector<IndexTermPtr_t>

ToleranceClassOfTerm(IndexTermPtr_t pTerm);

// Inclusion function, ham chua

double InclusionFunction(std::vector<IndexTermPtr_t> vt1,

std::vector<IndexTermPtr_t> vt2);

// MembershipFunction cua mot thuat ngu doi voi 1 tap hop

double MembershipFunction(IndexTermPtr_t pTerm,

std::vector<IndexTermPtr_t> vOneSet);

// Tinh toan xap xi tren cua 1 tap hop

std::vector<IndexTermPtr_t>

UpperApproximationCalculate(std::vector<IndexTermPtr_t> vSetOfTerms);

// Tinh toan xap xi tren cua 1 tai lieu

void UpperApproximationCalculate(DocumentPtr_t pDoc);

// Tinh toan xap xi duoi cua 1 tap hop

std::vector<IndexTermPtr_t>

LowerApproximationCalculate(std::vector<IndexTermPtr_t> vSetOfTerms);

// Tinh toan xap xi duoi cua 1 tai lieu

void LowerApproximationCalculate(DocumentPtr_t pDoc);

// Tinh trong so cua mot thuat ngu trong mot tai lieu

double TermWeight(IndexTermPtr_t pTerm, DocumentPtr_t pDoc);

// Gan trong so cho tat ca cac thuat ngu xuat hien trong mot

// tai lieu

void TermWeight(DocumentPtr_t pDoc);

// Gan trong so cho cac thuat ngu trong tai lieu

void AssignTermWeight(); void AssignTermCooccurrenceMatrix(); void AssignToleranceClassesMatrix(); public: / /Nguong int m_nThreshold;

// Thu muc chua cac tap van ban dau vao

std::string m_sDir;

// Tap cac tai lieu

std::vector<DocumentPtr_t> m_vDocuments;

// Danh sach cac IndexTerm

std::vector<IndexTermPtr_t> m_vIndexTerms;

// Ma tran tan suat tai lieu-thuat ngu ( dung mang 1 chieu de // bieu dien mang 2 chieu)

int *m_nTermDocNumOccurMatrix;

// Ma tran term co-occurrence (dung mang 1 chieu de bieu dien // mang 2 chieu)

int *m_nTermCooccurrence;

// Ma tran luu cac lop dung sai cua cac thuat ngu (dug mang 1

// chieu de bieu dien mang 2 chieu)

// Ma tran trong so tai lieu - thuat ngu (dung mang 1 // chieu de bieu dien mang 2 chieu)

double *m_TermDocMatrix;

};

• Lớp clusterđể biểu diễn một cluster

// Lop bieu dien mot cluster

class Cluster

{

public:

// Ham khoi tao

Cluster(DocumentPtr_t, DocCollection&); ~Cluster(void);

// So tai lieu trong cluster chua thuat ngu pTerm

int operator [] (IndexTermPtr_t pTerm);

// Thuc hien viec mo ta lai cluster

void ReDetermineRepresentation(DocCollection&);

public:

// Ngưỡng dung trong viec tao cluster

static double threshold;

// Luu tru cac tai lieu cung voi gia tri membership

std::vector<DocMembership_t> m_vMemberships;

// Bieu dien mot cluster duoi dang cac thuat ngu va trong so // di kem

std::vector<IndexTermWeight_t> m_vRepresentation;

// Chua tham chieu den mot tap cac doi tuong can clustering

DocCollection & collection; };

Một phần của tài liệu Xử lý văn bản tiếng việt theo mô hình tập thô dung saii (Trang 102 - 107)

Tải bản đầy đủ (PDF)

(127 trang)