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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQL Server 2008安装图解教程

    SQL Server 2008安装图解教程一、安装SQLServer2008安装SQL2008的过程与SQL2005的程序基本一样,只不过在安装的过程中部分选项有所改变,当然如果只熟悉SQL2000安装的同志来说则是一个革命性的变动。(一)安装前的准备(1)需要.NetFramework3.5,若在Vista或更高的OS上需要3.5SP1的支持(在SQL2008安装的前会自动更新安装)(2)需要Widnows

    2022年6月23日
    27
  • scala中map与flatMap浅析

    scala中map与flatMap浅析在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的。没有可变的状态,函数就是引用透明(Referentialtransparency)的和没有副作用(NoSideEffect)。任何一种函数式语言中,都有map函数与fa

    2022年5月4日
    62
  • dts展开为platform_device结构过程分析

    dts展开为platform_device结构过程分析dts节点展开为platform_device结构过程分析1.概述本文主要是记录学习Linux解析dts的代码分析,以便进行后续回顾。平台:ARMVexpress内核版本:linux-4.92.dts节点展开为platform_device结构过程分析自从ARM引入的dts之后,bsp驱动代码产生了非常之大的变化,像在linux-2.6.32这些版本的platform驱动中,会存在大…

    2022年7月24日
    13
  • 直击微信公开课:2019年小程序将会有哪些改变?

    直击微信公开课:2019年小程序将会有哪些改变?

    2021年6月20日
    120
  • 说说anchorPoint[通俗易懂]

    说说anchorPoint[通俗易懂]anchorPoint属性是CGPoint(x,y),x,y的取值是按比例取值,一般用0~1,默认是(0.5,0.5),表示图层的position在自身的位置,举个例子,在红色view确定完大小位

    2022年7月3日
    40
  • Jenkins教程(自动化部署)

    Jenkins教程(自动化部署)Jenkins实现自动化项目部署

    2022年5月14日
    43

发表回复

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

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