Carrot2 in action 初步印象
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. carrot2中LocalComponent是一下三种本地组建的超级几口:
LocalInputComponent:用于接受用户的查询和处理初始数据
LocalFilterComponent:用于改变或者丰富数据
LocalOutputComponent:收集聚类结果或者对结果做一些处理,如用可视化组建显示这些结果等等
2. 组建初始化
在任何处理操作之前,组件和处理器(processes:LocalProcessBase)被添加到一个组建容器,同时它们也会被一个控制(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)
Carrot2 in action 初步印象的更多相关文章
- 转来的——python webdriver自动化测试初步印象——转来的
python webdriver自动化测试初步印象 以下示例演示启动firefox,浏览google.com,搜索Cheese,等待搜索结果,然后打印出搜索结果页的标题 from selenium i ...
- HBASE学习笔记-初步印象
HBASE概念: HBASE是一个分布式架构的数据库,通过对数据进行多层的分块打散储存.从而改写传统数据库的储存能力和读取速度. HBASE的集群服务器: HBASE的集群主要分为Zookeeper集 ...
- linux服务器初步印象,远程连接mysql数据库,传输文件,启动/关闭tomcat命令
1.连接服务器数据库,以Navicat连接mysql为例 1.1 常规 新建连接,连接名,主机名或ip地址:127.0.0.1 端口:3306用户名:(服务器端)root密码:(服务器端)pwd 1. ...
- paddlepaddle初步印象
从其官网整理了一些资料如下: 1.基本概念 基本使用概念 PaddlePaddle是源于百度的一个深度学习平台.PaddlePaddle为深度学习研究人员提供了丰富的API,可以轻松地完成神经网络配置 ...
- CMake初步(1)
转自:<你所不知的OSG>第一章:CMake初步(1)http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1189&f ...
- PostgreSQL执行机制的初步学习
作为开源数据库的新手,近日有兴对比了Pg和MySQL的查询计划. 通过Pg源码目录下的src\backend\executor\README文件,加上一些简单调试,就能对Pg的执行机制产生一个初步印象 ...
- ASP.NET MVC 5 Web编程1 -- 入门
开篇引言 说起ASP.NET MVC,我想作为WebForms开发者第一点要问的是:为什么要使用它?我的理解是:MVC是更细节化的框架,“细节可控”意味着你的系统更精致.具体体现在应用上.MVC的出现 ...
- 通过案例对 spark streaming 透彻理解三板斧之一: spark streaming 另类实验
本期内容 : spark streaming另类在线实验 瞬间理解spark streaming本质 一. 我们最开始将从Spark Streaming入手 为何从Spark Streaming切入 ...
- 使用Jenkins搭建持续集成服务
1. 什么是持续集成 持续集成 (Continuous Integration, 简称 CI) 是软件工程中的一种实践, 用于将开发人员不同阶段的工作成果集成起来, 通常一天之中会进行多次. 持续集成 ...
随机推荐
- Java笔记5:单例模式
一.应用杨景 在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Printer ...
- 微信团队原创分享:iOS版微信的内存监控系统技术实践
本文来自微信开发团队yangyang的技术分享. 一.前言 FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样. ...
- UGUI 实现界面 渐隐渐现 FadeIn/Out 效果
孙广东 2015.7.10 事实上熟悉NGUI的人,应该知道 实现渐隐渐现 FadeIn/Out 效果是非常方便的,由于父对象 的 改变会自己主动影响到子对象. 比方 UIWidget.UIPan ...
- python——socket模块与列表映射
从socket模块学习中的一段奇怪代码说起 前言:在学习python标准库中的Socket模块中,发现了一段奇怪的代码. import socket def get_constants(prefix) ...
- 微信小程序 如何定义全局函数?
微信小程序 定义全局数据.函数复用.模版等 微信小程序定义全局数据.函数复用.模版等问题总结: 1.如何定义全局数据 在app.js的App({})中定义的数据或函数都是全局的,在页面中可以通过var ...
- SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 这个 ...
- What most young programmers need to learn
In the past 7.5 years I have supervised over a dozen programming interns at Ronimo and have seen hun ...
- 来自oaim的一些推广信息
笔者几年工作经历亲身走访过一些玻璃深加工企业,发现很重要的一种工具装载玻璃的铁架.而许多企业由于缺少实际操作的经验,导致部分铁架从被制作出来就让我们的成品存在质量缺陷的隐患,最常见的是装好中空玻璃,当 ...
- ActiveMQ介绍和ActiveMQ入门实例
ActiveMQ百度百科 ActiveMQ入门实例-cnblogs.com 作者用的是5.5的版本,我测试时用的是5.6,按照作者说的整了一下,走得通
- CefSharp.WinForms
CefSharp.WinForms 一. 前言 银医通项目,现在另外一家医院需要上系统,所以项目需要重新搭建,由于这家医院的His系统和另外一家医院的His系统不同,界面风格也不一致,所以重新搭建, ...