首页新闻招聘找找看知识库
  • 回复:330 浏览:44712 2009-08-14 07:54 来自 eaglet

    盘古分词是一个中英文分词组件。作者eaglet 曾经开发过KTDictSeg 中文分词组件,拥有大量用户。作者基于之前分词组件的开发经验,结合最新的开发技术重新编写了盘古分词组件。

    项目首页:

    http://www.codeplex.com/pangusegment

     

    为了更好的为大家服务,盘古分词的问题解答统一转移到HubbleDotNet 中文社区进行回复,请大家在HubbleDotNet 中文社区提问和交流。

    中文社区网址

    http://hubbledotnet.51aspx.com/

  • woodynet
    2010-03-20 16:07 woodynet
    eaglet,你好。请教个问题,我用盘古分词。想实现这样的效果。

    如何能同时实现以下效果呢?
    一,“美容"分词结果:美容
    二,“美食"分词结果:美食
    三,“北京市"分词结果:北京、北京市

    用户输入“美容"的时候只想查询“美容"相关的信息,不会再看其他“美"的信息,例如美食。
    相反,输入“美食"的时候,只想看“美食"的信息,不想看美容的信息。

    而当客户输入“北京市"的时候,却想看到“北京市",以及“北京"的相关信息。
    以上3种情况,如何能同时实现呢,我配置了几次发现无法同时实现。谢谢呀~
    第101楼 回到顶楼
  • eaglet
    2010-03-20 16:50 eaglet
    这个比较难,如果只是对特定的词处理还行,否则,我们找不到一个处理的普遍规则来。你可以强制一元分词,并且对强制输出的一元分词权重调低,最好还能结合输入词的位置来计算排序得分,这样就可以把相关的词排在前面了。
    第102楼 回到顶楼
  • 斯特瑞
    2010-03-24 23:23 斯特瑞
    你好,很感谢你能做出开源的分词组建。
    我正打算做一个提取文章词组,然后进行同义词超找的功能。
    现在字典是存为文件,然后再读取。
    要是我改为sqlite存储,然后分词的时候去查询。
    不知道这样做的效率是不是会很低?
    第103楼 回到顶楼
  • eaglet
    2010-03-25 06:57 eaglet
    @ 斯特瑞
    字典虽然是存储为文件,但盘古分词启动时会从文件中把字典读出,并构建一个类似
    Aho-Corasick automation 的数据结构。如果你仅仅把存储这部分改掉,对效率没有任何影响。
    第104楼 回到顶楼
  • 代码泪
    2010-03-28 12:45 代码泪
    用lucene.net 2.9.1 版本+盘古分词1.2 为什么查询不到内容呢?

    跟踪到这里好像有问题了:
    q = GetKeyWordsSplitBySpace(q, new PanGuTokenizer());
    QueryParser queryParser = new QueryParser("contents", new PanGuAnalyzer(true));
    Query query = queryParser.Parse(q);
    我搜索的值为“中国"
    q的值为:“中国^243.0"
    query的值为:"contents:^243.0"

    如果用lucene.net自带的,却可以得到 "contents:中 国"。

    不知道为什么。
    第105楼 回到顶楼
  • xia,oYe!
    2010-04-13 16:20 xia,oYe!
    我使用lock对创建索引操作进行锁定,防止文件被破坏。可是今天又看到http://www.cnblogs.com/laizhenyuan/archive/2010/03/06/1679991.html这位博主的最后一段话为:
    Lucene通过创建lockFile文件的方式实现了互斥锁,而.NET中同样也有lock,那么能否用.NET中的锁替代lucene的锁呢?答案是否定的。.NET中的锁主要是针对线程安全而设计的,而Lucene中的锁是为了保护索引文件,不仅仅是多线程中的问题,同一线程中也有互斥问题。如果采用.NET的锁机制,那么在同一个线程中将能够创建两个 IndexWriter,由于IndexWriter在内存中会缓存一部分document,其中一个IndexWriter发生Merge操作,无法获取到另一IndexWriter缓存的document,则会引起异常,可能导致索引文件被破坏。

    我个人认为lock是可以锁住的,对于这位仁兄的“在同一个线程中将能够创建两个 IndexWriter”的说法不知道对不对?希望eaglet解疑一下
    第106楼 回到顶楼
  • eaglet
    2010-04-14 07:29 eaglet
    @xia,oYe!
    如果你只是在一个进程中访问Lucene 那是肯定没有问题的,但如果你用多个进程同时访问,比如索引和查询不是一个进程,那就有问题了,你这个 lock 就发挥不了作用了。这是 Lucene 的特性决定的。既然Lucene 已经做了文件锁,你似乎没有必要再自己做一个锁。
    第107楼 回到顶楼
  • xia,oYe!
    2010-04-14 09:56 xia,oYe!
    @eaglet
    感谢eaglet的回复,如何判断索引和查询是不是一个进程?您的意思是说lucene内部的处理机制 已经考虑到了多线程的建立索引了,所以不用人为的添加锁了?还是说 用它内部的锁就可以了?
    第108楼 回到顶楼
  • eaglet
    2010-04-14 12:47 eaglet
    @xia,oYe!
    是的,lucene 已经考虑到多线程的问题,机制已经保证了。不过lucene 的机制有个问题,就是查询的同时,是不能插入或优化的,这个机制无法改动。Hubble.net 不存在这个问题。
    第109楼 回到顶楼
  • xia,oYe!
    2010-04-15 11:04 xia,oYe!
    @eaglet
    感谢eaglet兄...
    第110楼 回到顶楼
  • LuckyMN
    2010-04-15 11:25 LuckyMN
    @eaglet
    string QueryStr = this.textBox1.Text.Trim();
    // IndexSearcher search = new IndexSearcher(indexDir);
    var q = GetKeyWordsSplitBySpace(QueryStr, new PanGuTokenizer());
    QueryParser queryParser = new QueryParser("contents", new PanGuAnalyzer(true));
    Query query = queryParser.Parse(q);
    q:我^243.0 query:^243.0
    我使用的lucene 版本是2.9.1.2
    当我把版本换成demo中的2.3版本时候 query:我^243.0又正确了
    请问大大该版本是否兼容2.9的版本
    第111楼 回到顶楼
  • eaglet
    2010-04-15 13:25 eaglet
    据我所知 Lucene 的 2.9 版本不支持多元分词,你把多元分词开关去掉就OK了。Lucene 的函数接口老是在变,我也不可能每个版本都去跟,如果接口的问题,你改一下我写的那个lucene 的分词器就可以了。
    Lucene.net 2.9 版本我感觉不是一个稳定的版本,你如果商业应用要小心。
    第112楼 回到顶楼
  • LuckyMN
    2010-04-15 14:25 LuckyMN
    @eaglet
    <MultiDimensionality>false</MultiDimensionality>这样改了好像也不行
    我调试了下,System.IO.MemoryStream theString = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(input.ReadToEnd()));
    return new CharReader(new System.IO.StreamReader(theString));
    在执行了input.ReadToEnd();后 PanGuTokenizer 实例化里面
    _InputText = input.ReadToEnd();得出的值就为空了
    但是((System.IO.StringReader)(input))._s 利用这样取就有值
    不知道怎么回事??
    第113楼 回到顶楼
  • LuckyMN
    2010-04-15 15:06 LuckyMN
    _InputText = this.input.ReadToEnd();这样就可以了
    @eaglet 如过换成这个会引发什么问题吗
    第114楼 回到顶楼
  • xia,oYe!
    2010-04-15 16:45 xia,oYe!
    请问在自己写分词器的时候,如何去掉它内部的过滤词?也就是说我现在想让一个列的内容和我搜索的内容完全一样...自己写这个简单的分词器,需要怎么做啊?
    第115楼 回到顶楼
  • xia,oYe!
    2010-04-15 17:08 xia,oYe!
    没有说太明白,比如我使用WhitespaceAnalyzer来对一个没有分词的列进行搜索,结果列里的“【】"这种东西它是不能parse的,怎么办?
    第116楼 回到顶楼
  • eaglet
    2010-04-15 17:32 eaglet
    @ LuckyMN
    应该可以的,你试一下
    第117楼 回到顶楼
  • eaglet
    2010-04-15 17:40 eaglet
    @xia,oYe!
    自己写程序过滤。Lucene 不支持在 Parse 里面的一些符号,这个我也没有办法,你可以找Lucene 的资料看看。Hubble.net 是不管这些符号的。
    第118楼 回到顶楼
  • LuckyMN
    2010-04-21 17:20 LuckyMN
    @eaglet 大大
    <BestRank>1000</BestRank>
    这里面的值最大能有多少啊


    第119楼 回到顶楼
  • eaglet
    2010-04-22 07:18 eaglet
    好像是 65535
    第120楼 回到顶楼
  • abcshadow
    2010-05-02 21:51 abcshadow
    比如 “综合消息,今天,上海世博会迎来开馆第二天"
    分词结果“综合,消息,今天,上海,世博会,迎来,开馆,第二,天"

    那我搜索时,输入 “世博" 硬是没结果,这个怎么解决呢?
    第121楼 回到顶楼
  • eaglet
    2010-05-03 07:25 eaglet
    @abcshadow
    没有分出世博这个词,当然不会有结果。不要说硬是没结果,软是也不会有结果,呵呵。
    解决办法,把世博加入字典,并采用多元分词,看能否分出世博来,如果不行,打开强制一元分词开关。

    第122楼 回到顶楼
  • abcshadow
    2010-05-03 22:04 abcshadow
    @eaglet
    新闻内容是 “综合消息,今天,上海世博会迎来开馆第二天"
    查询条件 “世博"
    添加世博 字典 ,强制采用一元分词,搜索没结果
    第123楼 回到顶楼
  • eaglet
    2010-05-04 07:22 eaglet
    @ abcshadow
    索引时就要强制一元分词。搜索时也要强制一元分词才行。
    第124楼 回到顶楼
  • Guxx
    2010-05-13 23:11 Guxx
    请问像“2010年05月13日”这种日期怎么建立索引?
    增加字典显然是不太现实。
    第125楼 回到顶楼
  • eaglet
    2010-05-14 07:26 eaglet
    @Guxx
    要看你打算怎么搜,如果希望用户输入
    2010年
    2010年05月
    2010年05月13日
    都能找到结果,那就应该按照比较细的粒度来分词
    如分成
    2010/年/05/月/13/日
    搜索时也按这种粒度来搜
    第126楼 回到顶楼
  • kevin.madc
    2010-05-17 20:26 kevin.madc
    @eaglet
    如何将 NokiaN97的Nokia分词分出来?我已经将Nokia添加到词典里面了.
    第127楼 回到顶楼
  • eaglet
    2010-05-18 07:20 eaglet
    要用自定义规则,我新版本会提供
    第128楼 回到顶楼
  • kevin.madc
    2010-05-18 10:52 kevin.madc
    @eaglet
    新版本预计什么时候可以出来哟?很期待呀。
    第129楼 回到顶楼
  • eaglet
    2010-05-18 11:24 eaglet
    不会太久
    第130楼 回到顶楼
  • xiaomantou88
    2010-05-21 10:18 xiaomantou88
    请问下是要用PanGu.dll分词构建一个PanGuAnalyzer,还是已有生成的PanGuAnalyzer?新手,刚学习,希望指点。
    第131楼 回到顶楼
  • eaglet
    2010-05-21 10:32 eaglet
    用已有的就可以了,已有的PanGuAnalyzer已经调用了PanGu.dll
    第132楼 回到顶楼
  • xiaomantou88
    2010-05-21 17:33 xiaomantou88
    哦,谢谢。那是不是任何版本的lucene.net都能用PanGuAnalyzer?有lucene.net 2.3.1版本的PanGuAnalyzer?么。
    第133楼 回到顶楼
  • xiaomantou88
    2010-05-21 22:18 xiaomantou88
    @eaglet
    谢谢了,找到了。楼主真强.
    第134楼 回到顶楼
  • luowenyan
    2010-05-31 14:15 luowenyan
    盘古这个组件怎么在asp.net中用?
    第135楼 回到顶楼
  • eaglet
    2010-05-31 14:25 eaglet
    请看组件提供的例子。盘古分词的项目首页有下载的
    第136楼 回到顶楼
  • zhujinhu
    2010-06-28 19:47 zhujinhu
    eaglet,你好,我有个词"儿内科"用盘古分词能分成儿和内科,怎么分成儿内科,想这样的词还有好多?谢谢了。
    第137楼 回到顶楼
  • eaglet
    2010-06-28 20:32 eaglet
    @zhujinhu
    把儿内科加入字典就可以了。
    第138楼 回到顶楼
  • zhujinhu
    2010-06-28 22:35 zhujinhu
    @eaglet
    但是像“儿内科"这种词有不少,除了加入字典还有其它方法吗?谢谢。
    第139楼 回到顶楼
  • eaglet
    2010-06-29 07:31 eaglet
    @zhujinhu
    你这些都是专业名词,没有什么规律,不加入字典似乎没有什么更好的办法。如果你是搜索应用,你可以通过搜索算法来弥补分词不准的问题。
    第140楼 回到顶楼
  • zhujinhu
    2010-06-29 17:32 zhujinhu
    请问用hubbledotnnet创建的索引可以通过工具查看内容吗?lucene是可以的。
    第141楼 回到顶楼
  • eaglet
    2010-06-29 18:45 eaglet
    @zhujinhu
    当然可以了,hubbledotnet 提供一个类似SQL SERVER 查询分析器的工具,你可以在这个工具中输入SQL语句来查询内容。
    你看这篇文章的示例
    http://www.cnblogs.com/eaglet/archive/2010/05/13/1734273.html
    第142楼 回到顶楼
  • withtao
    2010-06-30 15:40 withtao
    老大 问个问题
    用盘古分词

    1 图灵 = 图灵^3.0
    2 图灵出版 = 图^9.0 灵^9.0 出^9.0 出版^243.0 版^9.0
    3 图灵屁 = 图灵屁^3.0

    为什么会这样啊 为什么有的里面图灵分开了 有的就分不开呢 不统一啊
    这样没法搜索啊
    第143楼 回到顶楼
  • eaglet
    2010-06-30 18:39 eaglet
    @withtao
    字典里面有没有图灵这个词啊?
    第144楼 回到顶楼
  • withtao
    2010-06-30 20:44 withtao
    应该没有 但是我不想加词了 太麻烦
    我希望 图灵 分词为 图 灵
    而不是不分

    但是不知道怎么办
    第145楼 回到顶楼
  • eaglet
    2010-07-01 07:35 eaglet
    @withtao
    把未登录词识别这个开关关掉就可以了。
    第146楼 回到顶楼
  • zhujinhu
    2010-07-01 13:56 zhujinhu
    contains 和match有什么区别那?
    第147楼 回到顶楼
  • eaglet
    2010-07-01 14:31 eaglet
    @zhujinhu
    contains 是所有单词分量按与的方式匹配,match 按或方式匹配。contains 出来的结果会更精确一些。
    第148楼 回到顶楼
  • blosee
    2010-07-02 20:15 blosee
    我想问下如何配置PanGu.xml里面的参数?各自代表什么意思啊?
    第149楼 回到顶楼
  • eaglet
    2010-07-03 11:05 eaglet
    @blosee
    有一个中文的手册,你自己去主页上下载。
    第150楼 回到顶楼
登录后才能评论,请先登录注册