Lucene笔记15-Lucene的分词-通过TokenStream显示分词[通俗易懂]

Lucene笔记15-Lucene的分词-通过TokenStream显示分词[通俗易懂]一、展示分词内容packagecom.wsy;importorg.apache.lucene.analysis.*;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.analysis.tokenattributes.CharTermAttribute;impo…

大家好,又见面了,我是你们的朋友全栈君。

一、展示分词内容

package com.wsy;

import org.apache.lucene.analysis.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.util.Version;

import java.io.IOException;
import java.io.StringReader;

public class AnalyzerUtils {
    public static void displayToken(String string, Analyzer analyzer) {
        try {
            // 通过分词器获取TokenStream
            TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(string));
            // TokenStream是一种流,我们要获取流中的东西,就需要一个“碗”,我们将CharTermAttribute比作这个“碗”
            // 当TokenStream遍历的时候,这个“碗”也跟着走,我们把“碗”放到流中就是方便获取流中的数据
            CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
            while (tokenStream.incrementToken()) {
                System.out.print("[" + charTermAttribute + "]");
            }
            System.out.println();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Analyzer analyzer1 = new StandardAnalyzer(Version.LUCENE_35);
        Analyzer analyzer2 = new StopAnalyzer(Version.LUCENE_35);
        Analyzer analyzer3 = new SimpleAnalyzer(Version.LUCENE_35);
        Analyzer analyzer4 = new WhitespaceAnalyzer(Version.LUCENE_35);
        String string1 = "I am from liaocheng, it is my hometown. My name is Wang Shaoyang.My QQ number is 872452093.";
        String string2 = "我来自山东聊城,我的名字是王劭阳。";
        AnalyzerUtils.displayToken(string1, analyzer1);
        AnalyzerUtils.displayToken(string1, analyzer2);
        AnalyzerUtils.displayToken(string1, analyzer3);
        AnalyzerUtils.displayToken(string1, analyzer4);
        AnalyzerUtils.displayToken(string2, analyzer1);
        AnalyzerUtils.displayToken(string2, analyzer2);
        AnalyzerUtils.displayToken(string2, analyzer3);
        AnalyzerUtils.displayToken(string2, analyzer4);
    }
}

通过这个例子,可以看到对于一个字符串的分词结果,使用不同的分词器对于分词的效果是不同的,所以实际开发的时候,要根据需要使用合适的分词器才行。

二、总结

在displayToken()方法中,有一个非常重要的思想,就是向流中添加attribute,之后通过attribute来查看流中的内容,这在Lucene中非常重要,这里举了一个很形象的例子,把TokenStream比作水流,为了获取水流,我们需要向水流中放置一个碗,通过碗来获取到水流,也就获取到了数据,这一块一定要理解透。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163095.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab画圆的命令_matlab画圆命令.doc[通俗易懂]

    matlab画圆的命令_matlab画圆命令.doc[通俗易懂]matlab画圆命令.doc%%圆环面R=6;r=2;symsuv;ezmesh((R+r*cos(u))*cos(v),(R+r*cos(u))*sin(v),r*sin(u));axisequal;%%圆盘R=6;r=2;theta=linspace(0,2*pi,90);ph=linspace(r,R,30);[t,p]=meshgrid(theta,ph);r=t*0;[x,y,z]=p…

    2022年6月19日
    30
  • 简单图文解释冯诺依曼体系结构(通俗易懂版)

    简单图文解释冯诺依曼体系结构(通俗易懂版)冯诺依曼式计算机主要由输入设备,输出设备,控制器,运算器,存储器该五个组成部分构成。我们可以将该体系结构的运作通过人类接收信息,处理信息,并输出信息这个过程来加以类比理解。人类:当眼睛看到某些信息,这些信息被存储到记忆装置,大脑从记忆装置取出信息,并加以思考运算,再放回记忆装置,大脑控制记忆装置将信息传输给嘴巴,将信息表达出来。(这个过程大脑的指令占领导地位)冯诺依曼计算机:当输入设备接收到数据,数据将被存储到存储器,控制器发出取数据和运算的指令,数据被取出方去放入运算器中加以运算,运算结束后,控制器

    2025年6月11日
    7
  • 股票API

    实时股票数据接口大全股票数据的获取目前有如下两种方法可以获取:1.http/javascript接口取数据2.web-service接口1.http/javascript接口取数据1.1Sina股票数据接口以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:http://hq.sinajs…

    2022年4月7日
    65
  • 对象数组(C++学习笔记 20)[通俗易懂]

    对象数组(C++学习笔记 20)[通俗易懂]一、对象数组的定义所谓对象数组,指每一个数组元素都是对象的数组,即若一个类有若干个对象,我们把这一系列的对象用一个数组来存放。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。定义一个一维数组的格式如下:类名数组名[下标表达式]与基本数据类型的数组一样,在使用对象数组时也只能访问单个数组元素,其一般形式为:数组名[下标].成员名在建立数组时,同样要调用构造函数。有几个数组元…

    2022年7月12日
    22
  • 蓝桥杯 BASIC 24 龟兔赛跑预測(模拟)[通俗易懂]

    蓝桥杯 BASIC 24 龟兔赛跑预測(模拟)

    2022年1月31日
    44
  • SD/MMC卡初始化及读写流程[通俗易懂]

    SD/MMC卡初始化及读写流程[通俗易懂]二、MMC/SD卡的模型和工作原理PIN脚、SD卡总线、SD卡结构、SD卡寄存器、上电过程SD卡寄存器: OCR:操作电压寄存器:只读,32位第31位: 表示卡上电的状态位  CID:卡身份识别寄存器只读128位生产厂商、产品ID,生产日期和串号等  CSD:部分可写128位卡的容量、擦出扇区大小、读写最大数据块的大小、读操作的电流、电压等等 

    2022年5月20日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号