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

中文分词 庖丁解牛 版本号 2.0.1

阅读更多
庖丁解牛 中文分词 版本号 2.0.1

---------------------------------------------------
相对2.0.0版本变更如下:

重构(!)
svn上的代码和字典从原来的GBK编码转化为UTF-8编码(使用Eclipse下载代码的同学需要改变工程的encoding)
->从统计上,更多人使用UTF-8而非GBK,故改之;望谅。

重构(!)
重构PaodingMaker使调用make获取Paoding对象,一个配置文件默认只会产生一个Paoding(通过记录文件的绝对路径并记录之实现)
->2.0.0如果多次调用PaodingMaker.make会多次载入词典,虽然这是有意的。2.0.1不必有如此担心了,同一个配置文件的Paoding不会多次创建。

重构(!)
重构PaodingMaker使可以调用多次make方法根据不同配置文件(类路径或普通文件路径)产生不同的Paoding
->这个特性目的是为了支持根据不同的应用场合扩招Paoding的分词针对性(庖丁能够根据配置不同的Knife而具有完全不同的分词效果)
->2.0.0不能同时根据不同的配置文件产生Paoding对象

重构
删除几乎无用的net.paoding.dictionary.support.Util类(其中有一个函数被move到其他位置)

重构
增加Constants接口记录配置文件中配置项的name

增强
当指定的词典安装目录或其子目录下没有任何词典文件时,抛出PaodingAnalysisException,并提示:Not found any dictionary files, have you set the 'paoding.dic.home' right?

增强
可以在配置文件中指定字符集读取字典文件,如果没有配置则使用UTF-8。配置项名为paoding.dic.charset

增强:增加build.xml文件

错误:
当没有noiseWord、noiseCharactor、unit、confucianFamilyName等特定词典时无法使用,应为忽略之而正常使用

错误:
非词典直接目录下的设置词典忽略前缀无效

错误:
将错误的命名paoding-analy[s]is.jar纠正为paoding-analysis.jar
之前jar命名少了中括号标注的字母
---------------------------------------------------
任务表(还未实现的任务)
1、繁简体的支持[优先级:中]
2、动态转载变更的词典[优先级:高]
3、针对高级使用者的文档[优先级:低]


---------------------------------------------------
示例:
请参考:庖丁解牛 2.0.0版本发布 之《"庖丁解牛" 使用指南》


---------------------------------------------------
相关地址

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

zip下载:http://code.google.com/p/paoding/downloads/list

论   坛:http://groups.google.com/group/paoding

JavaEye:http://analysis.group.iteye.com/
分享到:
评论
12 楼 heitu278 2008-05-08  
切切!好样的!加油!
11 楼 qizhan 2008-04-27  
cqf820 写道
qieqie, 您好.
可是我连svn时候, 提示正在取数据, 但马上就没信息了.

无法正常取到数据.
我当的是paoding-analysis-2.0.4-alpha2版本.

回:melin, 我没有用到中文或空格路径





我这边连svn很正常的。
10 楼 cqf820 2008-04-25  
qieqie, 您好.
可是我连svn时候, 提示正在取数据, 但马上就没信息了.

无法正常取到数据.
我当的是paoding-analysis-2.0.4-alpha2版本.

回:melin, 我没有用到中文或空格路径
9 楼 melin 2008-04-25  
paoding 包的路径不能有中文或空格
8 楼 Qieqie 2008-04-25  
谢谢!
这是JDK1.4 API的问题。
很久之前已经有热心人士报告JDK1.4的问题并在当时fix commit到svn上了
7 楼 cqf820 2008-04-24  
您好, 我在build.bat时候出现如下错误:
E:\temp\paoding-analysis-2.0.4-alpha2>"C:\j2sdk1.4.2_08/bin/java" -cp lib/ant/an
t.jar;lib/ant/ant-launcher.jar;lib/ant/ant-trax.jar;lib/ant/ant-junit.jar;lib/ju
nit/junit.jar;lib/clover/clover.jar;"C:\j2sdk1.4.2_08/lib/tools.jar" org.apache.
tools.ant.Main
Buildfile: build.xml

compile:
   [delete] Deleting directory E:\temp\paoding-analysis-2.0.4-alpha2\classes
    [mkdir] Created dir: E:\temp\paoding-analysis-2.0.4-alpha2\classes
    [javac] Compiling 57 source files to E:\temp\paoding-analysis-2.0.4-alpha2\c
