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


相关推荐

  • backtrack3(BT3) usb版 激活成功教程WIFI无线网络密码详细步骤

    backtrack3(BT3) usb版 激活成功教程WIFI无线网络密码详细步骤好像很多朋友都在找这东西,我来发上来吧!软件BAIDU一下就有得下了!一、先开始制作启动U盘:将下载好的backtrack3(BT3)usb版(下载地址在文章末尾)文件bt3b141207.rar直接解压到U盘(1G以上容量)。把Boot和BT3两个文件夹放到U盘的根目录,打开BOOT文件夹双击运行”bootinst.bat”批处理文件。U盘里就会多出4个文件.”isolinux.b…

    2022年10月1日
    0
  • 解决AMD CPU 启动Android模拟器时无法安装Intel HAXM 的问题

    解决AMD CPU 启动Android模拟器时无法安装Intel HAXM 的问题刚买的电脑,是用的AMD的CPU,在安装Android开发环境时,遇到以下问题:FailedtoinstallIntelHAXM.Fordetails,pleasechecktheinstallationlog:”C:\Users\zhangqs\AppData\Local\Temp\haxm_log9.txt”HAXMinstallationfailed.T…

    2022年6月28日
    37
  • 程序员去外包公司有前途吗_程序员去外包是不是就废了

    程序员去外包公司有前途吗_程序员去外包是不是就废了虽然大部分人都抵制外包,但是很多人,尤其是萌新,并不清楚外包的主要缺点。我这里简单说一下。程序员去外包公司有前途吗?不能说去了外包公司就完全没有前途了,主要看个人能力,外包的工作内容,大多十分碎片化,甚至是机械化。因为如果这个工作内容真的很完整、成块儿,那正式工就做掉了。正式工做掉的理由有两个:完整工作内容有利于他,去构建业务认知。完整内容拆分出来外包,需要进行进行大量的沟通与团队协作,不利于整体效率。那么有没有办法避免碎片化呢?答案是有的。一方面可以表现出自身能力,获取正式团队

    2022年9月30日
    0
  • 学计算机我后悔了(计算机专业初级书籍)

    大家好,我是小林哥。平日里,大家都喊程序员加班多很辛苦,动不动就掉头发,但干的还是很香的,毕竟大多数公司钱还是给的很到位的,今年毕业应届生的我见到好多动不动就月薪20K~30K的,真让人两眼泪酸酸,当然这离不开他们大学期间的努力。讲真,没什么家庭背景的人,选择当程序员确实是比较好的选择了,原因有二:首先,当今互联网、AI人工智能、大数据等都是高速发展的行业,自然人才需求很多,薪资也相对其他传统行业高;第二,纯粹看你技术能力,只要自己愿意付出努力,技术能力肯定会慢慢提高上来,而且现在比起几十年

    2022年4月18日
    93
  • linux下如何启动ice服务器,Linux下ICE的安装[通俗易懂]

    linux下如何启动ice服务器,Linux下ICE的安装[通俗易懂]ICE在Linux下的完整编译安装安装平台要求:最好用gcc4.x版编译ICE,在Slackware下发现gcc3.3.6和gcc3.4.6都无法编译通过为了方便管理,将ICE相关的软件都安装到/usr/local/ICE-3.3.0/目录下首先安装第三方包:ThirdParty-Sources-3.3.0.tar.gz解压ThirdParty-Sources-3.3.0.tar.gz#c…

    2022年5月29日
    83
  • hibernate中query.uniqueResult()

    hibernate中query.uniqueResult()Queryq=session.createQuery(“selectt,pfromTeachert,Personpwheret.personid=p.id”);得到的两个对象组成的数组

    2022年7月2日
    20

发表回复

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

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