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

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

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

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


相关推荐

  • Tensorflow2.0使用Resnet18进行数据训练[通俗易懂]

    Tensorflow2.0使用Resnet18进行数据训练[通俗易懂]在今年的3月7号,谷歌在TensorflowDeveloperSummit2019大会上发布TensorFlow2.0Alpha版,随后又发布的了Beta版本。Resnet18结构Tensorflow搭建Resnet18导入第三方库importtensorflowastffromtensorflowimportkerasfromtensorflo…

    2022年5月9日
    155
  • Java集合篇:Vector

    Java集合篇:Vector

    2021年10月4日
    40
  • dp3003打印机怎么清零_打印机接口叫什么

    dp3003打印机怎么清零_打印机接口叫什么有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。示例 1:输入:s = “aaabbb”输出:2解释:首先打印 “aaa” 然后打印 “bbb”。示例 2:输入:s = “aba”输出:2解释:首先打印 “aaa” 然后在第二个位置打印 “b” 覆盖掉原来的字符 ‘a’。 提示:1 <= s.le

    2022年8月11日
    3
  • C# Grid StackPanel DockPanel WrapPanel

    C# Grid StackPanel DockPanel WrapPanelWPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel回顾       上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当然这些都是本人在实际项目中的使用经验,可能还存在错误之处,还请大家指出。本文大纲1、Grid2、StackPanel3、DockPanel…

    2022年7月23日
    6
  • 毕业两年

    又到毕业季,去年毕业一年,今年,毕业两年了,一年一度的“毕业N年”系列。今年经历了两件事,离职和成长。离职 去年8月份从百度离职了,北京来到杭州,加入现在这家创业公司,做乐器教育方向的,应用叫Finger。成长 技术。这个三两句话也说不清楚,最近一年忙于工作也没写博客了。从客观角度来看的话,更多关注工程的架构和可扩展性,也厌烦了重复性的工作,把重复性的逻辑都通过封装解耦出去,通过“

    2022年3月11日
    37
  • Python抛出异常_python抛出异常的作用

    Python抛出异常_python抛出异常的作用在工作中都会遇到异常报错问题,那么在这抽空码一些内容以作记录。在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误AttributeError#试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError#输入/输出异常;基本上是无法打开文件ImportError#无法引入模块或包;基本上是路径问题或名称错误Indentati.

    2022年10月17日
    0

发表回复

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

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