分词相关技术(转载)

最近在做问答系统,自己在园子里面找了下资料,觉得不错,自己是菜鸟原创不行,废话不多说了,送上资料。

第一个是关于Lucene的分词技术

这里可以下载PDF看,Lucene 原理与代码分析完整版 

 

目录如下:

 

 

目录

目录

第一篇:原理篇

第一章:全文检索的基本原理

一、总论

二、索引里面究竟存些什么

三、如何创建索引

第一步:一些要索引的原文档(Document)

第二步:将原文档传给分次组件(Tokenizer)

第三步:将得到的词元(Token)传给语言处理组件(Linguistic Processor)

第四步:将得到的词(Term)传给索引组件(Indexer)

1. 利用得到的词(Term)创建一个字典。

2. 对字典按字母顺序进行排序。

3. 合并相同的词(Term)成为文档倒排(Posting List)链表。

四、如何对索引进行搜索?

第一步:用户输入查询语句。

第二步:对查询语句进行词法分析,语法分析,及语言处理。

1. 词法分析主要用来识别单词和关键字。

2. 语法分析主要是根据查询语句的语法规则来形成一棵语法树。

3. 语言处理同索引过程中的语言处理几乎相同。

第三步:搜索索引,得到符合语法树的文档。

第四步:根据得到的文档和查询语句的相关性,对结果进行排序。

1. 计算权重(Term weight)的过程。

2. 判断Term之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(VSM)

第二章:Lucene的总体架构

第二篇:代码分析篇

第三章:Lucene的索引文件格式

一、基本概念

二、基本类型

三、基本规则

1. 前缀后缀规则(Prefix+Suffix)

2. 差值规则(Delta)

3. 或然跟随规则(A, B?)

4. 跳跃表规则(Skip list)

四、具体格式

4.1. 正向信息

4.1.1. 段的元数据信息(segments_N)

4.1.2. (Field)的元数据信息(.fnm)

4.1.3. (Field)的数据信息(.fdt.fdx)

4.1.3. 词向量(Term Vector)的数据信息(.tvx.tvd.tvf)

4.2. 反向信息

4.2.1. 词典(tis)及词典索引(tii)信息

4.2.2. 文档号及词频(frq)信息

4.2.3. 词位置(prx)信息

4.3. 其他信息

4.3.1. 标准化因子文件(nrm)

4.3.2. 删除文档文件(del)

五、总体结构

第四章:Lucene索引过程分析

一、索引过程体系结构

二、详细索引过程

1、创建IndexWriter对象

2、创建文档Document对象,并加入域(Field)

3、将文档加入IndexWriter

4、将文档加入DocumentsWriter

4.1、得到当前线程对应的文档集处理对象(DocumentsWriterThreadState)

4.2、用得到的文档集处理对象(DocumentsWriterThreadState)处理文档

4.3、用DocumentsWriter.finishDocument结束本次文档添加

5DocumentsWriterCharBlockPoolByteBlockPoolIntBlockPool的缓存管理

6、关闭IndexWriter对象

6.1、得到要写入的段名

6.2、将缓存的内容写入段

6.3、生成新的段信息对象

6.4、准备删除文档

6.5、生成cfs

6.6、删除文档

第五章:Lucene段合并(merge)过程分析

一、段合并过程总论

1.1、合并策略对段的选择

1.2、反向信息的合并

二、段合并的详细过程

2.1、将缓存写入新的段

2.2、选择合并段,生成合并任务

2.2.1、用合并策略选择合并段

2.2.2、注册段合并任务

2.3、段合并器进行段合并

2.3.1、合并存储域

2.3.2、合并标准化因子

2.3.3、合并词向量

2.3.4、合并词典和倒排表

第六章:Lucene打分公式的数学推导

第七章:Lucene搜索过程解析

一、Lucene搜索过程总论

二、Lucene搜索详细过程

2.1、打开IndexReader指向索引文件夹

2.1.1、找到最新的segment_N文件

2.1.2、通过segment_N文件中保存的各个段的信息打开各个段

2.1.3、得到的IndexReader对象如下

2.2、打开IndexSearcher

2.3QueryParser解析查询语句生成查询对象

2.4、搜索查询对象

2.4.1、创建Weight对象树,计算Term Weight

2.4.2、创建ScorerSumScorer对象树

2.4.3、进行倒排表合并

2.4.4、收集文档结果集合及计算打分

2.4.5Lucene如何在搜索阶段读取索引信息