lasses
    [javac] E:\temp\paoding-analysis-2.0.4-alpha2\src\net\paoding\analysis\analy
zer\PaodingAnalyzerBean.java:123: cannot resolve symbol
    [javac] symbol  : constructor IllegalArgumentException (java.lang.String,jav
a.lang.ClassNotFoundException)
    [javac] location: class java.lang.IllegalArgumentException
    [javac]                     throw new IllegalArgumentException("not found mo
de class", e);
    [javac]                               ^
    [javac] E:\temp\paoding-analysis-2.0.4-alpha2\src\net\paoding\analysis\analy
zer\PaodingAnalyzerBean.java:160: cannot resolve symbol
    [javac] symbol  : constructor IllegalArgumentException (java.lang.String,jav
a.lang.InstantiationException)
    [javac] location: class java.lang.IllegalArgumentException
    [javac]                             throw new IllegalArgumentException("wron
g mode class", e);
    [javac]                                       ^
    [javac] E:\temp\paoding-analysis-2.0.4-alpha2\src\net\paoding\analysis\analy
zer\PaodingAnalyzerBean.java:162: cannot resolve symbol
    [javac] symbol  : constructor IllegalArgumentException (java.lang.String,jav
a.lang.IllegalAccessException)

---------------------------------------------------------------------------
[我的jdk版本:]
E:\temp\paoding-analysis-2.0.4-alpha2>java -vaersion
Unrecognized option: -vaersion
Could not create the Java virtual machine.

6 楼 Qieqie 2007-08-17  
rainsf 写道


Qieqie,你说Lucene不会随索引容量的大小而变慢,这不是事实吧。我始终觉得索引一大无论你用什么Analyzer都会变慢


去了解“倒排索引”的原理,就能理解搜索为什么能在短时间内在海量数据中保持一致的快速。

简单说,就像hash表一样,不管这个hash表多大,从中找到一个元素的时间都是O(1),几乎和hash表大小无关。
只要Lucene能够建立上索引(建立索引可能有最大容量数据的限制-这点还没仔细了解),搜索的速度根本不用考虑。

你的测试数据肯定是错误的,或者说偶然的(参考上上帖子我说的几点疑问:你的测试是多次平均的吗?你的库是否索引后是否有优化?)
5 楼 rainsf 2007-08-17  
wirterMode和queryMode的PaodingAnaylyzer设计需求是有的,但无奈写和查一般只能用同一Analyzer. 或者可以用queryMode的PaodingAnaylyzer在对查询关键字进行分词再用wirterMode构造Query???待考究。

Qieqie,你说Lucene不会随索引容量的大小而变慢,这不是事实吧。我始终觉得索引一大无论你用什么Analyzer都会变慢的,不过就发现PaodingAnaylyzer会慢得很明显。我在实际中查询采用了分页(一页10条结果)方法,有高亮。而且发现就算了用了Field.TermVector.WITH_POSITIONS_OFFSETS仅高亮也会用去0.01x秒,不用高亮一页结果会更慢,一直苦于提升搜索速度,但不甚理想,不知Qieqie有什么高见呢?
4 楼 Qieqie 2007-08-16  
这里的两个问题
1、查询模式的PaodingAnalyzer的问题

queryMode的PaodingAnalyzer,将内容按最大的词切,即最大的词中包含的小的词将被忽略;wirterMode的PaodingAnalyzer的做法则是,大词、小词都会切出来。
本来这里是希望lucene在建立索引时尽量切词,而查询的时候则只检索最大词的条目(document)。以免把仅含有小词的条目也检索出来。
今天我花一少些时间看QueryParser的规则和试验,发现这样的设计是不必要的。比如一个文章内容为:“安全计算!”,使用writerMode的PaodingAnalyzer,则切为2个词:安全、计算;用户用“计算机”来搜索文章,以前担心,使用writerMode的PaodingAnalyzer会把“安全计算!”这个条目搜索出来(这是不希望的),现在经过试验,是不会的。

所以既然如此,就没有必要在建立索引的使用writerMode,检索的时候使用queryMode。这是问题的一方面,从必要性角度来看的。

从程序的正确性看这个问题,queryMode和writerMode的PaodingAnaylyzer确实是按逾期的方式来切词的,并没有错误。问题出在Lucene的搜索机制的约束上(一言难尽)。既然Lucene约束限制了,反过来说,不管我们做的如何正确,那都是和Lucene机制不匹配的,也就达不到预期。

不过还好,wirterMode和queryMode在实际中可能都有需要。之后,我们保持同时支持这两种切词方式,但会给他改个名(免误导)。2.0.2应该中完成这个改变。

说到此最重要的一句话便是:建立索引和使用索引使用同一种分析器吧。要么都是writerMode的PaodingAnalyzer,要么是queryMode的Analyzer


2、检索速度慢的问题

你提供的数据我个人认为可能性不大。

1)Lucene的检索速度几乎不会随索引库增大而有大的变化。4M也好,400M也好,4G也好检索速度不会有明显差别;
2)Lucene的检索速度和分词器关系几乎为0(如果说有关系的话,那就是不同的分词器分词算法,有的分词垃圾词条目太多因此产生的微弱影响,此影响可以不计)
3)测试的时候,词库是否做了优化? 统计是否是多次平均的?(多次访问索引文件,操作系统会进行文件内存缓存,从而提高访问速度,不必每次都去做磁盘操作)

