⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 booleanmodel.java

📁 自己写的search engine, 有 boolean search, fuzzy search
💻 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 + -