【信息检索】Java简易搜索引擎原理及实现(二)新增停用词表 + 查询处理

本文介绍如何在Java简易搜索引擎中新增停用词表,优化倒排索引,并实现AND、OR、ANDNOT等基本查询操作。通过NLPIR分词器处理停用词,对用户输入的查询进行解析,执行不同类型的查询操作,如AND操作的时间复杂度为min(x, y),OR操作的时间复杂度为O(x + y)。后续将探讨模糊匹配支持。" 135349364,19884215,KingbaseESV8R6 用户登录失败锁定配置详解,"['数据库', '服务器管理', 'Linux', 'KingbaseES配置']
摘要由CSDN通过智能技术生成

上一篇文章 :【信息检索】Java简易搜索引擎原理及实现(一)建立倒排索引,我们已经建立好了倒排索引的结构,这篇文章中,我们将新增停用词表,同时对用户输入的查询词做基本的处理。

实现步骤

1)新增停用词表(stop word):常指介词、代词、冠词,剔除倒排索引结构的字典中的停用
词。
2)基本布尔操作基本算法:2 组/6 个基本操作算法,即:

  • 2-way Merge: AND(p1,p2), OR(p1,p2), ANDNOT(p1,p2)
  • m-way Merge: AND(<p1,p2,…,pn>), OR(<p1,p2,…,pn>), ANDOR(<p1,p2,…,pn>)

实验结果效果:
1)输入格式:word1 OP word2 OP word3 …, OP: AND/OR/ANDNOT
2)输出格式:items/posting list/…
3)输出结果:满足查询条件的 DocID 的结果集。

运行效果截图

在这里插入图片描述

代码实现

先放上完整的调用函数,后面给出具体实现
public class Experiment2 {
   
    private Scanner scanner;

    public static void main(String[] args) {
   
        Experiment2 experiment2 = new Experiment2();
        //新增停词表的字典
        LinkedList<Item> dictionary = experiment2.exp2();
        //获取用户输入
        System.out.println("请输入搜索词:(退出请输入-1)");
        experiment2.scanner = new Scanner(System.in);
        String input = experiment2.scanner.nextLine().trim();
        //输入词查询
        experiment2.query(input, dictionary);
    }
    
	public LinkedList<Item> exp2() {
   
        //获取到实验1得到的倒排索引字典
        Experiment1 exp1 = new Experiment1();
        LinkedList<Item> dictionary = exp1.exp1();

        //新增停用词表(stop word):介词(/p)、代词(/r)、助词(/u)、标点符号(/w),剔除倒排索引结构的字典中的停用词。
        delStopWord(dictionary);

        return dictionary;
    }
}
新增停用词表(stop word):常指介词、代词、冠词,剔除倒排索引结构的字典中的停用词。

利用NLPIR分词器判断每个term项的词性。可根据自己的需求修改需要剔除的词汇。

//新增停用词表(stop word):介词(/p)、代词(/r)、助词(/u)、标点符号(/w),剔除倒排索引结构的字典中的停用词。
public static void delStopWord(LinkedList<Item> dictionary) {
   
    Iterator<Item> iterator = dictionary.iterator();
    Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
    Matcher matcher;
    while (iterator.hasNext()) {
   
        Item item = iterator.next();
        if (item.term.contains("*") || item.term.contains("http")) {
    //不允许单词内包含*或单词为网址
            iterator.remove();
            continue;
        }
        String prop = NlpirMethod.NLPIR_GetWordPOS(item.term); //词性
        int pos = prop.indexOf("/") + 1;
        matcher = p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值