第八章:Lucene的查询语法,JavaCCQueryParser

一、Lucene的查询语法

二、JavaCC介绍

2.1、第一个实例——正整数相加

2.2、扩展语法分析器

2.3、第二个实例:计算器

三、解析QueryParser.jj

3.1、声明QueryParser

3.2、声明词法分析器

3.3、声明语法分析器

第九章:Lucene的查询对象

1BoostingQuery

2CustomScoreQuery

3MoreLikeThisQuery

4MultiTermQuery

4.1TermRangeQuery

4.2NumericRangeQuery

5SpanQuery

5.1SpanFirstQuery

5.2SpanNearQuery

5.3SpanNotQuery

5.4SpanOrQuery

5.5FieldMaskingSpanQuery

5.6PayloadTermQueryPayloadNearQuery

6FilteredQuery

6.1TermsFilter

6.2BooleanFilter

6.3DuplicateFilter

6.4FieldCacheRangeFilter<T>FieldCacheTermsFilter

6.5MultiTermQueryWrapperFilter<Q>

6.6QueryWrapperFilter

6.7SpanFilter

6.7.1SpanQueryFilter

6.7.2CachingSpanFilter

第十章:Lucene的分词器Analyzer

1、抽象类Analyzer

2TokenStream抽象类

3、几个具体的TokenStream

3.1NumericTokenStream

3.2SingleTokenTokenStream

4Tokenizer也是一种TokenStream

4.1CharTokenizer

4.2ChineseTokenizer

4.3KeywordTokenizer

4.4CJKTokenizer

4.5SentenceTokenizer

5TokenFilter也是一种TokenStream

5.1ChineseFilter

5.2LengthFilter

5.3LowerCaseFilter

5.4NumericPayloadTokenFilter

5.5PorterStemFilter

5.6ReverseStringFilter

5.7SnowballFilter

5.8TeeSinkTokenFilter

6、不同的Analyzer就是组合不同的TokenizerTokenFilter得到最后的TokenStream

6.1ChineseAnalyzer

6.2CJKAnalyzer

6.3PorterStemAnalyzer

6.4SmartChineseAnalyzer

6.5SnowballAnalyzer

7Lucene的标准分词器

7.1StandardTokenizerImpl.jflex

7.2StandardTokenizer

7.3StandardFilter

7.4StandardAnalyzer

8、不同的域使用不同的分词器

8.1PerFieldAnalyzerWrapper

第三篇:问题篇

问题一:为什么能搜的到“中华 AND 共和国”却搜不到“中华共和国”?

问题二:stemminglemmatization的关系

问题三:影响Lucene对文档打分的四种方式

在索引阶段设置Document BoostField Boost,存储在(.nrm)文件中。

在搜索语句中,设置Query Boost.

继承并实现自己的Similarity

继承并实现自己的collector

问题四:Lucene中的TooManyClause异常

问题五:Lucene的事务性

问题六:用Lucene构建实时的索引

1、初始化阶段

2、合并索引阶段

3、重新打开硬盘索引的IndexReader

4、替代IndexReader

5、多个索引


这个转载至:http://www.cnblogs.com/forfuture1978/archive/2010/06/13/1757479.html


第二个关于HubbleDotNet全文检索分词的技术:

目录如下:

HubbleDotNet 简介

HubbleDotNet 和 Lucene.net 性能对比测试

HubbleDotNet 和 Lucene.Net 匹配相关度的比较

HubbleDotNet 软件架构

安装和升级

   安装

   升级

用户权限--功能规划中

   默认帐号**

   添加帐号**

   帐号权限**

   

索引

   Hubble.net 的数据库和数据表

       Hubble.net 数据表的数据类型

       创建、删除数据库

       创建数据表

       为数据库现有表或视图建立全文索引(一) Append Only 模式

       为数据库现有表或视图建立全文索引(二) Updatable 模式

       为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式

       通过程序和现有表或视图同步

       自动和现有表同步

       通过后台任务自动同步或优化索引

       自动与Oracle中的数据同步解析

   内存索引

   倒排索引结构*

   倒排索引优化*

   UnTokenized 索引*

   关系数据库索引*

搜索

   搜索的基本流程*

   HubbleDotNet开源全文搜索数据库项目--查询方法汇总

   对 Tokenized 字段搜索*

       搜索语法*

           指定单词权重

           指定字段权重

           指定文档权重

       Match 方式

       Contains 方式

       Like 方式*

       组合搜索*      

   Tokenized字段和Untokenized 字段组合搜索*      

   Tokenized字段和关系数据库索引字段组合搜索*      

   多表联合搜索*

       同构表的联合搜索* 

       异构表的联合搜索* 

   编写自己的得分算法*

