`
Qieqie
  • 浏览: 340020 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

中文分词 庖丁解牛 2.0.0版本发布

阅读更多
庖丁解牛 最新版本2.0.0

主要变更:

1)调整了package命名 改为net.paoding.analysis开头;调整了一些类的命名,主要是XAnalyzer改为
PaodingAnalyzer之类的。

2)并调整了部分代码的相对位置:代码集中在三个包中:
net.paoding.analysis.dictionary 字典抽象--这是核心代码之一
net.paoding.analysis.knife "刀"抽象-分词算法-这是核心代码之二
net.paoding.analysis.analyzer 封装adapter到lucene接口
关键代码没有任何改变,特别是CJKKnife没有发现错误。

3)同时,将字典改为英文命名,避免操作系统中文命名带来不必要影响

4)增加了配置文件;使knife可以在配置文件配置增减,同时字典的安装路径可以随意指定。

5)BUGFIX : highlight位置错误

下载地址:[url]http://code.google.com/p/paoding/downloads/list [/url]
SVN地址:http://paoding.googlecode.com/svn/trunk/paoding-analysis/

-------------------------------------------------------------------
选择"庖丁解牛"作为Lucene中文分词可能有以下理由:

@设计优美-使用庖丁隐喻,容易理解代码设计

@效率极高-极高效率的字典查找算法;尽量避免无谓试探查找

@算法简练-简单易理解的算法,但效率却是非常高效的

@轻松支持最大/最小切词

@字典灵活-
字典文件个数不限;
名称不限,只要符合以dic作为扩展名的均视为字典
目录层级不限(所以可以任意加减字典目录以及目录下的字典)
字典格式简单:不需要特别排序,人工可编辑

@源代码是开放的,遵守http://www.apache.org/licenses/LICENSE-2.0协议

@作者能力:Java基础知识、设计能力扎实、持续关注改进

-------------------------------------------------------------------
"庖丁解牛" 使用指南

1、准备
1)将二进制包paoding-analyis.jar放到自己的classpath下

2)将字典文件安装(也就是拷贝)到某个目录下,比如/data/paoding/dic下

3)把配置文件paoding-analysis.properties放到自己的classpath下

4)打开paoding-analysis.properties,把paoding.dic.home属性设置为字
典的安装目录,比如paoding.dic.home=/data/paoding/dic,特别的,如
果字典是安装在classpath下的dic目录下,则可以简单这样配置该属性:
paoding.dic.home=classpath:dic

2、建立索引
1)将庖丁封装成符合Lucene要求的Analyzer规范,获取writer mode的lucene
分析器,writer mode意味要同时支持最大和最小切词。
Paoding paoding = PaodingMaker.make();
Analyzer writerAnalyzer = PaodingAnalyzer.writerMode(paoding);

Paoding应保存为一个系统单例为好,以重复利用,它是线程安全的.

2)使用Lucene标准API对文件建立索引。
IndexWriter writer = new IndexWriter(dirctory, writerAnalyzer);
...

3、检索查找
1)使用Lucene标准API对文件进行检索,使用和建立索引时相同种的lucene分析器。
QueryParser parser = new QueryParser("content", writerAnalyzer );
...

更具体的使用方式参见
examples/net.paoding.analysis.examples.gettingstarted中的示例代码

------------------------------------------------------------------
"庖丁解牛"google 论坛:
[url]http://groups.google.com/group/paoding [/url]

"中文分词" Javaeye 论坛:
http://analysis.group.iteye.com/

svn地址:
[url]http://paoding.googlecode.com/svn/trunk/paoding-analysis/ [/url]

旧版本地址:
http://paoding.googlecode.com/svn/trunk/paoding-analysis-1/
不建议下载旧版本
分享到:
评论
12 楼 Qieqie 2007-08-10  
根据这两天友善的同学们给我的反馈,庖丁暂时收到有这几个方面要求:

1、编译成较低JDK版本的JAR包[目前打的JAR包是JDK6.0的,一部分人应该下载源代码后自己打包成符合自己环境的版本-还好这不是不可解决的]
2、字典的保存和读取强制采用UTF-8编码格式
3、支持运行时修改、添加、删除字典以及字典目录(可配置间隔时间)
4、支持把繁体字的UTF-8编码,等价转化于对应字的简体UTF-8进行,后进行分词(也就不再另外有专门的繁体词典)-是否可行?
5、庖丁不需要去保证能够正确处理非UTF-8编码的文本。对于GBK(GB2312),big5等编码的文本,都应在提交给庖丁之前就已经转为UTF-8编码。

11 楼 Qieqie 2007-08-09  
我委托其他同学试一下"高度错误问题"。他们下载google上提供的  链接  后运行和我一样是正确的。

我在我的本上(xp home JDK1.6)、PC(xp pro JDK1.6)、Server(rhas JDK1.5)三个机器上使用高亮都是OK的,委托帮忙测试的人也都反馈正确,
但是你确实截图上出现高亮到最大词的问题,这也是千真万确的,所以很雾水。

而且如果这个问题为真,也应是代码的问题,应跟操作系统环境无关。

只能多多试验了,然后最后求证,看看差别在什么地方。

----------------------
背景: rainsf说的问题是:
检索“中华”时,在它那边的环境中会把“中华人民共和国”加亮的问题。


希望有热心的同学帮忙一下
下载paoding-analysis-2.0.0.zip解压后,进入cmd命令行,运行一下example.bat如下:
E:\xxx\paoding-analysis-2.0.0>example.bat 中华

看看结果如何,是否<b></b>仅包含在“中华”,还是包含在“中华人民共和国”外面
然后把运行结果COPY发送站内消息给我。 不胜感谢   ~~ orz (我给您趴下了)

[由于本人不慎,打的JAR是JDK6的,所以如果环境不是JDK6的同学,可能不能直接运行example.bat]

这是我的运行结果:

引用

E:\...\paoding-analysis-2.0.0>example.bat 中华

E:\...\paoding-analysis-2.0.0>java -cp ./;paoding-analyis.jar;lib/commons-logging.jar;lib/lucene-core-2.2.0.jar;lib/lucene-highlighter-2.2.0.jar net.paoding.analysis.examples.gettingstarted.ch2.PeopleRepublicOfChina 中华
2007-8-9 21:39:27 net.paoding.analysis.knife.FileWordsLoader setProperties
信息: paoding.dic.home=dic/
2007-8-9 21:39:29 net.paoding.analysis.knife.PaodingMaker make
信息: add knike: net.paoding.analysis.knife.CJKKnife
2007-8-9 21:39:29 net.paoding.analysis.knife.PaodingMaker make
信息: add knike: net.paoding.analysis.knife.NumberKnife
2007-8-9 21:39:29 net.paoding.analysis.knife.PaodingMaker make
信息: add knike: net.paoding.analysis.knife.LetterKnife
Searching for: 中华

<b>中华</b>人民共和国(英文:The People's Republic of China,通常简称...];<b>中
华</b>人民共和国将行政區劃分为23个省、5个少数民族自治区、4个直辖市、以及2个特别
行政区,但台湾不在<b>中华</b>人民共和国政府实际控制范围内(参见:台湾问题)。<b>
中华</b>人民共和国是世界上人口最多的国家,人口总数...多数,其余55个民族被统称为
少数民族。<b>中华</b>人民共和国境内的通用语言是汉语普通话,使用的文字是规范汉字
(此即汉语簡化字),少数民族如壮族、维吾尔族、蒙古族、藏族、朝鲜族等拥有自己的文
字。《<b>中华</b>人民共和国宪法

E:\...\paoding-analysis-2.0.0>

10 楼 rainsf 2007-08-09  
我上面说的是文件储存编码,这个是要解决的,也好解决。
你说的是字符集问题,当然啦,如果用户检索的是繁体字,你的简体词典里又没有这个词,那肯定检索不到结果。我看过有的中文分词做了这方面的工作,里面有三个版本的中文词典。如有需要我可以发给你。

很不好意思,高度错误问题仍然存在,我已经尝试了很多次了。你应该也收到我的截图吧。郁闷,为什么你运行就没有问题呢。是不是你本地还有什么修改没提交?这个问题不解决没法用呀。
9 楼 Qieqie 2007-08-09  
不是这个问题。

我指的是使用者的系统(不是开发者源代码编码,而是用户传过来的字符串编码)不仅仅限制在UTF-8,可能是其他编码。
如果请求传过来的是其他编码形式的文本,而词典不与其匹配,那么词典就没用了。

说到这,激发我想到一个相关的问题:

怎么同时支持不同编码,但实际是同一个字的的分词?

比如同样都是“体育”这个词,GBK有GBK的编码,UTF-8有UTF-8的编码,big5有big5的编码(“體育”)。

对!中文分词应该把这些不同的编码的词视为一个词。
策略上可以以UTF-8作为统一标准,由庖丁自动将非UTF-8的文本(包括正体字/繁体字),转为简体UTF-8的,然后再进行分词!

这个需求应该是有用的。现在庖丁解牛没有做这方面的工作。
8 楼 rainsf 2007-08-09  
Qieqie 写道
这个情况值得讨论一下。

对被分词的文本,我们不知道他是什么编码的,可能是GBK,可能是UTF-8,不同的应用可能不一样。
如果在庖丁的代码中hard code指定使用UTF-8读取字典(此时字典是UTF-8编码的),如何应用在非UTF-8的应用中?

可能可以这样做:

我们在配置文件中增加一个“编码”配置项,同时提供多种编码的字典。
不同的应用,根据实际情况在配置文件里面设置编码,并使用对应编码的字典



这与工程的编码格式无关,仅与文件的存储编码格式有并,只要你以某种编码方式存储,再与对应的编码方法读取就没问题的了,你可以指明用户,要求以UTF-8编码保存字典文件。如果你不想这样做,你也可以用一些工具(如:Cpdetector)来检测字典文件的编码格式,再以正确的编码方式读取就OK了。


7 楼 caocao 2007-08-09  
字典文件编码可配置即可
6 楼 Qieqie 2007-08-09  
这个情况值得讨论一下。

对被分词的文本,我们不知道他是什么编码的,可能是GBK,可能是UTF-8,不同的应用可能不一样。
如果在庖丁的代码中hard code指定使用UTF-8读取字典(此时字典是UTF-8编码的),如何应用在非UTF-8的应用中?

可能可以这样做:

我们在配置文件中增加一个“编码”配置项,同时提供多种编码的字典。
不同的应用,根据实际情况在配置文件里面设置编码,并使用对应编码的字典

5 楼 rainsf 2007-08-09  
其实词典文件只要用UTF-8编码保存,读取的时候也以UTF-8来读取就可以了,不需要搞两份不同骗码的词典,用UTF-8可以保证环境不同不会乱码。

我看了你的FileWordsReader.java
BufferedReader in = new BufferedReader(new InputStreamReader(
	new FileInputStream(f)));

这样读取在不同环境存在乱码的可能的,因为这样是以操作系统的默认编码去读取的,如果你的操作系统是中文的,那就是说以GBK编码方式去读取,所以读取UTF-8那份词典肯定是乱码。
正确的读取方式应该是:
BufferedReader in = new BufferedReader(new InputStreamReader(
	new FileInputStream(f),"UTF-8"));


至于有没有必要搞两份不同编码的源代码,那就见仁见智了,我写了个工具类,可以方便转换不同编码的工程,有需要的同学可以问我要。
4 楼 Qieqie 2007-08-09  
rainsf 写道

2、最终的Analyer子类(PaodingAnalyzer),应该提供一个无参构造器,因为大多数框架通常都是配置指定Analyer实现类通过反映加载Analyer的,如Hibernate Search.


参见:
[url=http://analysis.group.iteye.com/group/post/15584 ]JavaEye:Spring Context下使用"庖丁解牛" [/url]
或:
Google:Spring Context下使用"庖丁解牛"

简单摘要(以上面两个链接中的说明为准,这里只是摘要):

   <bean id="writerAnalyzer" class="net.paoding.analysis.analyzer.PaodingAnalyzer">
       <property name="knife" ref="paoding"/>
       <property name="mode" value="1"/>
   </bean>

   <bean id="queryAnalyzer" class="net.paoding.analysis.analyzer.PaodingAnalyzer">
       <property name="knife" ref="paoding"/>
       <property name="mode" value="2"/>
   </bean>

   <bean id="paoding" class="net.paoding.analysis.knife.PaodingMaker"  factory-method="make"/>


---------
补:
1、建立索引和使用索引只能使用同一种/模式的分词器
2、2.0.2以后(包含)queryMode和writerMode这两个名称将重构为更好的名称,请留意倒是的API说明或readme变更说明。
3 楼 rainsf 2007-08-08  
有两个其它建议要提一下的:
1、词典文件建议使用UTF-8编码格式保存,避免不同的操作系统出现乱码的的可能,如在英文(非GBK)的操作系统就会读取乱码,这样分词就徒劳无功了。
2、最终的Analyer子类(PaodingAnalyzer),应该提供一个无参构造器,因为大多数框架通常都是配置指定Analyer实现类通过反映加载Analyer的,如Hibernate Search.
2 楼 rainsf 2007-08-08  
切切.王,呵呵,你好, 很高兴今天下午收到你的邮件回复,我下载了最新版本,包结构的确比以前清晰了不少,也有些不错的调整。
我运行了你的ch4下面的例子,同样地,高亮错误的问题还是没有得到解决,如查询“中华”会把“中华人民共和国”都高亮了。总之会把连在一起的也成词的都高亮,我不知道你自己的测试为何没有问题,希望其他遇到这个问题的人也出来说说。
期待你的解决,关注中……
1 楼 bruce_luo 2007-08-08  
好呀,兄弟,我前段时间就看了你写的这个东东,不错,确实不错!

相关推荐

    庖丁分词jar包

    庖丁分词的设计理念是借鉴了古代厨师“庖丁解牛”的故事,寓意其在处理中文文本时能够像庖丁一样游刃有余,精准地进行分词。 在压缩包文件名称“paoding-analysis-2.0.0”中,“paoding”是庖丁分词的英文名称,...

    INAV Configurator 2.0.0 中文版本

    INAV Configurator 2.0.0 中文版本

    魔众人才招聘系统 v2.0.0

    魔众人才招聘系统发布v2.0.0版本,新功能和Bug修复累计19项,全新升级,美观大方。 -0001年11月30日魔众人才招聘系统发布v2.0.0版本,增加了以下19个特性: - [新功能] 用户前后台全面升级 - [新功能] 系统...

    nacos-server-2.0.0-ALPHA.1下载, 内容包含windows与linux的nacso2.0.0版本

    在2.0.0-ALPHA.1版本中,Nacos进一步提升了性能和稳定性,提供了更加丰富的功能,适配了更多场景的需求。 标题提到的“nacos-server-2.0.0-ALPHA.1下载”指的是Nacos的服务器端的2.0.0预览版,这个版本包含了针对...

    Hbase数据库2.0.0版本介绍

    Hbase数据库2.0.0版本介绍 Assignment Manager v1 root of many operational headaches ● Redo based on custom “ProcedureV2”-based State Machine ○ Scale/Performance ○ All Master ops recast as Pv2 ...

    spark-2.0.0.tgz

    Spark 2.0.0版本是该框架的一个重要里程碑,它在前一版本的基础上进行了大量的优化和改进,旨在提供更好的性能和更多的功能。在这个版本中,开发者可以体验到更加成熟的SQL支持、更强大的机器学习库MLlib以及更加...

    魔众Markdown管理系统发布v2.0.0版本

    魔众Markdown管理系统采用PHP+Mysql架构,是一款对SEO非常友好、功能全面、安全稳定、支持多终端展示并且使用起来极其简单的...魔众Markdown管理系统发布v2.0.0版本,新功能和Bug修复累计13项,全新架构,更稳定更美观。

    elgg2.0.0版本

    压缩包内的 "elgg-2.0.0-beta.3" 文件可能是 Elgg 2.0.0 的第三个测试版本,通常在正式发布之前,软件会经历多个预发布阶段,如 alpha、beta 和 RC(Release Candidate)阶段。这个 beta 版本意味着软件已经接近完成...

    魔众博客发布v2.0.0版本-平台升级,简化系统

    魔众博客系统采用PHP+Mysql架构,是一款对SEO非常友好、功能全面、安全稳定、支持多终端展示并且使用起来极其简单的博客管理系统。...魔众博客系统发布v2.0.0版本,新功能和Bug修复累计3项,系统更精简,平台升级。

    GAppProxy服务端源码+windows自动布署工具,2.0.0版本

    GAppProxy服务端源码+windows自动布署工具,2.0.0版本

    seata-2.0.0

    2.0.0版本的发布标志着Seata在功能、性能和稳定性上有了显著的提升。下面我们将深入探讨Seata的核心概念、工作原理以及在2.0.0版本中的关键特性。 1. 分布式事务挑战与Seata解决方案: 在微服务架构中,由于服务间...

    2.0.0 升级日志1

    本资源摘要信息将详细介绍 2.0.0 版本升级日志中所包含的知识点。 nwjs 升级 在 2.0.0 版本中,nwjs 被升级到了 0.20.3,这意味着 Chromium 也升级到了 56,Node 也升级到了 7.6.0。这将带来更好的性能和安全性。 ...

    Lucene-core-2.0.0.jar

    2.0.0版本的发布,标志着Lucene在搜索领域迈出的重要一步。这个版本不仅提供了基础的索引和搜索功能,还引入了多项改进,增强了性能和稳定性,使得开发者能够更方便地集成到自己的项目中。 首先,Lucene的核心概念...

    Lucene 2.0.0下载安装及简单测试

    然而,值得注意的是,Lucene 2.0.0版本默认的分词器并不支持中文分词,这意味着如果尝试用中文字符进行搜索,将不会返回任何结果。这是因为中文分词是一项复杂的技术挑战,需要专门设计的分词器才能处理。 四、结语...

    keilL4板子支持包,1.3.0版本、1.4.0版本、2.0.0版本、2.1.0版本、2.2.0版本

    KEILL4XX板载支持包,包含Keil.STM32L4xx_DFP.1.3.0.pack、Keil.STM32L4xx_DFP.1.4.0.pack、Keil.STM32L4xx_DFP.2.0.0.pack,Keil.STM32L4xx_DFP.2.1.0.pack,Keil.STM32L4xx_DFP.2.2.0.pack,支持新老版本Keil...

    keilH7板子支持包,2.0.0版本、2.1.0版本、2.2.0版本、2.3.0版本

    KEILH7XX板载支持包,包含Keil.STM32H7xx_DFP.2.0.0.pack、Keil.STM32H7xx_DFP.2.1.0.pack、Keil.STM32H7xx_DFP.2.2.0.pack、Keil.STM32H7xx_DFP.2.3.0.pack,支持新老版本Keil客户端

    基于VKARM V2.0.0版本的机械臂移植代码设计源码

    该项目为基于VKARM V2.0.0版本的机械臂移植代码设计源码,涉及1599个文件,包括558个cmake文件、416个make文件、57个launch文件、51个txt和stamp文件、50个Python脚本文件以及若干C, C++, Shell语言文件。...

    keilL0板子支持包,1.6.0版本、1.6.1版本、2.0.0版本

    KEILL0XX板载支持包,包含Keil.STM32L0xx_DFP.1.6.0.pack、Keil.STM32L0xx_DFP.1.6.1.pack、Keil.STM32L0xx_DFP.2.0.0.pack、支持新老版本Keil客户端

    lucene2.0.0

    2.0.0版本中,内置了一些常见的分词器,如StandardAnalyzer,用于处理英文文本。 3. **Document与Field**:Document是Lucene的基本存储单元,代表一份文档,由多个Field组成。每个Field对应文档的一个属性,如标题...

    pycocotools-2.0.0.tar.gz

    2.0.0版本的发布,对原有的功能进行了优化和增强,以更好地服务于科研和开发工作。 一、COCO数据集与pycocotools的关系 COCO数据集是一个包含丰富标注的多模态数据集,涵盖了大量的日常物体和场景,提供了精确的...

Global site tag (gtag.js) - Google Analytics