但不管怎么样,我会留意一下,我会找个时间弄个超大库来测试的,或者委托别人帮忙测试。

----------------------
交待一下Paoding的状态:

词典的动态加载已经完成核心设计、实现和测试了(但代码还没commit到SVN上)。下周能够发布2.0.2。

臭美一下,自我感觉设计的不错。
动态检测文件变更的这一块完全可以在第三方利用(跟庖丁没有任何耦合,只是挂了庖丁的package名而已)。想去找tomcat,resin它们这一块的代码,但是代码太多了,很难找。

也因为要加动态监测并更新字典这个特性,使得之前良好的设计第一次获得明显回报,能够比较轻松地,不用变更原来程序结构的基础上支持此特性。

老知识:
带码根据职责、约束分割,以“接口”为接口;用接口分离并连接模块与模块。
---

我的一个想法: 等2.0版本稳定之后,找找看有什么公司/网站可以正式地试用并最终使用庖丁分词。(一开始总是要求人试用),个人对他很有信心。
3 楼 rainsf 2007-08-16  
发现查询模式的PaodingAnalyzer切分效果并不理想,有时连在一起的几个词,其实还可以切成一个大词,但你没有这样做。
2 楼 rainsf 2007-08-16  
切切.王,你好!
高亮问题已解决,原因是之前使用你的早期版本发现有问题,便拿Highlighter来开刀,谁知没改好就改出问题,后来忘了改回去,所以出问题。真不好意思。

现在又发现两个问题:

1、使用查询模式的PaodingAnalyzer去查询用写模式建立的索引时,基本上无法检索到结果,举例:索引中存在“计算机安全XXX”,如果查询“计算机”是可以查到结果的,但如果查询“计算机安全”就无法检索到结果。类似情况很多,只要你在检索结果中复制一段相对长的字符串作为检索词,很有可能无结果。

2、在索引比较大的情况下(如:400M),搜索速度会变成非常慢,由于查询模式的PaodingAnalyzer很多情况下无法检索结果,我使用写模式的PaodingAnalyzer,以求最多的检索结果,我的在实际中测试有时超过1秒,而且检索词越多,速度变慢得越明显。同样的Size的检索,我使用MMAnalyzer,速度在0.1秒以内

希望得到解决……
1 楼 心无旁骛 2007-08-16  
赞~~~ 继续学习