分词器 

      SimpleAnalyzer*

      EnglishAnalyzer*

      PanGuSegment*

      查看指定分词器的分词结果*

      查看某个字段对应分词器的分词结果*

      编写自己的分词器

数据库适配器*

      SQLSERVER 2005

      SQLSERVER 2000

      连接 Oracle 数据库

      编写自己的数据库适配器*

 

性能优化 

      大量并发访问的解决方案 

      各种数据类型占用内存情况*

      优化分词器*

      查询级别缓存*

      查询级别缓存的持久化*

      数据级别缓存*

      不同搜索方式的性能*     

      分布式查询*

      执行跟踪报告*

          如何让查询分析器输出执行跟踪报告*

          如何分析执行跟踪报告*

分布式查询 

          HubbleDotNet 分布式检索算法介绍 (一)

          HubbleDotNet 分布式检索--异步通讯模式的调用方法

测试报告

      HubbleDotNet 海量数据测试报告

远程访问*

 

SQLClient*

      大量并发访问的解决方案 

      异步通讯模式的调用方法

示例*

 

项目应用*

 

注:

* 为还没有完成的文档
** 为功能目前尚未实现

原文链接如下:http://www.cnblogs.com/eaglet/archive/2010/04/07/1706305.html

这个没有文档下载,我过段时间整理下 发个word什么的给大家下载,好坐公交的时候看,呵呵。

转载于:https://www.cnblogs.com/2719-feng/archive/2011/10/10/2205339.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++远航之封装篇——数据的封装

以对象为中心&#xff0c;具体来说&#xff0c;以谁做什么来代表程序的逻辑。所有操作都通过调用自己的函数来完成。 数据成员暴露了&#xff0c;不好的设计&#xff1a; 数据的封装&#xff1a;

游戏大厅 从基础开始(7)--绕回来细说聊天室(中间偏下)之女仆编年史2

老少爷们儿反击战 上一篇中 我们的女仆终于可以做一些像阳光下其他人一样的事情了&#xff0c;少爷们可以和女仆酱一起参加下午茶~ 难得的上流社会啊 这是永远1v1被人私有的女奴 和 喝茶时被人共有的女仆酱最明显的差异~ 明媚的午后阳光下&#xff0c;庭院里白色长餐桌两旁&am…

【转载】App.config/Web.config 中特殊字符的处理

写一个网站&#xff0c;遇到一个问题&#xff0c;发布以后&#xff0c;提示错误&#xff0c;但是即使打开错误提示&#xff08;在web.config中打开&#xff09;&#xff0c;还是只提示错误&#xff0c;没提示什么地方错误&#xff0c;这让我知道了&#xff1a;是webconfig本身的…

Windows 8 C++/CX字符串

在C/CX里面是使用Platform::String类来表示字符串的类型&#xff0c;在windows运行时的接口和方法中&#xff0c;需要使用Platform::String来作为字符串参数的传递。如果需要使用标准C的字符串类型如wstring或者string的时候&#xff0c;可以将Platform::String与标准的C的字符…

C++远航之封装篇——类外定义和::

1、类内定义是把函数的具体实现写在类内部&#xff0c;默认是inline函数。 2、类外定义包含两种情况&#xff1a; &#xff08;1&#xff09;同文件类外定义 &#xff08;2&#xff09;不同文件类外定义

pipeline代码自动生成

如图所示&#xff0c;安装完插件后&#xff0c;Sample Step里就有相应的选项&#xff0c;选择某个选项后&#xff0c;点击Generate Pipeline Script按钮&#xff0c;就可以自动生成代码片段&#xff0c;然后放入pipeline流水线里就可以了 pipeline使用的是groovy脚本&#xff0…

一个简单的基于socket的通讯处理程序

2019独角兽企业重金招聘Python工程师标准>>> 这几天看书看得java网络编程&#xff0c;看到一个不错的&#xff0c;适合新手的&#xff0c;部分代码借鉴书上的&#xff0c;可能有地方还不是很成熟&#xff0c;不过可以借鉴一下&#xff0c;分为客户端和服务端&#x…

OncePerRequestFilter的作用

在Spring中&#xff0c;filter默认继承OncePerRequestFilter&#xff0c; OncePerRequestFilter源代码如下&#xff1a; /** Copyright 2002-2008 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not…

