Lucene&solr 4 实践(3)

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本部分主要是针对FSA FST做前期知识储备和基本概念扫盲。FST是lucene4 solr4 的索引和查询的核心!下面的内容来自多个出去,出去就不一一列举。

文法是一个四元组:G = {VT,VN,S,P}

   其中VT是一个非空有限的符号集合,它的每个元素成为终结符号。VN也是一个非空有限的符号集合,它的每个元素称为非终结符号,并且VT∩VNSVN,称为文法G的开始符号。P是一个非空有限集合,它的元素称为产生式。所谓产生式,其形式为α→βα称为产生式的左部,β称为产生式的右部,符号“→”表示定义为,并且αβ(VTVN)*α≠ε,即αβ是由终结符和非终结符组成的符号串。开始符S必须至少在某一产生式的左部出现一次。另外可以对形式α→βα→γ的产生式缩写为α→β|γ,以方便书写。

   注:一般以大写字母表示非终结符,以小写字母表示终结符。

   著名语言学家Noam Chomsky(乔姆斯基)根据对产生式所施加的限制的不同,把文法分成四种类型,即0型、1型、2型和3型。

   本质上形式化语言----回到数学表达式

有限状态自动机 FSA finite state automata

   注:说明一点,只要是有限状态自动机,则必定符合3型文法,且可用正则表达。

   一个确定的有限状态自动机M(记做DFA)是一个五元组:M=(∑,Q,q0,F,δ)

   其中:

   (1) Q是一个有限状态合集【全部的组合情况】

   (2) ∑是一个字母集,其中的每个元素称为一个输入符号【词典或者基本语素】

   (3) q0Q,称为初始状态

   (4) FQ,称为终结状态集合

   (5) δ是一个从Q×∑(Q的笛卡尔积)Q的单值映射:(单值映射是f(x)=y,在x确定时,得到的y唯一)【笛卡尔积】

   δ(q,a)=q* (q,q*Q, a∑)

   以上式子表示当前状态为q,输入符号a时,自动机将转换到下一个状态q*q*称为q的一个后继。

   Q={q1,q2,...,qn },∑={a1,a2,...,an},则(δ(qi,aj)) n×m是一个nm列矩阵,称为DFA的状态转换矩阵,或称转换表。

   有限状态自动机可以形象地用状态转换图表示,举例如下:

   DFA M=({S,A,B,C,f},{1,0},S,{f },δ)

   其中:δ(S,0)=B, δ(S,1)=A, δ(A,0)=f, δ(A,1)=C, δ(B,0)=C, δ(B,1)=f, δ(C,0)=f , δ(C,1)=f

   则对应的状态转换图如下所示:

image.png


其中圈表示状态结点,双圈表示终结状态结点,而边表示状态的转换,代表映射。边上的符号表示此转换需要输入的符号,代表映射的输入。

   对于上的任何字符串w∑*,若存在一条从初始结点到终态结点的路径,在这条路径上的所有边的符号连接称的符号串恰好是w,则wDFA所识别(或接受、读出)DFA所能识别的符号串的全体记为L(M),称为DFA所识别的语言。


唯一性

对于任意给定的确定有限状态自动机都能找到一个与之计算能力等价的最小确定有限状态自动机,简称最小自动机。该最小自动机中状态的数量等于能识别相同语言的等价类自动机中等价关系的数量,我们可以称最小自动机和等价类自动机实际上是相等的,也就是同构。非正式的说法是:对于最小自动机上的任意状态都可以通过一个同构函数变换成等价类自动机上的一个状态。

能识别一个正则语言的等价类自动机是唯一的,因此能识别该语言的最小自动机也是唯一的。

NFA介绍

   之前介绍的是确定的有限自动机,即一个状态对于待定的输入字符有一个确定的后继状态。而当一个状态对于特定的输入字符有一个以上的后继状态时,我们称该有限自动机为非确定有限自动机(记做NFA),其形式定义也是M=(∑,Q,q0,F,δ),且前面的字符定义均和DFA相同,但是δQ×∑对应所有Q的任意子集。

   NFA中能够识别的路径与DFA中定义也相同。

   对任何一个NFA,都存在一个DFA*使L(M*)=L(M),这时我们称M*M等价。构造与M等价的M*的基本方法是让M*的状态对应于M的状态集合。即如果δ(q,a)={q1,q2,...,qn},则把{q1,q2,...,qn}看作M*的一个状态,即M*中的状态集合Q*的一个元素。


