• lucene学习


    信息检索就是从信息集合中找出与用户需求相关的信息。 被检索的信息除了文本外,还有图像、音频、视频等多媒体信息,这里我们主要来说说文本信息的检索。

    全文检索:把用户的查询请求和全文中的每一词进行比较,不考虑查询请求与文本语义上的匹配, 在信息检索工具中,全文检索是最具通用性和实用性的。(通俗的讲就是匹配关键字的)

    全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引, 指明该词在文章中出现的次数和位置,当用户查询的时候,检索程序就根据事先建立好的索引进行查找,

    并将查找的结果反馈给用户的检索方式。

    数据检索:查询要求和信息系统中的数据都遵循一定的格式,具有一定的结构, 允许对特定的字段检索,其性能与使用有很大的局限性,并且支持语义匹配。

    数据检索查询要求和信息系统中的数据都遵循一定的格式,具有一定的结构,允许对特定的字段检索。 例如,数据均按“时间、人物、地点、事件”的形式存储,查询可以为:地点=“北京”。

    数据检索的性能取决于所使用的标识字段的方法和用户对这种方法的理解,因此具有很大的局限性。

    知识检索:强调的是基于知识的、语义的匹配(最复杂的,它就相当于我们知道了搜索问题的答案, 再直接去搜答案的信息)。

    说明:在Internet上采集信息的软件被称为爬虫或蜘蛛或网络机器人(搜索引擎外围的东西), 爬虫在Internet上访问每一个网页,每访问一个网页就把其中的内容传回本地服务器。

    信息加工的最主要的任务就是为采集到本地的信息编排索引,为查询做好准备。

    分词器的作用:分词器,对文本资源进行切分,将文本按规则切分成一个个进行索引的最小单位(关键词)

    中文分词:中文的分词比较复杂,因为不是一个字就是一个词, 而且一个词在另外一个地方可能不是一个词,如在“帽子和服装”中, “和服”就不是一个词,对于中文分词,通常有三种方式:

    单字分词、二分法分词、词典分词

    单字分词:就是按照中文一个字一个字的分词

    二分法分词:按两个字进行切分

    词典分词:按某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语,

    lucene索引特征

    Lucene的特性分析 
    3.1. Lucene核心部分——索引排序 
    Lucene 的索引排序是使用了倒排序原理。 
    
    该结构及相应的生成算法如下: 
    设有两篇文章1和2 
    文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too. 
    文章2的内容为:He once lived in Shanghai. 
    
    1. 由于lucene是基于关键词索引和查询的,首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施 
    
    a. 我们现在有的是文章内容,即一个字符串,我们先要找出字符串中的所有单词,即分词。英文单词由于用空格分隔,比较好处理。中文单词间是连在一起的需要特殊的分词处理。 
    
    b. 文章中的”in”, “once” “too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义, 这些不代表概念的词可以过滤掉,这个也就是在《Lucene详细分析》中所讲的StopTokens 
    
    c. 用户通常希望查“He”时能把含“he”,“HE”的文章也找出来,所以所有单词需要统一大小写。 
    
    d. 用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来,所以需要把“lives”,“lived”还原成“live” 
    
    e. 文章中的标点符号通常不表示某种概念,也可以过滤掉,在lucene中以上措施由Analyzer类完成,经过上面处理后: 
    
    文章1的所有关键词为:[tom] [live] [guangzhou] [live] [guangzhou] 
    文章2的所有关键词为:[he] [live] [shanghai] 
    
    2. 有了关键词后,我们就可以建立倒排索引了 
    
    上面的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关系倒过来,变成:“关键词”对“拥有该关键词的所有文章号”。文章1,2经过倒排后变成 
    <!--[if !supportLineBreakNewLine]--> 
    
    
    关键词 
    文章号 
    
    guangzhou 
    1 
    
    he 
    2 
    
    i 
    1 
    
    live 
    1,2 
    
    shanghai 
    2 
    
    tom 
    1 
    
    
    
    通常仅知道关键词在哪些文章中出现还不够,我们还需要知道关键词在文章中出现次数和出现的位置,通常有两种位置:a)字符位置,即记录该词是文章中第几个字符(优点是关键词亮显时定位快);b)关键词位置,即记录该词是文章中第几个关键词(优点是节约索引空间、词组(phase)查询快),lucene中记录的就是这种位置。 
    加上“出现频率”和“出现位置”信息后,我们的索引结构变为: 
    
    
    关键词 
    文章号[出现频率] 
    出现位置 
    
    guangzhou 
    1[2] 
    36 
    
    he 
    2[1] 
    1 
    
    i 
    1[1] 
    4 
    
    live 
    1[2],2[1] 
    252 
    
    shanghai 
    2[1] 
    3 
    
    tom 
    1[1] 
    1 
    
    
    
    以live 这行为例我们说明一下该结构:live在文章1中出现了2次,文章2中出现了一次,它的出现位置为“2,5,2”这表示什么呢?我们需要结合文章号和出现频率来分析,文章1中出现了2次,那么“2,5”就表示live在文章1中出现的两个位置,文章2中出现了一次,剩下的“2”就表示live是文章2中第 2个关键字。 
    以上就是lucene索引结构中最核心的部分。我们注意到关键字是按字符顺序排列的(lucene没有使用B树结构),因此lucene可以用二元搜索算法快速定位关键词。 
    实现时 lucene将上面三列分别作为词典文件(Term Dictionary)、频率文件(frequencies)、位置文件 (positions)保存。其中词典文件不仅保存有每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该关键字的频率信息和位置信息。 
    
    Lucene中使用了field的概念,用于表达信息所在位置(如标题中,文章中,url中),在建索引中,该field信息也记录在词典文件中,每个关键词都有一个field信息(因为每个关键字一定属于一个或多个field)。 
    为了减小索引文件的大小,Lucene对索引还使用了压缩技术。首先,对词典文件中的关键词进行了压缩,关键词压缩为<前缀长度,后缀>,例如:当前词为“阿拉伯语”,上一个词为“阿拉伯”,那么“阿拉伯语”压缩为<3,语>。其次大量用到的是对数字的压缩,数字只保存与上一个值的差值(这样可以减小数字的长度,进而减少保存该数字需要的字节数)。例如当前文章号是16389(不压缩要用3个字节保存),上一文章号是16382,压缩后保存7(只用一个字节)。 
    下面我们可以通过对该索引的查询来解释一下为什么要建立索引。 
    假设要查询单词 “live”,lucene先对词典二元查找、找到该词,通过指向频率文件的指针读出所有文章号,然后返回结果。词典通常非常小,因而,整个过程的时间是毫秒级的。 
    而用普通的顺序匹配算法,不建索引,而是对所有文章的内容进行字符串匹配,这个过程将会相当缓慢,当文章数目很大时,时间往往是无法忍受的
    View Code

     http://jichanguse.blog.163.com/blog/#m=0&t=1&c=fks_095064087084081071083083074068086082081066086080085

    lucene学习--分词和高亮显示

    http://blog.csdn.net/lushuaiyin/article/details/7358028

    http://blog.csdn.net/lushuaiyin/article/category/1090838

    lucene学习

    http://www.360doc.com/userhome/3387#

    《Lucene实战(第2版)》 配书代码在IDEA下的编译方法

    http://www.hankcs.com/program/java/lucene-combat-2nd-edition-book-with-code-compiled-under-the-idea.html

    Lucene实战(一)Lucene介绍及HelloWorld运行(附Eclipse工程) 相关文档

    http://blog.csdn.net/mthhk008/article/details/24771587、

    Lucene实战 索引代码详解

    http://wenku.baidu.com/link?url=TBVcLlPhvKahA3O5FjvU04n2T8WG9AKskn1q-Ds7ywrkSlMBWsGXshMD6U3Vfu-ZBb-C3gjYQm9iRGBnkUsafcaMJ-opfcZVMZUe6k40iI7

    lucene基本

    http://mxdxm.iteye.com/blog/989196

    11.问题2:单字共现频率的局部统计的原理
    
    解答:
    
     
    
    高频字串统计的理论基础是N - 元模型。
    
    设W1 W2 ...WN 是长度为N 的字串,则字串W 的似然度为
    p ( W) = p ( w i | w1 w2 ...w i - 1) (1)
    上面公式的意义反映连续个N 字之间的结合程度,如果若干种不同的历史组合W1 W2 ...WN的最后N - 1 个字相同,就把它们都看作一类。在这一假设下,每一个字出现的概率不再与前面的历史有关,只与最近的N - 1 个字相关,字串的先验概率为
    p ( W) = p ( w i - ( n - 1) w i - ( n - 2) ...w i - 1) (2)
    当p ( W) 超过一定的阈值时,说明这N 个字的结合能力较强,我们就可以认为该字串能被看成一个“词”。
    
    正是根据以上所说原理,预先对待分词文本每个单字进行出现次数统计并记录它们在文中出现的位置(存储方式如附件图例所示),预处理后我们遍历单字频次统计 列表出现次数大于2的所有单字在文中出现的位置i,判断位置i+1的单字出现次数是否也大于2,若是则判断位置i+2的单字出现次数是否也大于2,如此类 推直至位置i+n+1的单字出现次数小于2,获得候选词组 w(i,i+1...i+n)并放入候选词汇集合,最后对候选词汇集合进行前缀后缀处理获得合适的高频词汇集合result

    LuceneAPI笔记

    Lucene API使用方法与和性能优化
    本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2014-06/102857.htm

     http://www.linuxidc.com/Linux/2014-06/102857.htm

  • 相关阅读:
    bat windows批处理 移动所有子目录文件
    Oracle常见的QA
    [转载]行动起来
    [转载]微笑
    Excel数据更新至Mysql数据库
    sql server QA
    关于SharpZipLib的压缩与解压问题
    整合Spring.net到asp.net网站开发中初探
    设计模式概要
    Oracle 常用语句档案(二)
  • 原文地址:https://www.cnblogs.com/XDJjy/p/4320857.html
Copyright © 2020-2023  润新知