C++远航之封装篇——构造函数

1、为什么需要构造函数&#xff1f; 见博客http://blog.csdn.net/zhhymh/article/details/6236317 2、c中的内存分区 &#xff08;1&#xff09;栈区 int x0&#xff1b;int *pNULL&#xff1b; &#xff08;2&#xff09;堆区 int *p new int[20]; &#xff08;3&#xff0…

Vim基本操作总结

本文是学习Vim时的笔记总结&#xff0c;以便在遗忘时方便查找相关命令&#xff0c;原学习视频链接&#xff1a;https://www.imooc.com/learn/1129 1.1 Vim的4种模式 1.normal模式&#xff1a;使用i/a/o以及I/A/O进入插入模式&#xff0c;其中各快捷键的含义如下&#xff1a; i …

ASP.NET MVC3 中的AJAX

示例演示一个链接&#xff0c;点击后利用Ajax更新特定id的标签中的内容 首先在_Layout.cshtml中加入js <script src"Url.Content("~/Scripts/jquery-1.5.1.min.js")" type"text/javascript"></script> <script src"Url.Cont…

如何判断注册用户是否已经存在(membership验证)

如何判断注册用户是否已经存在&#xff08;membership验证&#xff09; MembershipCreateStatus iStatus; Membership.CreateUser(username, password, email, question, answer, true, out iStatus); ErrirMsgText.Visible true; switch (iStatus) …

安装win_server_2012的方法

1、从微软官网下载评估版。 2、查看你的当前版本。以管理员身份运行cmd&#xff0c;然后输入“DISM /online /Get-CurrentEdition”。如果是评估版&#xff0c;例如Standard&#xff0c;把“ServerStandardEval”中的Eval这四个字母去掉&#xff0c;就是你的当前版本。下图表明…

Delphi控件的“拿来主义”

"一个优秀的Delphi程序员&#xff0c;不仅要会写控件&#xff0c;还要会使用控件。" 我还是一个半瓢水的程序员&#xff0c;因此目前为止我所能努力达到的境界是: 一个半瓢水的程序员&#xff0c;管他会不会写控件&#xff0c;只要能拿来改就可以了。 使用过Delphi的…

WRF参数配置(PartV)

&bc_control spec_bdy_width 此参数指定用于边界过渡的格点总行数&#xff0c;默认值为5。此参数只用于真实大气方案。参数的大小至少为spec_zone 和 relax_zone的和。 spec_zone 指定区域(specified zone)的格点数&#xff0c;默认值为 1。指定边条件时起作用。 relax…

DHCP中继处理办法

这两天一直在客户这边测试DHCP&#xff0c;由于客户的网络是现成的server 2008 是后来加上去的&#xff0c;所以没有多的IP地址用于测试&#xff0c;只好拿客户的楼层网段来测试&#xff0c;由于需要跨VLAN实行DHCP地址分配&#xff0c;所有需要做DHCP中继。废话不多说&#xf…

富士 FinePix F401

功能特点 F401尽管外型娇小&#xff0c;但功能并不弱&#xff0c;机身内搭载Super CCD III&#xff0c;实际CCD画素210万&#xff0c;纪录画素可达400万&#xff08;23041728像素&#xff09;&#xff0c;由于Super CCD III大幅改善噪声&#xff0c;有效ISO感光度提升到1600度&…

C++远航之封装篇——默认构造函数、初始化列表、拷贝构造函数

1、默认构造函数 没有参数&#xff1b;若有参数&#xff0c;则一定全部都有默认的参数值。 2、初始化列表 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;特性 建议用初始化列表来初始化数据成员。初始化列表先于构造函数执行&#xff1b;初始化列表只能用于构造函…

性能测试流程-各阶段的工作

1 性能测试流程1.1 性能测试计划阶段测试计划阶段主要工作如下&#xff1a;1、明确测试对象2、定义测试目标3、定义测试通过的标准4、规划测试进度5、规划测试参与人员&#xff08;需求、开发、测试、运维和配置&#xff09;6、申请测试资源7、风险控制1.2 性…

恢复IE8自带的源代码查看器

各种知名不知名的文本编辑软件安完了之后&#xff0c;IE8的默认源代码编辑器也被改了很多次其实IE8默认已经不使用记事本了&#xff0c;带有语法高亮和行号功能的查看器很好用&#xff0c;堪比FF的查看器了。而且占用资源很少&#xff0c;跑起来很快&#xff0c;所以&#xff0…