Cài đặt tác tử di động tìm kiếm, trích rút thông tin

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu triển khai công nghệ tác tử di động trên cơ sở hạ tầng mạng ngang hàng JXTA luận văn ths công nghệ thông tin 1 01 10 (Trang 63 - 77)

4.4 Thiết kế, cài đặt tác tử di động tìm kiếm và trích rút thông tin

4.4.4 Cài đặt tác tử di động tìm kiếm, trích rút thông tin

Dựa trên thuật toán tìm kiếm và trích rút thông tin như đã trình bày ở trên, xây dựng

lớp WebExtraction gồm các phương thức: parseHTML(), createTokens(),

findPDU() và doWebExtraction().

Trên môi trường tác tử di động trình bày ở trên, kết hợp cùng với việc tìm kiếm và trích rút thông tin, xây dựng hai tác tử di động getExtraction và getFile với các chức năng:

- getExtraction: tham số là địa chỉ Website tài liệu cần trích rút thông tin, kết quả trả về là danh sách các tài liệu và địa chỉ download tương ứng

- getFile: tham số là địa chỉ download tài liệu, kết quả trả về là file tài liệu Thiết kế mỗi tác tử di động trên môi trường tác tử di động JXTA đều phải tuân theo giao diện JavaMobileAgent:

public interface JavaMobileAgent {

public byte[] start( PeerGroup group,byte[] textIn, String params[][], Vector result1, Vector result2, Binary result3); }

Để khởi tạo môi trường JXTA và môi trường tác tử di động trong Windows, thực hiện lệnh:

java -Dnet.jxta.tls.principal=secure -Dnet.jxta.tls.password=secure11 -cp .;..\lib\jxta.jar;..\lib\log4j.jar;..\lib\jxtasecurity.jar;..\lib\cryptix- asn1.jar;..\lib\cryptix32.jar;..\lib\bcprov-

jdk14.jar;..\lib\jxtaptls.jar;..\lib\org.mortbay.jetty.jar;..\lib\javax.ser vlet.jar;..\lib\getopt.jar;..\lib\log4j.jar;..\lib\agents.jar

Trong đó gói agents.jar chứa tất cả các lớp cần thiết để thực hiện môi trường tác tử di động:

AgentDefs.class AgentService.class AgentListener.class

AgentRdvApp.class agentClient.class getExtraction.class gc.class getFile.class

AgentEventResponder.class JavaMobileAgent.class

ping.class Util.class

Hình 4-6 cho thấy quá trình khởi tạo môi trường tác tử di động. Bước đầu tiên là phải khởi tạo môi trường mạng ngang hàng JXTA. Lệnh “?” cho thấy danh sách các chức năng có thể được thực hiện trong môi trường tác tử di động JXTA.

Hình 4-7 cho thấy kết quả sau khi đánh lệnh “s”, đó là danh sách các điểm nút đang hoạt động trên mạng: peer 1, peer 2 và rdv1. Trong đó peer 1 là điểm nút hiện thời, peer 2 là điểm nút lân cận và rdv1 là điểm nút môi giới (rendezvous peer).

Hình 4-7 Danh sách các điểm nút đang tồn tại trên mạng

Hình 4-8 thể hiện quá trình khởi tạo tác tử di động getExtraction với tham số là địa chỉ http://localhost/ieee/jxta.htm và điểm nút đích mà tác tử di động di chuyển đến là peer 2, sau khi tác tử di động di chuyển thành công, sẽ chờ kết quả trả về trong thời gian 10 giây.