有限状态转换机(FST finite state transducer )

如果把FSA中弧上的字母换成两个字母,一个称为输出字母、一个称为输入字母,这样得到FSA就是一个有限状态转换机(Finite State Transducer)

 

有限状态转换机(FST)

一个有限状态转换机M是一个五元组(Q,Σ, q0, F, δ).

有限个状态组成的状态集: Q

有限个复杂字母组成的字母表: Σ,其中每个复杂字母由一个输出字母和一个输入字母组成,o:i

 一个开始状态q0

终止状态的集合FQ

状态转移函数δ(q,o:i): Qx(Σ:Q

image.png

有限状态转换机建立起两个字符串间的联系。

 

有限状态转换机(FST)

FST有两条输入带子

FST作为识别装置(recognizer)

给定一对字符串,FST拒绝或接受

FST作为生成装置(generator)

 生成一对字符串

FST作为翻译装置(translator)

给定一个字符串,生成另一个字符串

构建形态分析器所需要的资源

1. 词典(lexicon)

词干和词缀

词干和词缀的基本信息(:词干的类别)

2. 形态知识(morphotactics)

语素间的顺序关系

那一类语素可以和那一类语素组合

(例如:名词后面可以加一个复数语素)

3. 正字规则(orthographic rule or spelling rule)

两个语素组合时应进行怎样的变化

(:y改写为ies)


Finite State Automata in Lucene

FSA construction  linear-time minimal,deterministic 线性构造时间开销、最小、确定状态

Linear algorithm form sorted input

Active path states that still can change

States dictionarynodes that will never change

FSA 基于弧而不是状态

image.png

目录
相关文章
|
XML 存储 JSON
Solr学习总结
Solr学习总结
151 0
Solr学习总结
|
XML JSON 搜索推荐
和 Solr 对比|学习笔记
快速学习和 Solr 对比。
104 0
|
XML 存储 JSON
和 Solr 对比 | 学习笔记
快速学习和 Solr 对比
|
存储 SQL 编解码
Solr-lucene 使用案例大全
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。 本文sole lucene的使用案例汇总。
225 0
|
SQL 数据采集 自然语言处理
Lucene就是这么简单(一)
Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎,Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。
163 0
Lucene就是这么简单(一)
|
算法 Java Maven
Lucene&solr 4 实践(4)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本部分主要分析FST,快乐理解lucene fst包的源码细节和来龙去脉。
154 0
|
自然语言处理 算法 架构师
Lucene&solr 4 实践(8)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。Lucene 5 有哪些点对大数据倒排索引和检索有优势 1.索引懒加载lazy加载,意味着按时间段或者其他分割的数据可以按需加载 2.FST词典结构以及基于图的索引、查询,使得内存消耗更低 3.异步合并,使得增量索引合并时的“索引整理”开销或者对查询影响更小 4.commitpoint 视图下reader自动更新,使得大规模数据的虚拟分组、全量切换更加方便。
141 0
|
编解码 缓存 自然语言处理
Lucene&Solr 4 实践(2)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。在第一部分,还不完善基础上,进入第二部分吧。结合源码来认识lucene! 重点是:从需求到方案到实践编码到结果、从原理到实现、从结构到细节、从总体认识到西部深入。
102 0
|
自然语言处理 算法 Apache
Lucene&solr 4 实践(5)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。这部分先通透FST的原理和构造方法,方便理解lucene FST、Builder两个核心对象,从而彻底看清基于图的lucene4索引、查询的发展脉络。至于读懂后有神马用,自个琢磨啊! 看懂估计要死伤不少脑细胞哦!
233 0
|
自然语言处理 Java API
Lucene&solr 4 实践(1)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。Solr&Lucene 4.0 好,很好,很强大。对于从lucene2.0 solr0.9 就关注,一直过来的人来讲, 4.X序列除了的架构、风格、API改变了很多很多,更重要的是业务的优化口子更多了,专业知识要求更高。整个架子的容量、包容性、以及适应信息检索的科研,直接上来demo运行easy、深入会很难。需要整理了解的知识点太多了。
101 0