Gi i thi u ch ng trình: 51 

Một phần của tài liệu 0762Lìm hiểu Search Engine và xây dựng ứng dụng minh hoạ. (Trang 52 - 71)

_ Ch ng trình s tìm ki m t trong trang web offline (đã t i v t ngu n Internet).

_ Qui trình th c thi c a ch ng trình:

• Quét file, th m c trong th m c root (do ng i l p trình đnh s n).

• Tìm t p tin HTML. N u có s x lý t p tin HTML (đánh ch m c, …). Ng c l i quét ti p th m c con đ l y t p tin HTML cho đ n khi nào h t.

Root Folder Path

_ Scan all folders and files. _ Having folders and files ?

Are there HTML or HTM files ?

YES

NO

_ Open this file _ Scan all words to index

_ Save results in cache YES

NO

II. Mơ hình ch ng trình:

 

1. Ý NGH A:

_ CATALOG qu n lý danh sách các WORD.

_ WORD qu n lý danh sách các FILE. 2. L p FILE:

_ Ch a thông tin c a t p tin mà ch ng trình quét đ c.

_ Thu c tính:

• Url: đ ng d n đ n t p tin HTML.

• Title: t a đ t p tin HTML.

• FileDate: th i gian mà t p tin đ c quét.

• Size: dung l ng t p tin.

• Description: chú thích t p tin HTML.

_ Ph ng th c:

• Kh i t o: File(url, title, filedate, size, desc). 3. L p WORD:

_ Ch a danh sách các FILE mà ch ng trình quét đ c.

_ Thu c tính: 1 1...n 1...n 1 Catalog index: Hashtable Catalog () Add (word, file)

Search (word): Hashtable

Word

text: string

fileCollection: Hashtable Word (text, file)

Add (file) InFiles(): Hashtable File url: string title: string fileDate: Date size: long int Desc: string

Lê Nguy n ồn Trí – 0851010294 53/70 Võ Nguy n Minh Tuân - 0851010308

• fileCollection (Hashtable): ch a danh sách các FILE.

• Text (String) : t .

_ Ph ng th c:

• Kh i t o: Word (text, file)

• Thêm: Add (file)

• L y danh sách t p tin: Hashtable InFiles() 4. L p CATALOG: _ Ch a danh sách các WORD. _ Thu c tính: • Index (Hashtable) _ Ph ng th c: • Kh i t o: Catalog ()

• Thêm: Add (word, file)

_ Tìm ki m: Hashtable Search (word) 5. T p tin Crawler.aspx:

_ Xây d ng CATALOG và l u k t qu vào cache. 6. T p tin Home.aspx:

_ Truy v n CATALOG t cache và cho phép tìm ki m t mà ng i dùng nh p vào.

III. Chi ti t ch ng trình: 1. L p FILE:

public class File {

public string Url; public string Title;

public string Description; public DateTime CrawledDate; public long Size;

DateTime datecrawl, long length) { Url = url; Title = title; Description = description; CrawledDate = datecrawl; Size = length; }

public override string ToString() {

return "\tFILE :: " + Url + " -- " + Title + " - " +

Size + " bytes + \n\t" + Description + "\n"; }

}

2. L p WORD:

using System.Collections; public class Word

{

//chua tu da co trong danh muc (co trong Catalog)

public string Text;

// Danh sach cac file co tu xuat hien trong do. private Hashtable fileCollection = new Hashtable();

// Thiet lap voi file duoc tham chieu dau tien. public Word(string text, File inFile, int position) {

Lê Nguy n oàn Trí – 0851010294 55/70 Võ Nguy n Minh Tuân - 0851010308

Text = text;

fileCollection.Add(inFile, 1); }

// Them file dang tham chieu tu dang xet public void Add(File inFile, int position) {

// If da co file trong ds thi cong gia tri them 1 if (fileCollection.ContainsKey(inFile))

{

/*int nWordCount = (int)fileCollection[inFile];

fileCollection[inFile] = nWordCount + 1;*/ fileCollection[inFile] = (int)fileCollection[inFile] + 1; } else { fileCollection.Add(inFile, 1); } }

