📄 booleanmodel.java
字号:
package searchingEngine.booleanModel;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.Vector;
import searchingEngine.dataPreprocessing.invertedFile.DocNode;
import searchingEngine.dataPreprocessing.invertedFile.InvertedFile;
import searchingEngine.dataPreprocessing.invertedFile.TermNode;
import searchingEngine.fuzzyBooleanModel.FuzzyBooleanModel;
import searchingEngine.queryPrepocessing.StemRevised;
import searchingEngine.utilites.dataConverter.RawConverter;
public class BooleanModel {
private LinkedList retrievedList;
private InvertedFile hash_table;
private String docNameList[];
public BooleanModel(InvertedFile hash_table,String[] docNameList) throws Exception{
retrievedList = new LinkedList();
this.hash_table = hash_table;
this.docNameList = docNameList;
}
// ***************Retrieve Doc***********************************
public LinkedList<String> retrieveDocs(String[] input) {
PostOrder theTrans = new PostOrder(input);
// the list to store the documents of a term
Stack<LinkedList<String>> result = new Stack<LinkedList<String>>();
LinkedList<String> tempa, tempb ;
LinkedList<String> docs;
String term;
// actual retrieval
for (int k=0; k<theTrans.size(); k++) {
term=theTrans.get(k);
if (term.equals("and") || term.equals("&")) {
tempa = result.pop();
tempb = result.pop();
result.push(andOp(tempa, tempb));
} else if (term.equals("or") || term.equals("|")) {
tempa = result.pop();
tempb = result.pop();
result.push(orOp(tempa, tempb));
} else {
//(!term.equals("and") && !term.equals("or")) {
docs=castDocNode(((TermNode)hash_table.getTable().get(term)).doc_list);
result.push(docs);
}
}
if (result.isEmpty()) return null;
return result.pop();
}
private LinkedList<String> castDocNode(LinkedList<DocNode> docList){
LinkedList<String> temp = new LinkedList<String>();
for (int i=0;i<docList.size();i++) {
temp.add(docNameList[docList.get(i).fileid]);
}
return temp;
}
private LinkedList<String> andOp(LinkedList<String> left, LinkedList<String> right) {
LinkedList<String> resultList=new LinkedList<String>();
// start the comparision
for (int i=0; i<left.size(); i++) {
String left_obj = left.get(i);
if (right.contains(left_obj))
resultList.add(left_obj);
}
// return the result
return resultList;
}
private LinkedList<String> orOp(LinkedList<String> left, LinkedList<String> right) {
LinkedList<String> resultList=new LinkedList<String>();
// start the comparision
for (int i=0; i<left.size(); i++) {
resultList.add(left.get(i));
}
for (int j=0; j<right.size(); j++) {
if (Collections.binarySearch(resultList,right.get(j))<0) {
resultList.add(right.get(j));
}
}
// return the result
return resultList;
}
public LinkedList getResult(){
return retrievedList;
}
public static void main(String[] args) throws Exception {
/*System.out.println(invertedFile.getNode("abramenkoV"));
//RawConverter.saveObject(RawConverter.getFileNameList(FILETXT_PATH,0,InvertedFile.TOTAL_NUMBER_OF_FILES),"fileNameList.dat");
String docNameList[] = (String[])RawConverter.loadObject("fileNameList.dat");
String inputA = "abramenkoV";
String input[] = inputA.split(" ");
System.out.println("input= " + input[0] + " " + input.length);
BooleanModel booleanModel = new BooleanModel(invertedFile,docNameList);
long start = System.nanoTime();
LinkedList<String> retrievedList= booleanModel.retrieveDocs(input);
long endtime = System.nanoTime() - start;
System.out.print("Testing on retirval, time used: ");
System.out.println((double)endtime/(1000000000) + " seconds ");
//System.out.println("output= " + retrievedList);
if (retrievedList != null && retrievedList.isEmpty()==false) {
Collections.sort(retrievedList);
for (int t=0; t<retrievedList.size(); t++) {
System.out.println(retrievedList.get(t) + " ");
}
System.out.println();
} else {
System.out.println("No files found");
}*/
//*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -