美文网首页自然语言处理—学习
【转】Solr Tokenizers分词器介绍

【转】Solr Tokenizers分词器介绍

作者: 无良笔记 | 来源:发表于2018-07-22 20:54 被阅读2次

    原文出处:https://blog.csdn.net/jiangchao858/article/details/54981722

    摘要: Solr的分词器(Tokenizers)用来将文本流分解成一系列的标记(tokens)。分析器analyzer 受字段配置的影响,分词器(Tokenizers)于此无关。分析器主要是把字符流(character stream )处理成一系列的标记对象(Token objects)。参见原文

    分词器说明

    输入流中很些信息可能是不需要的,比如空格和标点;有些信息是需要添加的,如同义词/别名;有些信息需要替换,如缩略语等。这样,分析器处理后的一个标记(token)包含很多信息。
    例如:

    <fieldType name="text" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
      </analyzer>
    </fieldType>
    

    这里的StandardTokenizerFactory并不是真正的分词器,而是所有实现该TokenizerFactory的API。这个工厂类将在需要创建新的tokenizer 时被调用。它的create()方法接受一个Reader参数(即字符流)并返回一个TokenStream(即标记流)。创建对象的工厂必须源自Tokenizer。除非你要使用tokenizer 生成的标记(token),否则都应该将结果传送给下级的过滤器(filter)。

    分词器种类

    标准分词器

    这个Tokenizer将文本的空格和标点当做分隔符。
    注意,你的Email地址(含有@符合)可能会被分解开;用点号(就是小数点)连接的部分不会被分解开。对于有连字符的单词,也会被分解开。

    参数 说明
    maxTokenLength 整数,默认255 超过此长度的字符会被忽略

    举例:

    <analyzer>
      <tokenizer class="solr.StandardTokenizerFactory"/>
    </analyzer>
    

    输入:“Please, email john.doe@foo.com by 03-09, re: m37-xq.”
    输出: “Please”, “email”, “john.doe”, “foo.com”, “by”, “03”, “09”, “re”, “m37”, “xq”

    经典标记生成器

    基本与Standard Tokenizer相同。
    注意,用点号(就是小数点)连接的部分不会被分解开;用@号(Email中常用)连接的部分不会被分解开;互联网域名(比如wo.com.cn)不会被分解开;有连字符的单词,如果是数字连接也会被分解开。

    参数 说明
    maxTokenLength 整数,默认255 超过此长度的字符会被忽略

    例如:

    <analyzer>
      <tokenizer class="solr.ClassicTokenizerFactory"/>
    </analyzer>
    

    输入: “Please, email john.doe@foo.com by 03-09, re: m37-xq.”
    输出: “Please”, “email”, “john.doe@foo.com”, “by”, “03-09”, “re”, “m37-xq”

    关键词分词

    把整个输入文本当做一个整体。
    没有参数。
    例如:

    <analyzer>
      <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
    

    输入: “Please, email john.doe@foo.com by 03-09, re: m37-xq.”
    输出: “Please, email john.doe@foo.com by 03-09, re: m37-xq.”

    信标记者

    只处理字母。
    没有参数。
    例如:

    <analyzer>
      <tokenizer class="solr.LetterTokenizerFactory"/>
    </analyzer>
    

    输入: “I can’t.”
    输出: “I”, “can”, “t”

    小写标记生成器

    以非字母元素分隔,将所有的字母转化为小写。
    没有参数。
    例如:

    <analyzer>
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    </analyzer>
    

    输入:“我只是爱我的iPhone!”
    输出:“我”,“公正”,“爱”,“我的”,“iphone”

    n元标记生成器

    将输入文本转化成指定范围大小的片段。
    注意,空格也会被当成一个字符处理。

    参数 说明
    minGramSize 整数,默认1 指定最小的片段大小,需大于0
    maxGramSize 整数,默认2 指定最大的片段大小,需大于最小值

    例如:

    <analyzer>
      <tokenizer class="solr.NGramTokenizerFactory"/>
    </analyzer>
    

    输入: “hey man”
    输出: “h”, “e”, “y”, ” “, “m”, “a”, “n”, “he”, “ey”, “y “, ” m”, “ma”, “an”

    注意,这里的空格会被当成一个字符,所以会有一个空的token,此外,”m”和” m”,还有”y”和”y “是不同的,后者都含有一个空格符。

    例如:

    <analyzer>
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="4" maxGramSize="5"/>
    </analyzer>
    

    输入: “bicycle”
    输出: “bicy”, “bicyc”, “icyc”, “icycl”, “cycl”, “cycle”, “ycle”

    边缘的N-gram分词器

    用法和N-Gram Tokenizer类似。

    参数 说明
    minGramSize 整数,默认1 指定最小的片段大小,需大于0
    maxGramSize 整数,默认1 指定最大的片段大小,需大于或等于最小值
    side “front” 或 “back”, 默认”front” 指定从哪个方向进行解析

    例如:

    <analyzer>
      <tokenizer class="solr.EdgeNGramTokenizerFactory" />
    </analyzer>
    

    输入: “babaloo”
    输出: “b”

    例如:

    <analyzer>
      <tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5"/>
    </analyzer>
    
    

    输入: “babaloo”
    输出: “ba”, “bab”, “baba”, “babal”

    例如:

    <analyzer>
      <tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5" side="back"/>
    </analyzer>
    

    输入: “babaloo”
    输出: “oo”, “loo”, “aloo”, “baloo”

    正则表达式模式标记生成器

    可以指定正则表达式来分析文本。

    参数 说明
    pattern 必选项 正规表达式
    group 数字,可选,默认-1 负数表示用正则表达式做分界符;非正数表示只分析满足正则表达式的部分;0表示满足整个正则表达式;大于0表示满足正则表达式的第几个括号中的部分

    例如:

    <analyzer>
      <tokenizer class="solr.PatternTokenizerFactory" pattern="\s*,\s*"/>
    </analyzer>
    

    输入: “fee,fie, foe , fum”
    输出: “fee”, “fie”, “foe”, “fum”

    例如:

    <analyzer>
      <tokenizer class="solr.PatternTokenizerFactory" pattern="[A-Z][A-Za-z]*" group="0"/>
    </analyzer>
    

    输入:“你好。我的名字是伊尼戈蒙托亚。你杀了我的父亲。准备后事“。
    输出:‘你好’,‘我的’,‘伊尼戈’,‘蒙托亚’,‘你’,‘准备’

    这里的group为0,表示必须满足整个表达式,正则表达式的含义是以大写字母开头,之后是大写字母或小写字母的组合。

    例如:

    <analyzer>
      <tokenizer class="solr.PatternTokenizerFactory" pattern="(SKU|Part(\sNumber)?):?\s(\[0-9-\]+)" group="3"/>
    </analyzer>
    

    输入: “SKU: 1234, Part Number 5678, Part: 126-987”
    输出: “1234”, “5678”, “126-987”

    这个group等于3,表示满足第三个括号”[0-9-]+”中的正则表达式

    空白标记生成器

    这个Tokenizer将文本的空格当做分隔符。

    参数 说明
    rule 默认java 如何定义空格
    unicode

    例如:

    <analyzer>
      <tokenizer class="solr.WhitespaceTokenizerFactory" rule="java" />
    </analyzer>
    

    输入:“要,还是什么?”
    输出:“要”,“是”,“或”,“怎么办?”

    相关文章

      网友评论

        本文标题:【转】Solr Tokenizers分词器介绍

        本文链接:https://www.haomeiwen.com/subject/yssrmftx.html