time 
设为首页】【收藏本站

香港六合彩曾道人白小姐: 白小姐彩图

当前位置: 白小姐彩图 > 程序设计 > .net > .net入门 > Lucene.Net:使用eaglet的盘古分词进行分词和搜索

Lucene.Net:使用eaglet的盘古分词进行分词和搜索

时间:2011-02-14 23:53 点击:3267次 字体:[ ]




白小姐彩图 www.5vq5o.cn 本文主要简单介绍如何使用eaglet的盘古分词在lucene.net中进行创建索引和简单搜索。盘古分词是eaglet大大的杰作,如果您还没有尝试使用过,希望本文的介绍会对您有所帮助。

1、盘古分词参考资料汇总

//www.cnblogs.com/eaglet/tag/%e5%88%86%e8%af%8d/

//pangusegment.codeplex.com/

//hubbledotnet.51aspx.com/

//home.cnblogs.com/group/topic/31349-6.html

牛人的贡献不仅仅是无私提供几个工具,几个类库,几个开源项目,还有他们的博学,对知识理解的深度,以及谦虚低调的态度。大牛的人格魅力往往都是很吸引人的。向eaglet致敬。

 

2、使用盘古分词器(PanGuAnalyzer)准备工作

(1)、PanGu.xml文件

这个文件主要保存盘古分词的常用配置,其中DictionaryPath 指明字典所在目录,可以为相对路径也可以为绝对路径;MatchOptions 对应分词选项;Parameters 对于分词参数。本文示例demo中,我选择的是默认配置。同时在该xml文件的属性上,把它的生成操作设置成“嵌入的资源”。

(2)、如你所知,分词词库的维护也是盘古分词的一大重要工作。本文QueryApp控制台应用程序的bin目录下的Dictionaries是从codeplex上下载下来的(默认放在应用程序bin目录下)。这和(1)中的PanGu.xml的DictionaryPath 配置节点有关。

(3)、应用程序中(本文即QueryApp控制台应用程序)必须同时引用Lucene.Net.dll,PanGu.dll和PanGu.Lucene.Analyzer.dll。

 

3、创建索引

Lucene.Net的IndexWriter在实例化的时候,需要一个Analyzer实例,使用盘古分词进行索引创建很简单,只要将PanGuAnalyzer实例传入IndexWriter构造函数,按步就班构造索引即可:

        public static void PrepareIndex(bool isPangu)
        {
            Analyzer analyzer = null;
            if (isPangu)
            {
                analyzer = new PanGuAnalyzer();//盘古Analyzer
            }
            else
            {
                analyzer = new StandardAnalyzer(Version.LUCENE_29);
            }
            DirectoryInfo dirInfo = Directory.CreateDirectory(Config.INDEX_STORE_PATH);
            LuceneIO.Directory directory = LuceneIO.FSDirectory.Open(dirInfo);
            IndexWriter writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
            CreateIndex(writer, "jeffreyzhao", "博客园有一个老赵,人格魅力巨大,洋名就叫jeffreyzhao。据我所知,他还是一个胖子,一个钢琴业余爱好者。");
            CreateIndex(writer, "lucene测试", "这是一个测试,关于lucene.net的 关注老赵");
            CreateIndex(writer, "博客园里有牛人", "Hello World. 我认识的一个高手,他拥有广博的知识,有极客的态度,还经常到园子里来看看");
            CreateIndex(writer, "奥巴马", "美国现任总统是奥巴马?确定不是奥巴牛和奥巴羊 不知道问老赵");
            CreateIndex(writer, "奥林匹克", "奥林匹克运动会将来到南美美丽热情的国度巴西,也就是亚马逊河流域的一个地方");
            CreateIndex(writer, "写给自己", "博客园的jeffwong,新的开始,继续努力了");
            writer.Optimize();
            writer.Close();
        }

 

4、简单搜索

搜索同样也比较容易上手,只要将QueryParser中的Analyzer参数使用PanGuAnalyzer实例就可以了:

        public static void PanguQueryTest(Analyzer analyzer, string field, string keyword)
        {
            QueryParser parser = new QueryParser(Version.LUCENE_29, field, analyzer);
            string panguQueryword = GetKeyWordsSplitBySpace(keyword, new PanGuTokenizer());//对关键字进行分词处理
            Query query = parser.Parse(panguQueryword);
            ShowQueryExpression(analyzer, query, keyword);
            SearchToShow(query);
            Console.WriteLine();
        }

其中对关键字进行盘古分词处理的函数GetKeyWordsSplitBySpace直接来源于eaglet提供的示例代码:

        public static string GetKeyWordsSplitBySpace(string keywords, PanGuTokenizer ktTokenizer)
        {
            StringBuilder result = new StringBuilder();
            ICollection<WordInfo> words = ktTokenizer.SegmentToWordInfos(keywords);
            foreach (WordInfo word in words)
            {
                if (word == null)
                {
                    continue;
                }
                result.AppendFormat("{0}^{1}.0 ", word.Word, (int)Math.Pow(3, word.Rank));
            }
            return result.ToString().Trim();
        }

PanGuTokenizer的SegmentToWordInfos这个方法,我正在查看源码实现,希望可以理解的更透彻一点。

最后,本文面向的对象是初学者,如果您有好的使用经验和建议敬请不吝赐教。

转自:



本文地址 : //www.5vq5o.cn/plus/view-195752-1.html
标签: 索引 Lucene.net
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:

  • 没能过准丈母娘这关 问题竟出在发际线 2019-05-21
  • 溜溜溜!10位外国驻华大使中文拜年视频合集来啦 2019-05-21
  • “生态+康养” 冰雪康养小镇项目落户沽源 2019-05-14
  • 您要明白的是,如果按照上海市的人口基数2500万计算的话,就算有100万的服务人员,平均每人也要保障25个人的预约服务.人要理性 2019-04-06
  • 回复@海之宁:你的卡点就在于不知道分配既涉及消费资料有涉及生产资料。 2019-04-06
  • 赵雅芝联合“我·爱我 女性健康工程”为乳腺健康共发声 2019-04-03
  • 合肥市庐阳中学启动“教师成长工程” 2019-04-01
  • 中年不发福!51岁景岗山紧身衣秀健硕身材 2019-04-01
  • 炒房炒房,炒了北京炒西安,炒了天堂炒人间,何时休?限价现价叫人害怕。 2019-03-27
  • “5·15”全国公安机关打击和防范经济犯罪宣传日 2019-03-27
  • 穿拖鞋开车酿成追尾事故 2019-03-20
  • 重庆市永川区:“1+8+X”模式探索基层人民调解新路子 2019-03-20
  • 巢湖市第三届少儿器乐比赛圆满落幕 2019-02-15
  • Valentino 2017秋冬高级定制大秀 2018-09-08
  • 中国经济充当了世界经济发展的火车头。但是,作为世界经济火车头的中国,在世界主要经济体股市都走牛的情况下,为何熊途漫漫?这种不正常的现象,背后是我们资本市场的投融 2018-07-14
  • 932| 76| 528| 114| 446| 55| 50| 659| 165| 828|