Hình 4-9 thể hiện là tại peer 2, khi tác tử di động di chuyển đến, thực hiện các lệnh (trích rút thông tin từ trang Web: http://localhost/ieee/jxta.htm), nhận kết quả và sau đó di chuyển trở về peer 1.

Hình 4-9 Peer 2 nhận tác tử di động, thực hiện việc trích rút thông tin và sau đó gửi trả về Peer 1 các kết quả.

Hình 4-10 là kết quả nhận được sau khi tác tử di động di chuyển trở về, đó là danh sách các tài liệu và địa chỉ URL tương ứng.

KT LUN

Công nghệ mạng ngang hàng JXTA ra đời với các giao thức mở đã giúp cho mọi thiết bị, máy tính có thể dễ dàng tham gia vào mạng ngang hàng mà không bị giới hạn bởi các rào cản như tường lửa hay NAT. Các giao thức này đều được khai báo dựa trên các thông cáo định dạng XML. Luận văn đã trình bày những khái niệm cơ bản về mạng ngang hàng JXTA, về tác tử di động và môi trường tác tử di động trên JXTA. Đồng thời luận văn đã có những bổ sung một số chức năng cho môi trường tác tử di động và xây dựng thành công tác tử di động thực hiện trích rút thông tin. Chương trình đã được chúng tôi thử nghiệm trên môi trường Windows và giữa hai máy tính trong cùng mạng cục bộ. Để thử nghiệm ứng dụng tác tử di động giữa máy tính tại nhà và máy tính nằm trong mạng Đại học Quốc gia Hà Nội (máy tính này nằm trong mạng bị ngăn bởi tường lửa và nó có khả năng truy cập vào cơ sở dữ liệu thư viện điện tử để download) trên môi trường mạng diện rộng Internet thì cần thiết phải có điểm nút môi giới nằm ngoài mạng của Đại học Quốc gia Hà Nội.

Trong thời gian tới đây chúng tôi sẽ tiếp tục hoàn thiện chương trình để có thể trở thành sản phẩm hữu ích phục vụ cho những nhà nghiên cứu muốn tìm kiếm và download tài liệu trên các thư viện điện tử thuê bao của Đại học Quốc gia Hà Nội ngay tại nhà riêng.

PH LC

Phần này sẽ trình bày về mã nguồn của lớp trích rút thông tin (WebExtraction), lớp tác tử di động trích rút thông tin (getExtraction) và lớp tác tử di động download file (getFile) trong hệ thống tác tử di động trên JXTA đã trình bày ở chương 4. //************************************ //*********WebExtraction.java********* //************************************ package mobile.agent; import java.io.InputStreamReader; import java.io.Reader; import java.io.BufferedReader; import java.io.BufferedOutputStream; import java.net.URL; import java.net.HttpURLConnection; import javax.swing.text.html.HTMLEditorKit; import java.io.*; import java.lang.*; import java.util.Vector; class PDUs { String PDU; int frequency=1; int urlIndex; int titleIndex; };

public class WebExtraction {

public WebExtraction(Reader inHtml) { HtmlReader = inHtml;

}

private Reader HtmlReader;

private boolean PDUDebug = true; public static String [] nContentLine; private int nLines=0;

public static String MFPDUs=""; public static int seqStart=0;

static int findIndex(int _seqStart,String _nMap){ return(_nMap.indexOf("53032",_seqStart)); }

static int findIndexReverse(int _titleIndex,String _nMap){ return(_nMap.indexOf("4654",_titleIndex));

}

int titleIndex; int urlIndex; int numCandPDUs=0; int tem=0; int flag=0; int k=0; int count=0; while(findIndex(seqStart,_nMap)!=-1){ titleIndex=findIndex(seqStart,_nMap); count++; seqStart=titleIndex+1; } seqStart=0; System.out.print(count);

PDUs []candPDUs=new PDUs[count]; try{

while(findIndex(seqStart,_nMap)!=-1){ titleIndex=findIndex(seqStart,_nMap);

urlIndex=findIndexReverse(titleIndex+1,_nMap);

String currentPDU=_nMap.substring(titleIndex, urlIndex+3); if (PDUDebug) {

System.out.print("PDUs:"+numCandPDUs+"\n");

System.out.print("TITLE Index: "+titleIndex+"\n"); System.out.print("URL Index: "+urlIndex+"\n"); System.out.print("PDU sequence: "+currentPDU+"\n"); if (currentPDU==null) { System.out.print("ok"); break; } } //System.out.print(candPDUs); flag=0;

for(int i=0;i< numCandPDUs;i++){

if(currentPDU.equals(candPDUs[i].PDU)) { candPDUs[i].frequency++; tem=candPDUs[i].frequency; flag=1; } } if(flag==1){ candPDUs[numCandPDUs]=new PDUs(); candPDUs[numCandPDUs].PDU=currentPDU; candPDUs[numCandPDUs].urlIndex=urlIndex; candPDUs[numCandPDUs].titleIndex=titleIndex; candPDUs[numCandPDUs].frequency=tem; numCandPDUs++; } else{ candPDUs[numCandPDUs]=new PDUs(); candPDUs[numCandPDUs].PDU=currentPDU; candPDUs[numCandPDUs].urlIndex=urlIndex; candPDUs[numCandPDUs].titleIndex=titleIndex;

candPDUs[numCandPDUs].frequency=1; numCandPDUs++; } seqStart=titleIndex+1; } }

catch (Exception e){

System.out.print("Nothing"); }

for(int i=0;i< numCandPDUs;i++){ if(k<=candPDUs[i].frequency)

k=candPDUs[i].frequency; }

for(int i=0;i< numCandPDUs;i++){ if(candPDUs[i].frequency==k) { MFPDUs=""; MFPDUs=candPDUs[i].PDU; } } if (PDUDebug) { System.out.print("\n*********************************"); System.out.print("\nMost Frequent PDU is: "+MFPDUs);

System.out.print("\nTotal of PDU : "+count); System.out.print("\nMost Frequent PDU: "+k);

System.out.print("\n*********************************"); System.out.print("\nDETAIL:\n\n");

}

for(int i=0;i< numCandPDUs;i++){ if(k==candPDUs[i].frequency) { if (PDUDebug) { System.out.print("\n\n===========PDU "+i+"================="); System.out.print("\n\nTITLE: +nContentLine[candPDUs[i].titleIndex+2]); System.out.print("\n\nURL:"+nContentLine[candPDUs[i].urlIndex+1 ]); System.out.print("\n\nPDU :"+candPDUs[i].PDU); PDUList.add( nContentLine[candPDUs[i].titleIndex+2]+ "\n"); String _title = nContentLine[candPDUs[i].urlIndex+1].replace("<href>",""); PDUList.add( _title.replace("</href>","")+ "\n"); } } } //return MFPDUs; }

public void parseHTML(File tmpFile){ HTMLParser kit = new HTMLParser();

HTMLEditorKit.Parser parser = kit.getParser();

HTMLParserCallback callback = new HTMLParserCallback(); try {

callback.print(tmpFile); } catch (Exception e){

System.out.println("Error parsing: " + e); }

return; }

public String createTokens(File tmpFile){ String nMap = "";

try {

BufferedReader in = new BufferedReader(new FileReader(tmpFile)); String str;

while ((str = in.readLine()) != null) { nLines++; if(str.regionMatches(true,str.indexOf("</img>"),"</img>",0,6)){ nMap+="5"; } else if (str.regionMatches(true,str.indexOf("<tr>"),"<tr>",0,4)||str.regionMatches( true,str.indexOf("</tr>"),"</tr>",0,5)|| str.regionMatches(true,str.indexOf("<td>"),"<td>",0,4)||str.regionMat ches(true,str.indexOf("</td>"),"</td>",0,5)|| str.regionMatches(true,str.indexOf("<th>"),"<th>",0,4)||str.regionMat ches(true,str.indexOf("</th>"),"</th>",0,5)){ nMap+="8"; } else if(str.regionMatches(true,str.indexOf("<a>"),"<a>",0,3)||str.regionMatches( true,str.indexOf("</a>"),"</a>",0,4)){ nMap+="4"; } else if(str.regionMatches(true,str.indexOf("<href>"),"<href>",0,6) || str.regionMatches(true,str.indexOf("</href>"),"</href>",0,7)){ nMap+="6"; } else if(str.regionMatches(true,str.indexOf("<br>"),"<br>",0,4)||str.regionMatche s(true,str.indexOf("</br>"),"</br>",0,5)){ nMap+="2"; } else if(str.regionMatches(true,str.indexOf("<b>"),"<b>",0,3)||str.regionMatches( true,str.indexOf("</b>"),"</b>",0,4)){ nMap+="3"; } else { nMap+="0"; } } System.out.println(nMap);

in.close(); return nMap; } catch (IOException e) { } return ""; }

public void doWebExtraction(Vector PDUList) { // new WebExtraction();

String KEY= "Publication Date"; File tmpFile = new File("page.txt"); parseHTML(tmpFile);

createTokens(tmpFile);

nContentLine=new String[nLines]; int i=0;

try {

BufferedReader in = new BufferedReader(new FileReader(tmpFile)); String str;

while ((str = in.readLine()) != null) { nContentLine[i]=str; i++; } in.close(); } catch (IOException e) { } findPDU(createTokens(tmpFile), PDUList); return ; } } //************************************ //*********getExtraction.java********* //************************************ package mobile.agent; import mobile.agent.interfaces.JavaMobileAgent; import net.jxta.peergroup.PeerGroup; import java.util.Vector; import java.net.*; import java.io.*;

public class getExtraction implements JavaMobileAgent {

public getExtraction() { }

public byte[] start(PeerGroup group, byte[] textIn, String[][] params, Vector contents, Vector daemons, Binary fcontent) {

String host = new String(textIn); String Results = "";

if (params != null){

contents.add("getExtraction=" + host); try {

String path = params[0][1].toString(); // Get input URL URL url = new URL(path);

String st;

// Get input reader returned by the server BufferedReader in = new BufferedReader( new

InputStreamReader(url.openStream())); WebExtraction we = new WebExtraction(in);

we.doWebExtraction(contents);//do Extraction and get contents in.close(); } catch (MalformedURLException e) { System.out.println("Wrong URL"); } catch (IOException e) { System.out.println("IO Exception"); } } return Results.getBytes(); } } //************************************ //***********getFile.java************* //************************************ package mobile.agent; import mobile.agent.interfaces.JavaMobileAgent; import net.jxta.peergroup.PeerGroup; import java.util.Vector; import java.net.*; import java.io.*;

public class getFile implements JavaMobileAgent { public getFile() { }

public byte[] start(PeerGroup group, byte[] textIn, String[][] params, Vector fname, Vector contents, Binary fcontent) {

// Hosting peer from textIn

String host = new String(textIn);

String str = "\nStart of File ---\n"; String st= "noname.txt";

if (params != null){

String filename= params[0][1].toString(); InputStream f;

if (filename.regionMatches(true, 0, "http://", 0, 7)){ try {

URL url = new URL(filename);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818)" ); f = new DataInputStream(connection.getInputStream()); String uSt = url.getPath();

int index = uSt.lastIndexOf("/");

System.out.println("index:" + index); if (index > 0){

st = uSt.substring(index+1);

st = uSt; }

fname.add(st);

OutputStream fout= new FileOutputStream(st); byte b[]= new byte[1048576];

int readData= f.read(b); while (readData >0){

fout.write(b,0,readData); readData= f.read(b); }

fout.close();

InputStream fbuff = new FileInputStream(st); int len= fbuff.available();

byte [] buff= new byte[len]; f.read(buff,0,len);

fcontent.setBytes(buff,len);

System.out.println("File size:"+ buff.length +" bytes"); return st.getBytes();

} catch (MalformedURLException e){ System.out.println("Wrong URL");

} catch (IOException e){

System.out.println("I/O error"); } } } String Contents= " "; return Contents.getBytes(); } }

TÀI LIU THAM KHO

Tiếng Việt

[1] ĐHQG Hà Nội. Trung tâm Thông tin Thư viện. http://www.lic.vnu.edu.vn.

[2] Hà Thị Kim Dung, Nguyễn Huy Sơn, và Hoàng Hữu Thành. Xây dựng Hệ thống So sánh Thông tin Giá cả Trực tuyến. Công trình Sinh viên Nghiên cứu Khoa học, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội, 2005.

[3] Nguyễn Đại Thọ. Tổng quan về công nghệ tác tử. Chưa xuất bản, 2005.

[4] Trung tâm Thông tin Khoa học và Công nghệ Quốc gia. Mạng Thông tin Khoa học và Công nghệ Việt Nam. http://www.vista.gov.vn.

[5] Trường ĐHBK Hà Nội. Trung tâm Thư viện và Mạng Thông tin.

http://linc.hut.edu.vn.

Tiếng Anh

[6] Andrew D. Birrell and Bruce Jay Nelson. Implementing remote procedure calls.

ACM Transactions on Computer Systems, Vol. 2, No. 1, 1984, pages 39-59.

[7] Brendon J. Wilson, JXTA, OReilly 2002

[8] B. Brewington, R. Gray, K. Moizumi, D. Kotz, G. Cybenko, and D. Rus. Mobile Agents in Distributed Information Retrieval. In M. Klusch, editor, Intelligent Information Agents, Chapter 12. Springer-Verlag, 1999.

[9] Dai Tho Nguyen, Routage basé sur des agents mobiles à déplacement aléatoire. Thèse de doctorat. Université de Technologie de Compiègne, 2000.

[10] Dag Johansen, Robbert van Renesse, and Fred B. Schneider. An Introduction to the TACOMA Distributed System, version 1.0. Technical Report 95-23. University of Troms∅, 1995.

[11] Danny B. Lange and Mitsuru Oshima. Programming and Deploying Java Mobile Agents with Aglets. Addison-Wesley, 1998.

[12] David Gourley, Brian Totty, Marjorie Saver, Sailu Reddy, and Anshu Aggarwal.

HTTP : The Definitive Guide. O'Reilly, 2002.

[13] Daniel Brookshier, Darren Govoni, Navaneeth Krishnan, Juan Carlos Soto, Java P2P Programming, Sams Pubblishing 2002

[14] David Wong, Noemi Paciorek, Tom Walsh, Joe DiCelie, Mike Young, and Bill Peet. Concordia: An infrastructure for collaborating mobile agents. First International Workshop on Mobile Agents (MA'97), pages 86-97. Springer- Verlag, 1997.

[15] D. Chess, C. Harrison, and A. Kershenbaum. Mobile Agents: Are They a Good Idea? Research Report, IBM Research Division, T. J. Watson Research Center, 1995.

[16] D. Gourley, B. Totty, M. Sayer, and A. Aggarwal. HTTP: The Definitive Guide. O’Reilly, 2002.

[17] Elsevier. ScienceDirect. http://www.sciencedirect.com.

[18] Gerard Tel. Introduction to Distributed Algorithms, 2nd edition. Cambridge University Press, 2000.

[19] Gian Pietro Picco. Understanding, Evaluating, Formalizing, and Exploiting Code Mobility. PhD thesis. Politechnico di Torino, 1998.

[20] H. Seo, J. Yang and J. Choi, Knowledge-based Wrapper Generation by Using XML, IJCAI-2001 Workshop on Adaptive Text Extraction and Mining, 2001

[21] Holger Peine and Torsten Stolpmann. The architecture of the Ara platform for mobile agents. Mobility: Processes, Computers, and Agents, pages 474-483. Addison-Wesley and ACM Press, 1999.

[22] I. Ferguson. Agents and Spiders. Ab-libris, 2005.

[23] IEEE computer society, http://www.computer.org.

[24] James Gosling, Bill Joy, Guy Steele, and Gilad Bracha. The Java Language Specification, 3rd edition. Addison-Wesley, 2004.

[25] Joachim Baumann, Fritz Hohl, Kurt Rothermel, and Markus Straßer. Mole – Concepts of a mobile agent system. World Wide Web, Vol. 1, No. 3, 1998.

[26] Jacques Ferber. Les Systèmes Multi-Agents : Vers une Intelligence Collective. Inter-Editions, 1995.

[27] J. Yang, V. Honavar, L. Miller, J. Wong. Intelligent Mobile Agents for Information Retrieval and Knowledge Discovery from Distributed Data and Knowledge Sources. In Proceedings of the IEEE Information Technology Conference, pages 99-102, September 1-3, 1998, Syracuse, New York.

[28] J. Yang, P. Pai, V. Honavar, and L. Miller. Mobile Intelligent Agents for Document Classification and Retrieval: A Machine Learning Approach. In

Proceedings of the 14th European Meeting on Cybernetics and Systems Research, pages 707-712, April 15-17, 1998, Vienna, Austria.

[29] J. Heaton. Programming Spiders, Bots, and Aggregators in Java. Sybex, 2002.

[30] J. Yang and J. Choi. Agents for Intelligent Information Extraction by Using Domain Knowledge and Token-Based Morphological Pattern. In Proceedings of the 6th Pacific Rim International Workshop on Multi-Agents, pages 74-85, November 7-8, 2003, Seoul, Korea (Lecture Notes in Computer Science 2891).

[31] J. Yang, J. Kim, J. Choi, H. Ham, and K. Lee. A More Scalable Comparison Shopping Agent. In Proceedings of the 2nd International ICSC Symposium on Engineering of Intelligent Systems, pages 766-772, June 27-30, 2000, Paisley, Scotland.

[32] J. Yang, E. Lee, and J. Choi. A Shopping Agent that Automatically Constructs Wrappers for Semi-Structured Online Vendors. In Proceedings of the 2nd International Conference on Intelligent Data Engineering and Automated Learning, pages 368-373, December 13-15, 2000, Shatin, Hong Kong (Lecture Notes in Computer Science 1983).

[33] Joseph D. Gradecki, Mastering JXTA: Building Java Peer-to-Peer Application,

Wiley 2003.

[34] JXTA project, http://www.jxta.org

[35] K. Hemenway and T. Calishain. Spidering Hacks. O’Reilly, 2003.

[36] Li Gong, Scot t Oaks, Bernard Traversat, JXTA in a Nutshell, O’Reilly 2002

[37] Nancy A. Lynch. Distributed Algorithms. Morgan Kaufmann, 1997.

[38] Object Management Group. Common Object Request Broker Architecture : Core Specification, Version 3.0.3. March 2004.

[39] Ozsu M. Tamer and Valduriez Patrick. Principles of Distributed Database Systems, 2nd edition. Prentice Hall, 1999.

[40] Robert S. Gray, George Cybenko, David Kotz, Ronald A. Peterson, and Daniela Rus. D'Agents : Applications and performance of a mobile-agent system.

Software – Practice and Experience, Vol. 32, No. 6, 2002.

[41] Rita Yu Chen and Bill Yeager: Java Mobile Agents on Project JXTA Peer-to- Peer Platform, 2003

[42] R. B. Doorenbos, O. Etzioni, and D. S. Weld. A Scalable Comparison-Shopping Agent for the World Wide Web. In Proceedings of the First International Conference on Autonomous Agents, pages 39-48, February 05-08, 1997, Marina del Rey, California, United States.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu triển khai công nghệ tác tử di động trên cơ sở hạ tầng mạng ngang hàng JXTA luận văn ths công nghệ thông tin 1 01 10 (Trang 63 - 77)

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

(77 trang)