// Tra ve ds file chua tu (gia tri la wordCount) public Hashtable InFiles()

{

}

public override string ToString() {

string temp = "";

foreach (object tempFile in fileCollection.Values) temp += ((File)tempFile).ToString();

return "\tWORD :: " + Text + "\n\t\t" + temp + "\n"; } } 3. L p CATALOG: using System.Collections; using System.IO; using System.Text.RegularExpressions; public class Catalog

{

// Ds doi tuong Word private Hashtable index;

public Catalog() {

index = new Hashtable(); }

public int Length {

Lê Nguy n ồn Trí – 0851010294 57/70 Võ Nguy n Minh Tuân - 0851010308

{

return index.Count; }

}

// Them cap Word/File vao Catalog (dua no vao index) public bool Add(string word, File inFile, int position) {

// xet dieu kien de tu muon them chi duoc index 1 lan // if tu muon them da dc index thi add file tham chieu

do vao doi tuong Word

// Nguoc lai thi them word vao index if (index.ContainsKey(word))

{

Word theWord = (Word)index[word]; theWord.Add(inFile, position); }

else {

Word theWord = new Word(word, inFile, position); index.Add(word, theWord);

}

return true; }

// Tra ve tat ca files co chua tu duoc search (Dau ra la Hashtable)

{ searchWord = searchWord.Trim('?', '\"', ',', '\'', ';', ':', '.', '(', ')').ToLower(); /// <summary> /// If tu do co trong index

/// thi dung phuong thuc InFiles cua Word obj tra

ve ds file chua tu do

/// Nguoc lai thi tra ve null /// </summary>

Hashtable retVal = null;

if (index.ContainsKey(searchWord)) {

Word theWordMatch = (Word)index[searchWord]; retVal = theWordMatch.InFiles();

}

return retVal; }

public override string ToString() {

string wordlist = "";

return "\nCATALOG :: " + index.Values.Count.ToString()

+ " words.\n" + wordlist; }

Lê Nguy n ồn Trí – 0851010294 59/70 Võ Nguy n Minh Tuân - 0851010308

4. Crawler.aspx:

_ Nhi m v đ u tiên là xây d ng các t p tin HTML mà chúng ta mu n tìm ki m.

_ Có 2 cách đ tìm t p tin:

• Spidering – b t/theo các đ ng d n (link) trong toàn b website (ho c các trang web).

• Crawling – vi c thu th p d li u s thông qua các t p tin, th m c và l p ch m c t t c các t p tin trong th m c đó b ng cách s d ng t p tin h th ng.

_ ch ng trình này chúng em hi n th c ch ng trình theo cách th 2.

private void CrawlCatalog(string sRoot, string sPath)

{

DirectoryInfo m_dir = new DirectoryInfo(sPath);

// Tao vong lap lay files

foreach (FileInfo fInfo in m_dir.GetFiles(m_filter)) {

Response.Write(DateTime.Now.ToString("t") + " " + m_url + sPath.Substring(m_path.Length) + "\\" + fInfo.Name);

Response.Flush();

// <Phan code o day da thu gon de dien giai phia duoi>

} // foreach xu ly (danh dau/phan tich) noi dung file

foreach(DirectoryInfo d in m_dir.GetDirectories()) {

CrawlCatalog(sRoot, sPath + "\\" + d.Name); }// het lap quet folder

}// CrawlCatalog

Hình 4: Thu th p các t p tin – đã t i v t trang http://www.java2s.com/

_ Q trình th c hi n craw:

• L y danh sách t p tin và th m c trong th m c g c (đã hồn thành).

• M t p tin đ u tiên và đ c n i dung c a nó.

• Tìm tiêu đ (Title), mơ t (Description) và tính kích th c t p tin HTML.

• T o đ ng d n URL c a t p tin đó (khi craw ch ng trình s l y đ ng d n h th ng. Vì v y ph i t o đ ng d n URL đ

ng i dùng click vào k t qu đ d n đ n trang web đó)

Lê Nguy n ồn Trí – 0851010294 61/70 Võ Nguy n Minh Tuân - 0851010308

