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

上一篇文章 :【信息检索】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
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值