coincidencies.java
上传用户:yadaxi
上传日期:2013-07-11
资源大小:20k
文件大小:9k
源码类别:

搜索引擎

开发平台:

Java

  1. import java.util.regex.*;
  2. import java.net.*;
  3. import java.sql.*;
  4. public class coincidencies
  5. {
  6. static Statement stmt = null; 
  7. static ResultSet rsPerVeure = null; 
  8. String paraula="";
  9. Connection conn;
  10. public coincidencies(URL url,String ascii,String textSencer,Connection conn,Statement stmt)
  11. {
  12. int id_pagina=0,i=0,id_paraula=0;
  13. try
  14. ascii=ascii.replaceAll(" "," ");
  15. ascii=ascii.replaceAll("&nbsp"," ");
  16. ascii=ascii.replaceAll("nbsp;"," ");
  17. ascii=ascii.replaceAll("nbsp"," ");
  18. Class.forName("com.mysql.jdbc.Driver").newInstance();
  19. //Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.1.2/spider?user=spider&password=spider");
  20. //stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  21. this.conn=conn;
  22. this.stmt=stmt;
  23. //mirem si la p鄃ina ja existeix a la nostra base de dades
  24. //if (stmt.execute("SELECT * FROM vistes WHERE url='"+url.toString()+"'"))
  25. rsPerVeure = stmt.executeQuery("SELECT * FROM vistes WHERE url='"+url.toString()+"'");
  26. if(this.countItems(rsPerVeure)>0)
  27. {
  28. //Si existeix agafem el seu id
  29. //  rsPerVeure = stmt.getResultSet();
  30.   rsPerVeure.first(); 
  31.   id_pagina=rsPerVeure.getInt("id");
  32. }
  33. else//if the program runs wel this part never have to run
  34. {
  35. //   sino en creem un de nou i l'insertem a la BD
  36.   stmt.execute("INSERT INTO vistes (url) VALUES ('"+url.toString()+"')");
  37.   
  38.   rsPerVeure = stmt.executeQuery("SELECT id FROM vistes WHERE url='"+url.toString()+"'");
  39.   //agafem el seu id
  40.   rsPerVeure.first(); 
  41.   id_pagina=rsPerVeure.getInt(1);
  42. }
  43. //comen鏴m a parsejar!
  44. Pattern p;
  45. Matcher m;
  46. boolean resultado;
  47. p = Pattern.compile("\w+");
  48. m = p.matcher(ascii);
  49. resultado=m.find();
  50. while(resultado)
  51. {
  52. paraula= new String(ascii.subSequence(m.start(),m.end()).toString());
  53. paraula=paraula.replaceAll("\<.*?\>","").toLowerCase();
  54. //comprovem si la paraula trobada existeix a la BD
  55. rsPerVeure = stmt.executeQuery("SELECT id FROM paraules WHERE paraula='"+paraula+"'");
  56. //System.out.println(countItems(rsPerVeure));
  57. if(countItems(rsPerVeure)>0)
  58. {
  59. //si existeix ens quedem amb el seu id
  60. // rsPerVeure = stmt.getResultSet();
  61. rsPerVeure.first(); 
  62. id_paraula=rsPerVeure.getInt(1);
  63. }
  64. else 
  65. {
  66. // System.out.println("6");
  67. // sino en creem un de nou i l'insertem a la BD
  68. if(paraula.length()<50)
  69. {
  70. stmt.execute("INSERT INTO paraules (paraula) VALUES ('"+paraula+"')");
  71. rsPerVeure=stmt.executeQuery("SELECT id FROM paraules WHERE paraula='"+paraula+"'");
  72. //Si existeix agafem el seu id
  73. //rsPerVeure = stmt.getResultSet();
  74. rsPerVeure.first(); 
  75. id_paraula=rsPerVeure.getInt(1);
  76. }
  77. }
  78. if(paraula.length()<50)//max length of a word declared on the database
  79. {
  80. rsPerVeure = stmt.executeQuery("SELECT * FROM coincidencies WHERE paraula='"+id_paraula+"' AND pagina='"+id_pagina+"'");
  81. int n_coincidencies=0,id_coincidencies=0;
  82. if(countItems(rsPerVeure)>0)
  83. {
  84. //si existeix ens quedem amb el seu id
  85. //rsPerVeure = stmt.getResultSet();
  86. rsPerVeure.first(); 
  87. n_coincidencies=rsPerVeure.getInt("n_coincidencies");
  88. id_coincidencies=rsPerVeure.getInt("id");
  89. n_coincidencies++;
  90. // System.out.println("9");
  91. //ja existeix, augmentem la coincidencia
  92. rsPerVeure.updateString("n_coincidencies",new Integer(n_coincidencies).toString());
  93. rsPerVeure.updateRow();
  94. //ResultSet rs = stmt.executeQuery("UPDATE coincidencies SET n_coincidencies = '"+n_coincidencies+"' WHERE id ='"+id_coincidencies+"' ");
  95. }
  96. else
  97. stmt.execute("INSERT INTO coincidencies (paraula,pagina,n_coincidencies) VALUES ('"+id_paraula+"','"+id_pagina+"','1')");
  98. }
  99. //busquem la seguent paraula
  100. resultado=m.find();
  101. }
  102. // System.out.println("Indexat: "+paraula);
  103. comprovaCoincidencies(textSencer,id_pagina,"<b>.+</b>");
  104. comprovaCoincidencies(textSencer,id_pagina,"<B>.+</B>");
  105. comprovaCoincidencies(textSencer,id_pagina,"<h1>.+</h1>");
  106. comprovaCoincidencies(textSencer,id_pagina,"<H1>.+</H1>");
  107. freeResultSets();
  108. }
  109. catch(SQLException ex) 
  110. {  
  111.    // handle any errors 
  112.    System.out.println("SQLException: " + ex.getMessage()); 
  113.    System.out.println("SQLState: " + ex.getSQLState()); 
  114.    System.out.println("VendorError: " + ex.getErrorCode()); 
  115.    return;
  116. }
  117. catch(Exception e)
  118. {
  119. e.printStackTrace();
  120. return;
  121. }
  122. }
  123. public void freeResultSets()
  124. {
  125. if (rsPerVeure != null) 
  126. try 
  127. {
  128. rsPerVeure.close(); 
  129. }
  130. catch (SQLException sqlEx) 
  131. { // ignore 
  132. }
  133. /* if (stmt != null)
  134. try 
  135. stmt.close(); 
  136. }
  137.  catch (SQLException sqlEx) 
  138.  {
  139. // ignore 
  140.  } 
  141. stmt = null; 
  142. } */
  143. }
  144. public int countItems(ResultSet rs)
  145. {
  146. int i=0;
  147. try{
  148. while(rs.next())
  149. i++;
  150. }
  151. catch(Exception e)
  152. {
  153. System.out.println("ERROR: while counting items");
  154. e.printStackTrace();
  155. }
  156. return i;
  157. }
  158. //this method count the words of a web page
  159. public int wordCount(String ascii)
  160. {
  161. Pattern p;
  162. Matcher m;
  163. int wordCount=0;
  164. boolean resultado;
  165. p = Pattern.compile("\w+");
  166. m = p.matcher(ascii);
  167. resultado=m.find();
  168. while(resultado)
  169. {
  170. wordCount++;
  171. resultado=m.find();
  172. }
  173. return wordCount;
  174. }
  175. //we find the words that are between <b></b> and <h1></h1> and <u></u>
  176. //if we find words we increase the value of n_coincidencies on the table coincidencies
  177. //with this we can give more importance to the words that are between tags <b></b> and <h1></h1> and <u></u>
  178. //
  179. //words that ar between tags and:
  180. //length less than 20 caracters (not all the page)
  181. public void comprovaCoincidencies(String text,int id_pagina,String pattern)
  182. {
  183. Pattern p,p1;
  184. Matcher m,m1;
  185. boolean resultado;
  186. String paraula="",subParaula="";
  187. int id_paraula=0,coincidencies=0;
  188. try
  189. {
  190. text=text.toLowerCase();
  191. p = Pattern.compile(pattern);
  192. // p1 = Pattern.compile("<b>.+[</b>]");
  193. m = p.matcher(text);
  194. resultado=m.find();
  195. while(resultado)
  196. {
  197. paraula= new String(text.subSequence(m.start(),m.end()).toString());
  198. paraula=paraula.replaceAll("\<.*?\>","");//delete <b> </b> tags
  199. paraula=paraula.replaceAll("!","");//delete the signs that won't be indexed
  200. paraula=paraula.replaceAll("