• Thêm m i WORD vào CATALOG và đ ng d n URL t p tin ch a t .

• óng t p tin đang xét và m t p tin ti p theo. N u đã quét h t t p tin trong th m c đó thì qt th m c ti p theo.

• Quét cho đ n khi khơng cịn t p tin.

_ Có 3 cơng vi c chính ph i làm:

• M t t c các t p tin tìm th y - s d ng không gian tên System.IO.

DirectoryInfo m_dir = new DirectoryInfo(sPath);

// Tao vong lap lay files

foreach (FileInfo fInfo in m_dir.GetFiles(m_filter)) { Response.Write(DateTime.Now.ToString("t") + " " + m_url + sPath.Substring(m_path.Length) + "\\" + fInfo.Name); Response.Flush(); sFileUrl = m_url + sPath.Substring(m_path.Length).Replace("\\", "/") + "/" + fInfo.Name;

StreamReader reader = System.IO.File.OpenText(sPath + "\\" + fInfo.Name);

// Do noi dung trang web vao sFileContents sFileContents = reader.ReadToEnd();

reader.Close();

• Tìm ki m nh ng ch đ c bi t trong t p tin (title, description,…) – s d ng không gian tên System.String ho c System.RegularExpressions

Match TitleMatch = Regex.Match(sFileContents,

"<title>([^<]*)</title>", RegexOptions.IgnoreCase |

RegexOptions.Multiline);

sFileTitle = TitleMatch.Groups[1].Value;

// ----- Xu ly the META data -----

Match DescriptionMatch = Regex.Match(sFileContents,

"<META NAME=\"DESCRIPTION\" CONTENT=\"([^<]*)\">",

RegexOptions.IgnoreCase | RegexOptions.Multiline);

sFileDesc = DescriptionMatch.Groups[1].Value;

// ----- Lay kich thuoc ----- nFileSize = sFileContents.Length;

// ----- Lay noi dung tap tin (Loai bo cac the HTML) -----

string sWordsOnly = stripHtml(sFileContents);

// ----- Thu thap META DESC -----

if (sFileDesc == null || sFileDesc == String.Empty) { if (sWordsOnly.Length > 350) sFileDesc = sWordsOnly.Substring(0, 350); else if (sWordsOnly.Length > 100) sFileDesc = sWordsOnly.Substring(0, 100); else sFileDesc = sWordsOnly; }

Lê Nguy n ồn Trí – 0851010294 63/70 Võ Nguy n Minh Tuân - 0851010308

• Phân tích thành nh ng t riêng l - s d ng không gian tên System.RegularExpressions.

protected string stripHtml(string sHTML) {

// Bo the HTML

Regex objRegExp = new Regex("<(.|\n)+?>");

// Thay cac the bang khoang trang

string sOutPut = objRegExp.Replace(sHTML, " ");

// Doi <,> thanh &lt; and &gt;

sOutPut = sOutPut.Replace(">", "&lt;"); sOutPut = sOutPut.Replace("<", "&gt;");

return sOutPut; }

• Xóa các kho ng tr ng khơng c n thi t

Regex r = new Regex(@"\s+"); // Loai bo khoang trang

sWordsOnly = r.Replace(sWordsOnly, " "); // Loai bo nhung khoang trang thua

string[] sWordsOnlyCompressWhitespace = sWordsOnly.Split(' ');

_ Thêm WORD vào CATALOG (T o n i dung cho CATALOG)

// Lap vong quet all tu cua file

int i = 0; // Vi tri cua tu tong file string sKey = "";

// Dua all tu vao catalog

foreach (string sWord in sWordsOnlyCompressWhitespace)

{

sKey = sWord.Trim(' ', '?', '\"', ',', '\'', ';', ':', '.', '(', ')').ToLower();

m_catalog.Add(sKey, inFile, i);

i++; }

4. Xây d ng ph ng th c Search

_ Sau khi catalog đ c xây d ng thì:

• CATALOG ch a danh sách các WORD.

• WORD ch a danh sách các FILE.

_ u vào là t mu n tìm.

_ u ra là danh sách các FILE mà ch a t đó.

public Hashtable Search(string searchWord)

{ searchWord = searchWord.Trim('?', '\"', ',', '\'', ';', ':', '.', '(', ')').ToLower(); /// <summary> /// If tu do co trong index

/// thi dung phuong thuc InFiles cua Word obj tra ve ds file chua tu do

/// Nguoc lai thi tra ve null /// </summary>

Hashtable retVal = null;

Lê Nguy n ồn Trí – 0851010294 65/70 Võ Nguy n Minh Tuân - 0851010308

{

Word theWordMatch = (Word)index[searchWord]; retVal = theWordMatch.InFiles();

}

return retVal; }

5. Home.aspx

_ Sau khi nh n nút search, ch ng trình s tìm t đã đánh ch s b ng cách s d ng ph ng th c Hashtable.ContainsKey(). Ph ng th c này đ c hi n th c b i MS và r t h u d ng. ây là ph ng th c tìm ki m chính s đ c s d ng trong Catalog.Search().

_ Ph ng th c Catalog.Seach() s tr v Hashtable ch a các FILE có t mu n tìm. Sau khi tìm ki m s xu t k t qu theo đnh d ng HTML.

// Search

// tra ve file co chua tu search

_ truy su t searchResultArray chúng ta ph i s d ng đ i t ng Dictionary đ truy su t. Trong đó: FILE å khóa (key); RANK (s l n t xu t hi n trong trang) å giá tr (value).

_ V n đ đây là k t qu ch a đ c s p x p theo RANK. s p x p chúng ta c n vòng l p quét t t c các k t qu trong

searchResultArray đ a vào đ i t ng SortedList.

SortedList slOutPut = new SortedList(searchResultArray.Count); DictionaryEntry fo;

File inFile;

string sResult = "";

// Xay dung de hien moi ket qua (dang ket qua co link)

foreach (object foundInFile in searchResultArray)

{

// Xay dung dau ra HTML trong sorted list

// searchResults duoc sap xep khi duoc add trong SortedList

fo = (DictionaryEntry)foundInFile;

inFile = (File)fo.Key;

int nRank = (int)fo.Value;

_ Sau khi dùng ph ng th c search trên s tr v Hashtable. N u k t qu tr v là null thì d ng. Ng c l i, ch ng trình s chu n hóa k t qu theo ngôn ng HTML đ ti n xu t ra màn hình.

// Dinh dang HTML dau ra

sResult = ("<a href=" + inFile.Url + ">");

sResult += ("<b>" + inFile.Title + "</b></a>");

sResult += (" <a href=" + inFile.Url + " target=\"_TOP\" "); sResult += ("title=\"open in new window\" style=\"font-size:xx-

small\">&uarr;</a>");

sResult += (" <font color=gray>(" + nRank + ")</font>"); sResult += ("<br>" + inFile.Description + "...");

Lê Nguy n ồn Trí – 0851010294 67/70 Võ Nguy n Minh Tuân - 0851010308

sResult += ("<br><font color=green>" + inFile.Url + " - " + inFile.Size);

sResult += ("bytes</font> <font color=gray>- " + inFile.CrawledDate + "</font><p>");

_ Tr c khi xu t ra màn hình, ch ng trình s dùng SortedList (do MS hi n th c) đ thêm k t qu sResult (運 trên) å giá tr

(value) và RANK å khóa (key) – đ s p x p

searchResultArray. N u có k t qu cùng RANK thì ch ng trình s c ng thêm ph n sResult vào k t qu đó.

_ đ a k t qu có RANK cao lên đ u trang chúng ta ph i nhân RANK v i “-1” vì SortedList s p x p theo th t t ng d n.

int nSortRank = (nRank * -1); // nhan -1 de diem lon hon duoc

len noc

//int nSortRank = nRank;

if (slOutPut.Contains(nSortRank)) { slOutPut[nSortRank] = ((string)slOutPut[nSortRank]) + sResult; } else { slOutPut.Add(nSortRank, sResult); }

sResult = ""; // Xoa ja tri cua sResut cho vong lap tiep theo

_ Và đo n code d i s xu t ra màn hình thành qu trên và s trang có t ng i dùng nh p.

// Xuat ra man hinh

foreach (object rows in slOutPut)

{

Response.Write((string)((DictionaryEntry)rows).Value); }

6. L u ý:

_ N u mu n thay đ i th m c g c mà ch ng trình quét, ta thay đ i bi n m_path trong t p tin Crawler.aspx.cs:

if (m_path == null)

{

string sPathProject = Server.MapPath(".");

//m_path = Server.MapPath(".");

//m_path = @"C:\Documents and Settings\xp\Desktop\CODE DEMO #2\DemoSearchEngine\CatalogCpp\www.java2s.com\Code\TuTao";

m_path = sPathProject +

@"\CatalogCpp\www.java2s.com\Code\TuTao";

Lê Nguy n ồn Trí – 0851010294 69/70 Võ Nguy n Minh Tuân - 0851010308

IV. K t lu n:

Do th i gian và n ng l c mã hố ch ng trình theo mơ hình lý thuy t cịn h n nên ch ng trình có r t nhi u thi u sót. Mong th y và các b n đóng góp ý ki n đ ch ng trình đ c hồn thi n h n.

1. Khuy t đi m c a ch ng trình:

_ Ch ng trình ch tìm ki m đ c M T t .

_ Giao di n ch a b t ch a thân thi n, ch a th c hi n phân trang.

_ L u CSDL trong cache nên còn h n ch v dung l ng. Ch a th c hi n l u tr bên ngoài cách đ c vì g p khó kh n trong khi đ a d li u tr vào cache đ x lí.

_ Khi m i ch y å ch ng trình cịn crawling lâu. Do ph i quét t t c các t p tin HTML. VD: trong toàn b th m c root (k c th m c con) có N t p tin thì ch ng trình ph i quét N l n.

_ Khi ng i dùng nh p nh ng t quá ph bi n nh : and, or, … thì ch ng trình ch y r t lâu do ch ng trình ch a xác đ nh đ c các ng ng cao, ng ng tháp và còn h n ch v s x lý STOP WORD.

_ Ch a ng d ng đ c các thu t tốn tính tr ng s đã nêu trong ph n lý thuy t vì h n ch trong vi c áp d ng thu t toán vào th c t . Vi c tính tr ng s ch đ n gi n d a vào s l n xu t hi n c a t . Ch a phân tích và đánh giá đ c câu truy v n c a ng i dùng mà ch đ n gi n hi u nó nh m t t .

_ Vi c th c hi n Crawling ch đ n gi n là thu th p các t p tin html, ch a th c hi n đa d ng hoá nhi u t p tin nh video, hình nh, pdf…

_ Vi c Crawling b gi i h n trong ph m vi th m c n i b , ch a th c hi n đ c vi c Crawling tr c tuy n đ n các WebServer.

2. u đi m c a ch ng trình:

_ D hi n th c SearchEngine cho ng i m i tìm hi u v đ tài này.

_ T c đ truy su t nhanh (đ i v i nh ng t ít thơng d ng, chun mơn,…)

_ Dung l ng ch ng trình nh .

PH N C: CÁC TÀI LI U THAM KH O

_ Introduction to Information Retrieval-Cambridge University Press, first published 2008(Christoper D.Manning – Stanford University, Prabhakar Raghavan – Yahoo! Research, Hinrich Schutze-University of Stuttgart)

_ Modern Information Retrieval – AMC press, New Yort, first published 1999 ( Ricardo Baeza-Yates, Berthier Riberiro-Neto).

_ Information Retrieval and Web Search – Department of Mathematics, North Caroline State University.(Amy Langville , Carl Meyer).

_ PH NG PHÁP PHÂN C M TÀI LI U WEB VÀ ÁP D NG VÀO MÁY TÌM KI M

(Lu n v n th c s c a Nguy n Th Thu H ng-Tr ng đ i h c Công Ngh ,

Một phần của tài liệu 0762Lìm hiểu Search Engine và xây dựng ứng dụng minh hoạ. (Trang 52 - 71)

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

(71 trang)