脑图

分词器构成

  • Character Filters:在Tokenizer之前对文本进行处理;可配置多个;会影响Tokenizer的position和offset信息
    • 自带的Character Filter
      • Html strip - 去除HTML标签
      • Mapping - 字符串替换
      • Pattern replace - 正则匹配替换
  • Tokenizer:将原始文本按照一定的规则,切分为词(term or token)
    • 内置的Tokenizers
      • whitespace:按照空格切分,英文不转小写
      • standard:默认分词器,按词切分(英文空格切分;中文按单字切分),小写处理
      • uax_url_email
      • pattern:正则表达式,
      • keyword:不分词,直接把输入当作输出
      • path hierarchy
      • 可以用Java开发插件,实现自己的Tokenizer
  • Token Filters:将Tokenizer输出的term,再进行增删改
    • 自带的Token Filters
      • Lowercase
      • stop
      • synonym(添加近义词)

        自定义分词器

        ``` PUT new_index { “settings”: { “analysis”: { “analyzer”: { “std_folded”:{ “type”:”custom”, “tokenizer”:”standard”, “filters”:[ “lowercase”, “asciifolding” ] } } } }, “mappings”: { “properties”: { “title”:{ “type”: “text”, “analyzer”: “std_folded” }, “content”:{ “type”: “text”, “analyzer”: “whitespace” } } }

}

  1. <a name="d5bdQ"></a>
  2. ### 中文分词器
  3. <a name="UsEW8"></a>
  4. #### IK分词器
  5. - IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包
  6. - 采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和最大词长两种切分模式
  7. - ik_max_work:细粒度分词
  8. - ik_smart:尽可能不拆分太细,符合用户查询需要
  9. - 采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符
  10. - 支持用户词典扩展定义
  11. - 针对Lucene全文检索优化的查询分析器IKQueryParser;
  12. - 引入简单搜索表达式,采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率
  13. <a name="BIXTl"></a>
  14. #### JIEBA分词器
  15. - 支持三种分词模式
  16. - 精确模式,试图将句子最精确地切开,适合文本分析
  17. - 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  18. - 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
  19. - 同时还支持繁体分词、自定义词典
  20. <a name="AQCah"></a>
  21. #### THULAC分词器
  22. - 能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大
  23. - 准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。
  24. - 速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s
  25. <a name="b12ne"></a>
  26. ### IK分词器的安装
  27. - elasticsearch 1.7.3版本
  28. <a name="GgSZD"></a>
  29. #### 安装步骤
  30. - [https://github.com/wks/ik-analyzer](https://github.com/wks/ik-analyzer),下载安装包
  31. - 将解压出来的文件夹拷贝到Elasticsearch的插件目录下面
  32. - 然后需要修改Elasticsearch的配置文件指定对应的节点名称,这里需要修改文件elasticsearch-7.9.3/config/elasticsearch.yml,并且在文件中添加如下内容

node.name: node-1 network.host: 0.0.0.0 cluster.initial_master_nodes: [“node-1”]

  1. - Elasticsearch安装IK插件的时候需要修改Java的安全权限
  2. - 需要修改文件:/opt/software/elasticsearch/elasticsearch-7.9.3/jdk/conf/security/java.policy
  3. - 在文件中添加下面权限数据

permission java.lang.reflect.ReflectPermission “suppressAccessChecks”;

permission java.io.FilePermission “<>”, “read,write,delete”;

permission java.util.PropertyPermission “*”, “read,write”;

permission javax.security.auth.AuthPermission “getSubject”;

permission javax.security.auth.AuthPermission “modifyPrincipals”;

permission javax.security.auth.AuthPermission “getLoginConfiguration”;

permission java.lang.RuntimePermission “createClassLoader”;

permission java.lang.RuntimePermission “getClassLoader”;

permission java.lang.RuntimePermission “setContextClassLoader”;

permission java.lang.RuntimePermission “accessClassInPackage.sun.misc”;

permission java.lang.RuntimePermission “accessClassInPackage.sun.nio.ch”;

permission java.lang.RuntimePermission “accessDeclaredMembers”;

permission java.lang.RuntimePermission “loadLibrary.jaas_unix”;

permission java.lang.RuntimePermission “shutdownHooks”;

permission java.lang.RuntimePermission “createSecurityManager”;

permission java.lang.RuntimePermission “closeClassLoader”;

permission java.net.SocketPermission “127.0.0.1:3306”,”resolve”;

permission java.net.SocketPermission “127.0.0.1:3306”,”connect”; ```