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

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

    项目首页:

    http://www.codeplex.com/pangusegment

     

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

    中文社区网址

    http://hubbledotnet.51aspx.com/

  • blosee
    2010-07-05 21:39 blosee
    我用盘古分词搜索一个关健词得到的结果数很多,后面有很多页都不是我想要的结果,如何不让它显示后面相关度不高的结果呢?
    第151楼 回到顶楼
  • eaglet
    2010-07-06 07:34 eaglet
    @blosee
    1 盘古分词没有搜索功能,我想你是用的lucene.net
    2 相关度不高的问题是 lucene.net 的问题,它不能按与方式来搜索(这是目前几个主流搜索引擎google baidu 默认的搜索方式)(Lucene 可以用 BooleanQuery 但那样就忽略了单词之间的位置关系)
    3 你可以尝试用 hubbledotnet ,hubbledotnet 提供精确查询方式 Contains 可以按与方式查询,并且相关度很高。
    第152楼 回到顶楼
  • blosee
    2010-07-25 11:13 blosee
    我还想问个菜鸟问题:我想把全部索引载入内存,提高搜索速度。

    我看了那个asp.net的例子
    好象没载入内存吧

    我就想问如何改才载入内存?
    第153楼 回到顶楼
  • eaglet
    2010-07-25 17:54 eaglet
    @blosee
    用 RamDictionary 就可以了,不过内存模式并不比非内存模式快多少。
    第154楼 回到顶楼
  • 郭大少
    2010-08-02 10:19 郭大少

    我使用盘古分词弄了个全站搜索.
    但是因为每天都有更新的内容.
    请问增量更新索引怎么弄?
    第155楼 回到顶楼
  • eaglet
    2010-08-02 10:31 eaglet
    @郭大少
    盘古分词只负责分词,不负责索引,你如果是用 lucene ,请参考lucene 的相关资料。
    第156楼 回到顶楼
  • csdn_li
    2010-08-03 19:14 csdn_li
    lucene.net 2.4 和盘古2.2.1的会报错
    第157楼 回到顶楼
  • csdn_li
    2010-08-03 19:14 csdn_li
    老大咋解决啊?
    第158楼 回到顶楼
  • 寻自己
    2010-08-03 21:49 寻自己
    有源代码没呢?
    邮箱 : 281012243@qq.com
    第159楼 回到顶楼
  • eaglet
    2010-08-04 07:36 eaglet
    第160楼 回到顶楼
  • wuxiaoqqqq
    2010-08-04 11:09 wuxiaoqqqq
    你好,如果我对于某些特定的字段只想用我自己的规则去分词
    比如
    我有个field里面的内容是
    蓝黑|粉色|岩石绿|兰城|深蓝色花
    我扩展一个自定义分词的接口,但我看代码,那个接口好像是在处理了其他的分词后才进去处理的,能不能直接指定就用我的扩展接口?
    还是说这种问题是lucene.net的局限?
    第161楼 回到顶楼
  • eaglet
    2010-08-04 11:13 eaglet
    你不打算用盘古的分词,你自己写一个分词器就可以。lucene不支持不同字段用不同方式分词,这个我也没办法。HubbleDotNet 支持不同字段采用不同分词器,解决你这个问题是没问题的。
    第162楼 回到顶楼
  • doado
    2010-08-05 10:57 doado
    近两天才知道盘古分词的,今天用Lucene.Net.dll 2.9 、PanGu4LuceneV2.1.1.0版本的,不知道是我自己电脑的问题还是程序的问题。是这样的搜索时点击按钮可以正常搜索,但是当我输入关键字后回车出现了问题“输入字符串的格式不正确。”
    异常详细信息: System.FormatException: 输入字符串的格式不正确。
    堆栈跟踪:
    [FormatException: 输入字符串的格式不正确。]
    System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +2753219
    System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +102
    Eaglet.Workroom.AspDotNetPager.AspNetPager.RaisePostBackEvent(String eventArgument) in G:\opensource\KTDictSeg\V1.4.01\WebDemo\UserControl\AspDotNetPager\AspNetPager.cs:85
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4919

    --------------------------------------------------------------------------------
    版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42


    另外,请问eaglet老师有没有从数据库中读取数据的例子或教程?
    第163楼 回到顶楼
  • wuxiaoqqqq
    2010-08-05 11:47 wuxiaoqqqq
    lucenet.net可以支持不同字段用不同分词器
    PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer());
    analyzer.AddAnalyzer("animal", new WhitespaceAnalyzer());
    analyzer.AddAnalyzer("content", new PanGuAnalyzer());
    昨天刚找到的一个方法,还没仔细测试,这个可以解决我的问题了。

    HubbleDotNet是否支持集群?
    我主数据库写索引,然后复制到其他只读库?
    第164楼 回到顶楼
  • eaglet
    2010-08-05 12:00 eaglet
    @wuxiaoqqqq
    我正在搞这个功能,这两天就会发布出来。
    第165楼 回到顶楼
  • wuxiaoqqqq
    2010-08-09 13:45 wuxiaoqqqq
    @eaglet
    你好,请问下盘古分词2.0中新出的同义词功能要怎么使用?
    同义词库是怎么维护的?
    第166楼 回到顶楼
  • eaglet
    2010-08-09 13:50 eaglet
    你下载最新版本,在字典目录下有一个默认的同义词字典,你可以修改那个字典来维护,那个字典是文本格式的。另外要在配置文件中将同义词开关打开,具体看文档。
    第167楼 回到顶楼
  • eaglet
    2010-08-09 13:52 eaglet
    @wuxiaoqqqq
    另外 hubbledotnet 的复制索引功能已经搞好了。叫 attach 和 detach 功能。
    第168楼 回到顶楼
  • wuxiaoqqqq
    2010-08-09 14:05 wuxiaoqqqq
    @eaglet
    谢谢,我现在这个搜索还是基于lucene在做,我的领导觉得Lucene更成熟,hubbledotnet我也一直在关注的,有机会我一定会到真正的项目中应用。
    第169楼 回到顶楼
  • 郭大少
    2010-08-09 14:46 郭大少
    请教一下关于盘古分词的配置问题.
    比如 我建立索引之后,查询:魔兽世界这个词.
    查询结果会把 包括魔,兽,魔兽,世界还有魔兽世界,的内容都索引出来.
    而且是由少到多的顺序排列的.魔兽世界的都在最后~!
    但从实际应用的角度我只想要:魔兽世界,的内容或者是魔兽世界,的内容在最前显示.
    盘古的配置怎么修改一下哎哦?
    第170楼 回到顶楼
  • eaglet
    2010-08-09 18:08 eaglet
    @wuxiaoqqqq
    hubbledotnet现在已经有将近500个用户在使用,其中也包括一些比较大的公司。lucene 在索引超过40G以后会非常非常慢,几乎索引不下去。有好几个用户都是在lucene搞不下去后转而使用 hubbledotnet的,hubbledotnet 在索引到100G以上后依然非常稳定。谢谢你的关注,希望你能早日在项目中使用。随着用户数量的增加,相信hubbledotnet 会越来越稳定的。
    第171楼 回到顶楼
  • eaglet
    2010-08-09 18:18 eaglet
    @郭大少
    你可考虑修改权重,将各个级别的权重差距拉大。不过lucene的权重好像最多只能设置为256,这个差距可能也拉不了太大。排序的问题单纯依靠分词是不能彻底解决的,你这个问题l是ucene 算法的问题,lucene的算法只考虑单词分量出现的频率却不考虑单词分量之间的关系,你如果没有能力修改它的得分算法,我还是建议你用 hubbledotnet 试试,hubbledotnet 的算法不但考虑频率而且考虑单词分量的位置,比lucene的算法要好很多。而且提供 精确查询方法(lucene没有这个功能),可以只搜出完全匹配的记录。很多人没有用hubbledotnet 前都持怀疑态度,毕竟lucene太有名了,但很多人用了hubbledotnet 后都觉得其比lucene要好。如果你想用hubbledotnet 测试,可以联系我,我可以给你一些帮助。





    第172楼 回到顶楼
  • 郭大少
    2010-08-09 20:43 郭大少
    谢谢组长的回复。
    我现在是在原来的搜索基础上修改到盘古搜索的。
    刚做差不多。
    现在就改用hubbeldotnet恐怕不行。但是我会研究一下
    下一版本就说不定改好了。
    第173楼 回到顶楼
  • eaglet
    2010-08-10 08:08 eaglet
    @郭大少
    盘古分词没有搜索功能,应该是lucene.net的搜索。看你自己的实际情况吧。你可以研究一下hubbledotnet,如果你单纯比较一下排序效果,根本用不着写任何代码,按照我的文档操作,1个小时就可以搞定。
    第174楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 09:22 蓝丶 sky
    老大,现在我用lucene.net搜索,分词是用lucene.net自带的,高亮也是自带的,因为是第一次做还不懂。数据是61000多条,索引是431M,用时2.3秒左右,感觉好长。请问下我这个是分词的问题才慢的吗?现在想换成盘古分词,要去哪里看相关教程呢?去了你的网站,没看到有关教程额。请告诉我下可以吗!麻烦了!谢谢了哈!
    第175楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 09:25 蓝丶 sky
    我下载了你的组件了,是把我本来的分词替换成你的,这样就可以了吗?
    第176楼 回到顶楼
  • eaglet
    2010-08-11 10:19 eaglet
    @蓝丶 sky
    不一定是分词的问题。高亮时要分词的,你的记录数据量太大,如果一条记录分词用时100ms,10条记录就是1秒,我让你测试高亮操作用时就是这个用意。
    第177楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 10:30 蓝丶 sky
    @eaglet
    谢谢!现在正在重新建立索引,把内容里面的那些html标签过滤掉!重新建索引完在来请教大侠谢谢您!真是太热心了帮忙了!
    第178楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 10:41 蓝丶 sky
    老大,我建立索引完了,现在是352M,不过就停在那里不继续动了额!
    我用Stopwatch测试了下,高亮用时(00:00:00.0012843)
    关于:童装 共搜索到21763 个结果(用时00:00:02.5781250)
    速度整不上去。这样是怎么回事呢!
    第179楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 10:52 蓝丶 sky
    循环从第几条取到第几条,然后在用repeater绑定用时00:00:00.0255228
    第180楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 10:54 蓝丶 sky
    发现这里用时最多 用了2.5秒
    Stopwatch st = new Stopwatch();
    st.Start();
    analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
    IndexSearcher search = new IndexSearcher(Server.MapPath("index"));
    QueryParser qp = new MultiFieldQueryParser(new string[] { "title", "content" }, analyzer);
    Query query = qp.Parse(keywords);
    Sort sort = new Sort(new SortField("ntime", SortField.STRING, true));
    Hits hit = search.Search(query, sort);
    st.Stop();
    hitime = st.Elapsed.ToString();
    第181楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 11:00 蓝丶 sky
    老大老大,找到问题了,原来是那个Sort的问题
    我没有排序后时间变好少了
    关于:童装 共搜索到21763 个结果(用时00:00:00.2031250
    怎么能排序又能少时间呢?
    第182楼 回到顶楼
  • eaglet
    2010-08-11 11:44 eaglet
    lucene 就这个性能了,你如果不按得分排序,而是按其他字段排序就会比较慢。
    另外 ntime 是不是 untokenized 的?
    第183楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 12:02 蓝丶 sky
    恩 是的
    doc.Add(new Field("ntime", (dr.GetDateTime(4)).ToString("yyyy-MM-dd HH:mm:ss"), Field.Store.YES, Field.Index.UN_TOKENIZED));
    一按时间排序就会慢,唉!不知道该怎么搞!只能按得分排序吗?
    第184楼 回到顶楼
  • eaglet
    2010-08-11 12:09 eaglet
    可以按时间排序,但会很慢,这是lucene的缺陷。你可以用 hubbledotnet ,按时间排序要快很多。
    参考这篇文章做测试,不需要写代码
    http://www.cnblogs.com/eaglet/archive/2010/05/13/1734273.html
    第185楼 回到顶楼
  • 蓝丶 sky
    2010-08-11 12:53 蓝丶 sky
    @eaglet
    谢谢老大!麻烦你一上午了!谢谢你的帮忙!
    第186楼 回到顶楼
  • 蓝丶 sky
    2010-08-12 09:15 蓝丶 sky
    老大!盘古分词在2.0中可以用吗?想找个lucene.net结合盘古分词的例子,可是一直没找到!
    第187楼 回到顶楼
  • eaglet
    2010-08-12 09:22 eaglet
    @蓝丶 sky
    盘古分词自带有 lucene 的例子,你到下面链接中下载 PanGu4LuceneV2.1.1.0.zip

    http://pangusegment.codeplex.com/releases
    第188楼 回到顶楼
  • 蓝丶 sky
    2010-08-12 09:33 蓝丶 sky
    老大,下载了例子有点看不懂
    本来我的分词是这样的
    Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
    是不是只要引用你的dll,然后把这个分词改成你的那个就行了呢?
    第189楼 回到顶楼
  • eaglet
    2010-08-12 09:59 eaglet
    @蓝丶 sky
    基本上是这样吧,例子中索引和搜索的代码全部在 App_Code/Index.cs 里面,代码并不复杂,目前有1000多个单位在用盘古分词作为搜索的分词组件,你是第一个说看不懂代码的,你再仔细看看代码吧,有问题可以问我。另外你也可以加入搜索引擎小组的QQ群(14419546),群里面的人基本上都会使用盘古分词,他们会教你怎么搞。
    第190楼 回到顶楼
  • 蓝丶 sky
    2010-08-12 10:42 蓝丶 sky
    我承认我太懒了!一看到代码多心就下不去看!现在看了后发觉其实不复杂。
    老大,这里有两个疑问
    highlighter.FragmentSize = 50;这个是什么意思?
    还有Dictionaries这个目录下的txt是是词库,建立索引是从词库搜索出相应的匹配吗?
    还有这个Dict.dct是干什么用的呢?
    老大麻烦你了
    第191楼 回到顶楼
  • 蓝丶 sky
    2010-08-12 10:46 蓝丶 sky
    PanGu.HighLight.Highlighter highlighter = new PanGu.HighLight.Highlighter(simpleHTMLFormatter, new Segment());
    这个new Segment()是什么意思呢?
    第192楼 回到顶楼
  • eaglet
    2010-08-12 12:17 eaglet
    @蓝丶 sky
    highlighter.FragmentSize = 50; 是指高亮的每个小段为50字符。Dict.dct 是词库文件,分词程序是从这个词库中提取单词进行匹配的。你百度中去搜盘古分词,有很多相关的资料,你先要搞清楚这个分词能干些什么。
    new Segment 是给高亮组件传入分词器,因为高亮时要分词,这些接口和lucene 那个是相似的。
    第193楼 回到顶楼
  • 杲頔
    2010-08-18 15:32 杲頔
    @eaglet
    你好
    由于我刚刚接触分词与搜索,所以对这方面了解得比较少。
    用你的盘古分词分析:“一次性交100元"得到的是“一次(0,5)/性交(2,5)/100(4,1)/元(7,5)/" 而我希望得到“一次性/交/100元" 我需要对字典或什么地方做修改呢?
    第194楼 回到顶楼
  • eaglet
    2010-08-19 08:32 eaglet
    @杲頔
    这个问题确实比较麻烦,因为两种分法从语法上说都是对的。
    我今天发布了盘古分词 V2.3.0.0 版本,可以解决这个问题,方法是将“性交”这个词的词频降低,将“一次性” 和 “交” 这个词的词频加大,然后将词频优先选项选中即可。一定要升级到 2.3.0.0 版本以后才行。
    第195楼 回到顶楼
  • 杲頔
    2010-08-19 08:43 杲頔
    @eaglet
    thank you for your reply,i will test it
    第196楼 回到顶楼
  • 杲頔
    2010-08-19 08:56 杲頔
    @eaglet
    搞定了,谢谢老大。
    第197楼 回到顶楼
  • blosee
    2010-09-03 18:57 blosee
    我想问下eaglet老师,我在用lucene.net搜索功能的时候
    搜索时我不想让它返回太多记录了
    因为后面好多结果数根本就不是我想要的结果
    lucene.net默认排序是按得分的情况由大到小输出结果
    我的意思是让它返回指定得分高于xx分的记录才被输出
    得分低于XX分的记录就不用输出了,这种的需求咱个办啊?
    第198楼 回到顶楼
  • eaglet
    2010-09-03 20:30 eaglet
    @blosee
    lucene 本来就不会把所有的记录都输出,你只要取你要取的前n条记录就可以了。
    第199楼 回到顶楼
  • howareu
    2010-09-07 19:59 howareu
    我也想问下eaglet老师两个问题。

    1。 看到dict.txt里,有像“熬|0x1000|0”的, 不知道中间的0x1000代表什么。

    2。批量加词是要是加的词在字典里已有,会如何处理?


    谢谢老师。
    第200楼 回到顶楼
登录后才能评论,请先登录注册