使用方法和配置 =============== SF1的分词库(ilplib)支持对包括中,日,韩,英文在内的多语言进行分词。 对于中文分词来说,提供了基于词表和统计模型(ME)的方法, 基于词表的方法有正向最大匹配和最小匹配等, 通常基于统计模型的分词方法准确率更高,而基于词表的方法性能更快。 SF1中出于性能的考虑,主要使用基于词表的方法,另一方面,检索结果的正确率和查全率,也与检索和排序的策略相关。 1. 使用方法 ------------- SF1对分词的使用主要包括索引和查询两个方面: 一方面,对文档进行索引时,需要先将文档切分成索引词; 另一方面,对于用户的查询,也需要先切分成词才能在索引中进行查询。 原则上,索引和查询所使用的分词方法应该保持一致。 分词方法的选择,主要是通过在配置文件中进行相关的设置,详细的配置请参考2.2节。 下面结合配置文件,以中文分词为主,介绍分词的基本使用方法。 2. 配置 --------- 2.1 基本分词方法 ~~~~~~~~~~~~~~~~~ 基本分词方法的配置如下: :: id 是唯一标识分词方法的名称, 上面的配置定义了一个多语言的分词方法 "la_sia", 它内部使用的中文分词方法为"inner_la_cnall_sia"。 其中,需要注意的属性是“Method/settings/option”: - option="R+S-V-T3",代表分词设置为正向最小匹配,不包含unigram分词结果,但可能含overlap的情形(例如,“中国人”的分词结果为,“中”,"中国",“国”,“国人”,“人”)。是通常情况下的分词配置。 - option="R+S-V-T4", 代表分词设置为正向最小匹配,且包含unigram分词结果,即,不管有没有overlap, unigram结果都会输出。这种分词输出的词比较多,对性能有一定影响,而且需要确保索引中含有unigram作为索引词,目前少用。 - option="R+S-V-T5",代表分词设置为正向最小匹配,不包含unigram分词结果,也不含overlap情形。在用户词典中的词已经比较丰富全面的情况下,可使用此配置作为搜索(查询)的分词方法。 :: 在unigram分词方法中,advoption="part",代表数字和字母将作为整体,而不按字符进行切分;如果设置为advoption="all",则代表数字和字母也会按字符进行切分。 **索引的分词配置** 在Collection的配置文件中,将属性 "IndexBundle/Schema/Property/Indexing/analyzer" 设置为相应的分词id,即可指定索引时按指定的分词方法进行切分。 **查询的分词配置** 解析用户查询时所用的分词方法,通常与对应Property索引用的分词方法一致。 原则上,应使索引分词方法的结果都包含于查询分词方法的结果,以保证查全率。当前,查询分词无需提供另外配置。 2.2 详细配置策略 ~~~~~~~~~~~~~~~~~ SF-1 R 中有多种语言分析方法,其中一些是基于字符的分析方法,还有一些是基于语言的分析方法。标记解析器的解析结果作为分析器的输入,分析器对这些字符进行分析,得到一系列的字符。最终我们对这些字符再进行索引,搜索和挖掘。 下面是关于语言分析器的一些配置信息: :: 下面对配置中每个节点的核心属性进行简单的描述("optional" 属性除外): ================ =============== =================================================================== 元素 属性 描述 ================ =============== =================================================================== LanguageAnalyzer dictionarypath 指定基于语言的分析器的辞典路径 Method id 分析器名称 \ analysis 该属性指定分析器的类型。共有两种类型,一种是语言独立的,包括 token, ngram 和 matrix。 另外一种是语言相关的,包括 Chinese, Korean 和 其它语言。 该属性之后会跟随一些和该属性对应的一些选项。 \ casesensitive (optional) 默认值为 yes。该属性是用来设置文档字段属性的大小写敏感性。如果该属性设为 yes, 对于文件的索引和检索将区分大小写 \ idxflag (optional) 默认值为 all. Indexing flag 用来表示索引中应该返回哪种类型的词。该属性共有4种类型的值: 1) all 返回所有词; 2) prime 仅返回原始的词; 3) second 返回第二次分析得到的词; 4) none “prime” 和 “second” 两种类型的词都不返回. 原始的词是由标记解析器解析得到。 第二次得到的词是由具体的语言分析器分析得到,以解析器的解析结果作为输入。 \ schflag (optional) 默认值 second. Searching flag 表示检索中返回那中类型的词。同上idxflag。 ================ =============== =================================================================== **Token** 这种方法不作任何操作,仅将标记解析器解析得到的结果作为输出。所以 LAManager 的输出即是解析器的解析结果。 **NGram** N-Grams 由分析器分析得到。 两个N的值由用户指定, 例如 N1 和 N2。举例说明: 假设 N1 = 2, N2 = 3, 对于文本 “izene”我们会得到这样的分析结果: ”iz”, ”ze”, ”en”, ”ne”, ”ize”, ”zen”, and ”ene”. 这种方法一般作为文档Title的分析方法。 ========== ========== 属性 描述 ========== ========== min N-gram 中N的最小值 max N-gram中N的最大值 apart 该选项用来告诉NGram分析器对于3组不同类型的字符要区分对待: 1) Chinese, Japanese, Korean 字符; 2)数字字符;3)字母 maxno 该选项指定由一个标记串分析得到的词的受限个数。 ========== ========== **Chinese Analyzer** 这种方法用来分析一个给定的中文文本,并从中抽取有用的词语。Chinese Morpheme Analysis(CMA) 用来分析中文文本,而且它也集成了英语的词干分析器。所以CMA同样可以处理中英混合的文本。 ========== =============== ======================================== 元素 属性 描述 ========== =============== ======================================== settings mode 设置分析器输出哪种类型的词语。 1)all: 原始的标记字串和分析器分析得到的词语; 2) noun: 返回分析器分析得到的词语。这种类型适合资源比较少的情况下使用; 3)label: 这种类型通常用于挖掘特性。 \ option 下面给出详细的解释。 \ specialchar 相邻字母,数字,和特殊字符将被连接起来,作为一个字符被抽取。并且将自动将该字符设置为解析器的 allow选项 \ dictionarypath 覆盖 LanaguageAnalyzer选项中的辞典路径。 ========== =============== ======================================== 设置: ======== ======= ========================= 选项 设置 描述 ======== ======= ========================= C \+ 从复合名词中抽取名词词语 \ \* 按上面选项的方法抽取名词词语,另外,将这些名词加载到词表中。 R 0/- 返回所有的分析结果。 \ \+ 使用排名最靠前的两种分析结果。 \ 1-9 指定抽取多少个排名靠前的分析结果. 例如, 1 表示分析器返回最优的分析结果。2 表示分析器返回排在前两名的分析结果。 S \- 混合在中文文本中的英语单词会被原样抽取出来。 \ \+ 对英语单词进行词干化处理。 T 1 统计方法, 这种方法具有高的正确率,但速度比较慢。 \ 2 最大匹配方法,该方法具有比较高的速度,但正确率比较低。 \ 3 最小匹配方法,该方法具有比较高的速度,召回率比较高,但正确率比较底。 ======== ======= ========================= **Korea Analyzer** 使用KMA(Korean Morphological Analyzer)分析器抽取词语. 该分析器的选项设置和Chinese Analyzer很相似。 ========= ================= ================= 元素 属性 描述 ========= ================= ================= settings mode 设置分析器输出哪种类型的词语。 1)all: 原始的标记字串和分析器分析得到的词语; 2) noun: 返回分析器分析得到的词语。这种类型适合资源比较少的情况下使用; 3)label: 这种类型通常用于挖掘特性。 \ option 下面给出详细的解释。 \ specialchar 相邻字母,数字,和特殊字符将被连接起来,作为一个字符被抽取。并且将自动将该字符设置为解析器的 allow选项 \ dictionarypath 覆盖 LanaguageAnalyzer选项中的辞典路径。 ========= ================= ================= 设置: ===================== ===================== ==================================================================== 选项 设置 描述 ===================== ===================== ==================================================================== C \+ 从复合名词中抽取名词词语 \ \* 按上面选项的方法抽取名词词语,另外,将这些名词加载到词表中。 R 0/- 返回所有的分析结果。 \ \+ 使用排名最靠前的两种分析结果。 \ 1-9 指定抽取多少个排名靠前的分析结果. 例如, 1 表示分析器返回最优的分析结果。2 表示分析器返回排在前两名的分析结果。 S \- 混合在中文文本中的英语单词会被原样抽取出来。 \ \+ 对英语单词进行词干化处理。 N 0 不抽取数字 \ 1-9 1 表示抽取包含1个或多个数字字母的数字; 9 表示抽取9个数字或者更多数字长度的数字 B \- 将一个标记字符串中的数字和代表量化单位的名词分开 (米, 千克, 等) 。 如 ”10千米” = ”10”, ”千米 \ \+ 将数字和代表量化单位的名词作为一个整体抽取出来 H \- 将中文字符转换为等价的韩语字符 \ \+ 如果中文字符和其对应的韩语字符一起出现,抽取出其中的中文字符。 V \- 不抽取动词和形容词的词根 \ \+ 对于具有1个以上音节的动词和形容词进行词干化处理。 ===================== ===================== ==================================================================== **English Analyzer (和其它的分析器)** 其它语言的分析器还包括 丹麦语, 荷兰语, 英语, 芬兰语, 法语, 德语, 匈牙利语, 意大利语, 挪威语, 葡萄牙语, 罗马尼亚语, 俄语, 西班牙语, 瑞典语, 和土耳其语。这些分析器会提供字符的词干化处理。 每个字符的词根最终作为一个检索词。词干化是查找一个词的词根的过程。例如, ”boys” => ”boy”, ”unlimited” => ”unlimit”. **Multilanguage Analyzer** 多种语言的分析器并不是一个独立的分析器。因为多种语言混合的文档 (一个文本中至少包含2种语言)现在比较常见, 多种语言的分析器可以进行配置,利用不同的分析器处理各种不同的语言。 分析器的核心选项是advoption。该选项可以配置为 Chinese(cn), English(en), Japanese(jp) and Korean(kr)。 还有一种可选值 "default”, 表示所有的语言。 - 注意! ”default” 只能指定给一个分析器。而且指定了“default” 的分析器配置必须放在多种语言分析器前面。 - OPTIONAL. 其它语言的配置作为可选项, 每一种语言都可以采用一种处理模式。共有4中处理模式: - “none” 不对该语言做任何处理。使用 “default” 语言分析器对该语言进行处理。 - “char“ 将该语言文本分为一个个独立的字符。例如, 采用“char” 模式处理英语文本,给定”ABC”字符串,将得到 ”A”, ”B” 和 ”C” 3个词。 - “string” 利用标点符号对该语言文本进行切分。例如,利用该模式处理英文文本,给定 ”ABC DE”字符串,将返回 ”ABC”, ”DE”两个词. - “ma” 指定一个语言分析器对该语言文本进行处理。对不同语言的设置用分号“;”隔开。例如: advoption = ”default, inner la korall mia; cn, char”, 意指利用“char” 模式处理中文,利用innerlakorall_mia 处理其它语言。