相关推荐

    ocpp2.0.1最新版本充电桩欧标通讯协议

    ocpp2.0.1最新版本充电桩欧标通讯协议

    findbugs最新版本2.0.1

    最新的版本为2.0.1,该版本在前一版的基础上可能引入了新的特性、性能优化以及对已知问题的修复。 FindBugs的工作原理是通过静态分析技术,不实际运行程序就能检查源代码。它会扫描代码,寻找可能存在的错误模式,...

    esp32-2.0.1.zip

    这个“esp32-2.0.1.zip”压缩包很可能是ESP32的固件或者开发环境的一个版本更新,版本号为2.0.1。在深入探讨之前,先来理解一下ESP32的基本概念。 ESP32内含两个可编程的32位Tensilica LX6微处理器(主CPU),一个...

    wireshark-2.0.1源码

    最新wireshark源码,版本2.0.1,供大家学习参考。

    dwr2.0.1api

    dwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1apidwr2.0.1api

    kafka-clients-2.0.1-API文档-中文版.zip

    包含翻译后的API文档:kafka-clients-2.0.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.kafka:kafka-clients:2.0.1; 标签:apache、kafka、clients、中文文档、jar包、java; 使用方法:解压翻译后...

    validation-api-2.0.1.Final-API文档-中文版.zip

    包含翻译后的API文档:validation-api-2.0.1.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:javax.validation:validation-api:2.0.1.Final; 标签:javax、api、validation、jar包、java、API文档、中文版;...

    ckfinder2.0.1最新破解(已经去除注册提示,支持ASP,.PHP等所有版本,请注意一定要看清楚版本号否则可能不会用)

    ckfinder2.0.1最新破解(已经去除注册提示,支持ASP,.NET,PHP等所有版本) 直接覆盖到ckfinder根目录就可以,请注意,一定是2.0.1版本的 请一定要看清楚版本号,否则可能不能用

    SRPBoard v2.0.1 简体中文版

    "SRPBoard v2.0.1 简体中文版" 这个标题揭示了我们正在处理的是一个特定版本的论坛软件——SRPBoard,它的版本号是2.0.1,并且是针对中文用户优化的,具备简体中文语言支持。这通常意味着该软件在用户体验、界面设计...

    sharetronix中文汉化版2.0.1

    sharetronix是一款免费开源微博客系统,最新版本为中文版2.0.1(基于官方sharetronix1.4.2) sharetronix最新中文版包括以下功能: 一、方便更新 1、对聊天工具的支持:支持用QQ来更新微博 2、对手机的支持:支持...

    Python官方2.0.1版本exe安装包

    这个资源是Python的2.0.1版本的官方安装包,适用于Windows操作系统。在2001年,Python 2.0系列的发布引入了许多重要的改进和新特性,为开发者提供了更强大的功能和更好的编程体验。 Python 2.0.1是该系列的一个维护...

    Sublime Text 2.0.1 简体中文版

    Sublime Text 2.0.1 简体中文版不仅保留了原有的英文版的所有功能,还在界面语言上进行了本地化处理,方便中文用户理解和操作。 以下是一些关于Sublime Text 2.0.1 简体中文版的关键知识点: 1. **多选与多重编辑*...

    uTorrent2.0.1

    至于提供的压缩包文件"uTorrent2.0.1-ByrBTrepack.exe",这通常是一个经过第三方打包的安装程序,可能包含了额外的优化或汉化内容,以方便用户在中文环境下更好地使用uTorrent2.0.1。在安装之前,用户需确保来源的...

    OCPP2.0.1协议

    最新版本的OCPP是2.0.1,它在前一版本的基础上进行了优化和完善。 **1. OCPP 2.0.1的核心功能** - **认证与安全**:OCPP 2.0.1强化了身份验证和数据加密机制,确保只有授权的设备和系统可以进行通信,保护了用户的...

    nacos2.0.1.zip nacos2.0.1 windows和linux都有从外网GitHub上下载原版

    Nacos 2.0.1是该框架的一个稳定版本,提供了对Windows和Linux操作系统的支持,方便开发者在不同环境下进行开发和部署。 1. **服务注册与发现**:Nacos作为服务注册中心,允许微服务应用将自身服务注册到Nacos,同时...

    OCPP-2.0.1-Specification.zip

    OCPP(Open Charge Point Protocol)是电动汽车充电站与充电网络管理系统的通信协议,其2.0.1版本是目前广泛应用的标准之一。这份文档,即"OCPP-2.0.1-Specification.zip",提供了详细的英文版协议规范,虽然对于非...

    读取xlsx,xrld版本为2.0.1版本不能用 1.2.0才可以

    python读取xlsx

    itext.jar包 2.0.1~2.0.6版本

    这个压缩包包含了iText库的2.0.1到2.0.6版本。在这些版本之间,开发者可能找到了性能改进、新功能的添加或者修复了已知的bug。让我们深入了解一下iText库以及这些特定版本中的关键知识点。 首先,iText库的核心功能...

    ionicons-2.0.1.zip

    这个资源文件"ionicons-2.0.1.zip"包含了 Ionicons 的2.0.1版本,它是开发者在构建移动应用时常用的一个图标库,因其跨平台兼容性和易于使用的特性而备受推崇。 Ionicons 2.0.1版本的特点: 1. **跨平台兼容性**...

    adnroid源码版本号

    ### Android源码版本号详解 在Android开发领域中,了解并掌握不同的源代码版本是非常重要的。这不仅能帮助开发者选择适合自己项目需求的版本进行开发,还能有效地管理与版本相关的各种问题。下面将根据提供的标签、...

Global site tag (gtag.js) - Google Analytics