热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Carrot2inaction初步印象

RawCluster:聚类中的类别单位RawCluster.getDocuments():获得该类的文档列表RawDocument:每个类的文档单位STC:后缀树表示法

 

RawCluster聚类中的类别单位

RawCluster.getDocuments():获得该类的文档列表

RawDocument:每个类的文档单位

STC:后缀树表示法

 

 

2008-11-13

Carrot2的组建(components)的介绍:

1.        输入(input):产生聚类文本的组建。Carrot2针对目前的几个主要搜索引擎(Yahoo:carrot2-input-yahooapi.jar, Google, MSN Search)和开源搜索引擎(lucene:carrot2-input-lucene.jar)以及XMLs接口 (such as RSS or OpenSearch:carrot2-input-xml.jar).,提供了几个默认的输入组建。除此之外,你也可以自己重写自己的输入组建。

LocalComponentFactory

LuceneLocalInputComponentConfig

LuceneLocalInputComponentFactoryConfig

// Create Lucene input component factory.

        //

        final LocalComponentFactory input = new LocalComponentFactory() {

            public LocalComponent getInstance() {

                returnnew LuceneLocalInputComponent(luceneConfig);

            }

        };

 

        // add lucene input as 'lucene-myindex'

        controller.addLocalComponentFactory("lucene-myindex", input);

 

 

2.      过滤器(filters: Carrot2中的过滤器其实就是聚类组建和一些过滤操作的集合。Carrot2自带有一定数量的过滤器,每一个过滤器都执行一个不同的算法(如lingo,k-mean and so on),并且根据处理链中,在它之前的过滤器的不同和以及自身配置的不同,每个过滤器会有一些不同的要求设置。Eg:carrot2-filter-lingo.jar,carrot2-filter-haog.jar,carrot2-filter-stc.jar

    final LocalComponentFactory lingo = new LocalComponentFactory() {

            public LocalComponent getInstance() {

                // we will use the defaults here, see {@link Example}

                // for more verbose configuration.

                returnnewChineseLingoLocalFilterComponent();

            }

        };

 

        // add the clustering component as "lingo-classic"

        controller.addLocalComponentFactory("lingo-classic", lingo);

3.      输出(output):当从聚类器获得结果的时候,carrot2用输出组件去对这些结果进行一些处理操作。实际上输出组件处理的是接口“RawCluster”的实例。最简单的处理方式就是把哲学聚类结果保存没在一个数组中,直到所有的聚类操作完成;一个更高级一点的方式就是,聚类结果出来一个马上进行输出处理,而不是放在一个数组中最后统一处理,这种凡是的实质就是一个与聚类操作(filter)的同步。

   final LocalComponentFactory output = new LocalComponentFactory() {

            public LocalComponent getInstance() {

                returnnew ArrayOutputComponent();

            }

        };

        // add the output component as "buffer"

        controller.addLocalComponentFactory("buffer", output);

 

话外话:carrot2中之所以很多地方都用到”Local”来命名,这其实是由于历史原因:在carrot2中曾经设计过一个用于远程通信的并行组建,虽然现在弃用了,但是与之相对的本地组建用“Local”命名的方式一直沿用着。

 

2008-11-14

设计概要

1.       carrot2LocalComponent是一下三种本地组建的超级几口:

LocalInputComponent:用于接受用户的查询和处理初始数据

LocalFilterComponent:用于改变或者丰富数据

LocalOutputComponent:收集聚类结果或者对结果做一些处理,如用可视化组建显示这些结果等等

2.       组建初始化

在任何处理操作之前,组件和处理器(processesLocalProcessBase)被添加到一个组建容器,同时它们也会被一个控制(controller)组件所引用。这个控制组件不会再核心框架中被明确指定,因为它更有可能是应用相关的,即属于应用层,已经超出了限定的范围。然而,在框架中却指定了一个LocalControllerContext接口,并且它会传递给每一个实例化的组建。其实LocalControllerContext主要是用来证实每个组建和处理器之间的兼容性的,同时也为实现一些别的组件类型提供了可能性。

3.      处理器

一个本地处理器包含了处理查询和在处理链中装配组件的逻辑过程。这个接口(LocalProcess)的实例必须由框架的使用者来定义(也就是应用相关),因为他要决定哪些组建要被用于处理查询而他们之间又是如何联系的。LocalProcess的行为规范是十分复杂的,一般鼓励开发者去使用它的子类LocalProcessBase,可以重载它里面的钩子(Hook)函数。

     //

        // In the final step, assemble a process from the above.

        //

        try{

            controller.addProcess("lucene-lingo",

                    new LocalProcessBase("lucene-myindex", "buffer", new String [] {"lingo-classic"}));

        } catch (InitializationException e) {

            // This exception is thrown during verification of the added component chain,

            // when a component cannot properly initialize for some reason. We don't

            // expect it here, so rethrow it as runtime exception.

            thrownew RuntimeException(e);

        } catch (MissingComponentException e) {

            // If you give an identifier of a component for which factory has not been

            // added to the controller, you'll get this exception. Impossible in our

            // example.

            thrownew RuntimeException(e);

        }

 

4.      查询执行

当所有的处理器和组建都添加到控制器之后。控制器就会用一个query()(旧版如下)将一个查询请求传递给本地处理实例。

public void Object query(RequestContext context, String query) throws Exception

  一个处理就会请求一个组件实例并将它同一个处理链联系起来,然后执行查询请求。(转自:http://blog.sina.com.cn/s/blog_43b8e6dd0100ne5z.html)


推荐阅读
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
潜伏在人间_144
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有