lucene 4.3 通过TokenStream显示分词代码演示「建议收藏」

lucene 4.3 通过TokenStream显示分词代码演示「建议收藏」核心代码:publicclassAnalyzerUtils{   publicstaticvoiddisplayToken(Stringstr,Analyzera){       try{           TokenStreamstream=a.tokenStream(“content”,newStringReader(str));

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

核心代码:

public class AnalyzerUtils {

     /**
     * 显示分词信息
     * @param str
     * @param a
     * @Adder by arvin 2013-7-2 下午5:02:24
     */
    public static void displayToken(String str,Analyzer a) {

        try {

            TokenStream stream = a.tokenStream(“content”,new StringReader(str));
            //创建一个属性,这个属性会添加流中,随着这个TokenStream增加
            CharTermAttribute cta = stream.addAttribute(CharTermAttribute.class);
            stream.reset();//不添加会显示空指针错误
            while(stream.incrementToken()) {

                System.out.print(“[“+cta+”]”);
            }
            System.out.println();
            stream.end();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }

 

    /**
     * 显示分词的所有信息
     * @param str
     * @param a
     * @Adder by arvin 2013-7-2 下午5:02:52
     */
    public static void displayAllTokenInfo(String str,Analyzer a){

        try {

            TokenStream stream = a.tokenStream(“content”,new StringReader(str));
            //位置增量的属性,存储语汇单元之间的距离
            PositionIncrementAttribute pis=stream.addAttribute(PositionIncrementAttribute.class);
            //每个语汇单元的位置偏移量
            OffsetAttribute oa=stream.addAttribute(OffsetAttribute.class);
            //存储每一个语汇单元的信息(分词单元信息)
            CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class);
            //使用的分词器的类型信息
            TypeAttribute ta=stream.addAttribute(TypeAttribute.class);
            stream.reset();
            while(stream.incrementToken()) {

                System.out.print(“增量:”+pis.getPositionIncrement()+”:”);
                System.out.print(“分词:”+cta+”位置:[“+oa.startOffset()+”~”+oa.endOffset()+”]->类型:”+ta.type()+”\n”);
            }
            System.out.println();
            stream.end();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }

}

测试代码:

    @Test
    public void testAnalyzer(){

        
        Analyzer a1=new StandardAnalyzer(Version.LUCENE_43);
        Analyzer a2=new StopAnalyzer(Version.LUCENE_43);
        Analyzer a3=new SimpleAnalyzer(Version.LUCENE_43);
        Analyzer a4=new WhitespaceAnalyzer(Version.LUCENE_43);
        
        String str=”this is my house,I am come from yunnang zhaotong,my email is 342345324@qq.com”;
        //String str=”我的家乡在福建省龙岩市”;
        AnalyzerUtils.displayToken(str, a1);
        AnalyzerUtils.displayToken(str, a2);
        AnalyzerUtils.displayToken(str, a3);
        AnalyzerUtils.displayToken(str, a4);
        
    }

   @Test
    public void testAnalyzer02(){

        
        Analyzer a1=new StandardAnalyzer(Version.LUCENE_43);
        Analyzer a2=new StopAnalyzer(Version.LUCENE_43);
        Analyzer a3=new SimpleAnalyzer(Version.LUCENE_43);
        Analyzer a4=new WhitespaceAnalyzer(Version.LUCENE_43);
        
        String str=”how are you thank you”;
        
        AnalyzerUtils.displayAllTokenInfo(str, a1);
        AnalyzerUtils.displayAllTokenInfo(str, a2);
        AnalyzerUtils.displayAllTokenInfo(str, a3);
        AnalyzerUtils.displayAllTokenInfo(str, a4);
        
    }

控制台结果显示:

      英文结果:

           testAnalyzer()结果:

[my][house][i][am][come][from][yunnang][zhaotong][my][email][342345324][qq.com]
[my][house][i][am][come][from][yunnang][zhaotong][my][email][qq][com]
[this][is][my][house][i][am][come][from][yunnang][zhaotong][my][email][is][qq][com]
[this][is][my][house,I][am][come][from][yunnang][zhaotong,my][email][is][342345324@qq.com]

testAnalyzer()结果

增量:1:分词:how位置:[0~3]->类型:<ALPHANUM>
增量:2:分词:you位置:[8~11]->类型:<ALPHANUM>
增量:1:分词:thank位置:[12~17]->类型:<ALPHANUM>
增量:1:分词:you位置:[18~21]->类型:<ALPHANUM>

增量:1:分词:how位置:[0~3]->类型:word
增量:2:分词:you位置:[8~11]->类型:word
增量:1:分词:thank位置:[12~17]->类型:word
增量:1:分词:you位置:[18~21]->类型:word

增量:1:分词:how位置:[0~3]->类型:word
增量:1:分词:are位置:[4~7]->类型:word
增量:1:分词:you位置:[8~11]->类型:word
增量:1:分词:thank位置:[12~17]->类型:word
增量:1:分词:you位置:[18~21]->类型:word

增量:1:分词:how位置:[0~3]->类型:word
增量:1:分词:are位置:[4~7]->类型:word
增量:1:分词:you位置:[8~11]->类型:word
增量:1:分词:thank位置:[12~17]->类型:word
增量:1:分词:you位置:[18~21]->类型:word

中文结果:

testAnalyzer()结果

[我][的][家][乡][在][福][建][省][龙][岩][市]
[我的家乡在福建省龙岩市]
[我的家乡在福建省龙岩市]
[我的家乡在福建省龙岩市]

testAnalyzer02()结果

增量:1:分词:明位置:[0~1]->类型:<IDEOGRAPHIC>
增量:1:分词:天位置:[1~2]->类型:<IDEOGRAPHIC>
增量:1:分词:是位置:[2~3]->类型:<IDEOGRAPHIC>
增量:1:分词:我位置:[3~4]->类型:<IDEOGRAPHIC>
增量:1:分词:的位置:[4~5]->类型:<IDEOGRAPHIC>
增量:1:分词:生位置:[5~6]->类型:<IDEOGRAPHIC>
增量:1:分词:日位置:[6~7]->类型:<IDEOGRAPHIC>

增量:1:分词:明天是我的生日位置:[0~7]->类型:word

增量:1:分词:明天是我的生日位置:[0~7]->类型:word

增量:1:分词:明天是我的生日位置:[0~7]->类型:word

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163131.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MAC 更新SVN到1.8

    MAC 更新SVN到1.8

  • 操作系统期末总复习(题库)[通俗易懂]

    操作系统期末总复习(题库)[通俗易懂]问答题什么是操作系统,主要功能有哪些?操作系统:计算机最基本最重要的基础性系统软件,可以使计算机系统能协调、高效和可靠地进行工作主要功能:处理器管理、存储器管理、设备管理、文件管理、作业管理等功能模块什么是微内核技术,主要有哪些功能?微内核技术把操作系统中更多的成分和功能放到更高的层次(即用户模式)中去运行,而留下一个尽量小的内核,用它来完成操作系统最基本的核心功能,称这种技术为微内核技术。主要功能:进程(线程)管理、低级存储器管理、中断和陷入处理等功能。简述进程的基本状态及状态之间的转换

  • long转string的方法

    long转string的方法publicclassTest{publicstaticvoidmain(String[]args){longa1=12;Strings1=a1+””;//法1:直接加空串System.out.println(s1+999);longa2=34;Strings2…

  • python控制灯_树莓派python编程 做一个LED呼吸灯「建议收藏」

    呼吸灯概述上一篇我们通过控制GPIO口输出高低电平来控制一只LED的亮灭。这次我们来控制LED的亮度,灯由暗渐渐变亮,再由亮渐渐边暗,反复循环,也就是呼吸灯的效果。按Ctrl+C结束程序。通过本节课,你能学习到:脉冲宽度调制技术所需硬件树莓派x1面包板x1杜邦线x2LED灯x1名称解释我们知道,通过LED的电流越大,LED越亮,电流越小,LED越暗。如果可以控制输出电流大小就可…

  • 输入代码自动生成名称_变量命名工具codelf

    输入代码自动生成名称_变量命名工具codelfCodeifCodeIfhttps://unbug.github.io/codelf/包含流行语言,java,c,javaScript,python等等

  • 【OpenGrok代码搜索引擎】四、OpenGrok使用指南

    【OpenGrok代码搜索引擎】四、OpenGrok使用指南三、智能窗口四、差异跳转

发表回复

您的电子邮箱地址不会被公开。

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