zoukankan      html  css  js  c++  java
  • lucene_02_IKAnalyre

    前言

    在lucene中虽然已经提供了许多的分词器:StandardAnalyzer、CJKAnalyzer等,但在解析中文的时候都会把文中拆成一个个的单子。

    毕竟老外不懂中文。这里介绍一个中文的分词器:IKAnalyre。虽然在其在分词的时候还不够完美

    例如:将“高富帅,是2012年之后才有的词汇”

    拆分为下图:

    但是它可以通过配置文件来,增加新词和过滤不许出现的词比如:“的、啊、呀”等等没有具体意思的修饰副词和语气词等等。

    配置IK解析器

    第一步:在pom.xml 引入IK,注意:这个分词器由于从2012年之后就没有更新过,所以只能在低版本的lucene的版本中使用,该例使用的是:4.10.3

    <!--ik 中文分词器-->
        <!-- https://mvnrepository.com/artifact/com.janeluo/ikanalyzer -->
        <dependency>
          <groupId>com.janeluo</groupId>
          <artifactId>ikanalyzer</artifactId>
          <version>2012_u6</version>
        </dependency>

    完整pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.chen</groupId>
      <artifactId>lucene</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>lucene</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-core -->
        <dependency>
          <groupId>org.apache.lucene</groupId>
          <artifactId>lucene-core</artifactId>
          <version>4.10.3</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-queryparser -->
        <dependency>
          <groupId>org.apache.lucene</groupId>
          <artifactId>lucene-queryparser</artifactId>
          <version>4.10.3</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-analyzers-common -->
        <dependency>
          <groupId>org.apache.lucene</groupId>
          <artifactId>lucene-analyzers-common</artifactId>
          <version>4.10.3</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.6</version>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>RELEASE</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/io.github.zacker330.es/ik-analysis-core -->
        <!--ik 中文分词器-->
        <!-- https://mvnrepository.com/artifact/com.janeluo/ikanalyzer -->
        <dependency>
          <groupId>com.janeluo</groupId>
          <artifactId>ikanalyzer</artifactId>
          <version>2012_u6</version>
        </dependency>
    
    
    
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>

    第二步:在资源目录下引入配置文件和扩展词汇文件、过滤词文件

    IKAnalyzer.cfg.xml,是该分词器的核心配置文件,管理着ext.dic(扩展词汇文件)、stopword.dic(禁词文件)

    内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
    <properties>  
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">ext.dic;</entry> 
        
        <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">stopword.dic;</entry> 
        
    </properties>

    ext.dic 内容示例:

    高富帅
    白富美
    java工程师

    stopword.dic内容示例:

    我
    是
    用
    的
    你
    它
    他
    她
    a
    an
    and
    are
    as
    at
    be
    but
    by
    for
    if
    in
    into
    is
    it
    no
    not
    of
    on
    or
    such
    that
    the
    their
    then
    there
    these
    they
    this
    to
    was
    will
    with

    测试代码

     // 查看标准分析器的分词效果
        @Test
        public void testTokenStream() throws Exception {
            // 创建一个标准分析器对象
    //        Analyzer analyzer = new StandardAnalyzer();
    //        Analyzer analyzer = new CJKAnalyzer();
    //        Analyzer analyzer = new SmartChineseAnalyzer();
            Analyzer analyzer = new IKAnalyzer();
            // 获得tokenStream对象
            // 第一个参数:域名,可以随便给一个
            // 第二个参数:要分析的文本内容
    //        TokenStream tokenStream = analyzer.tokenStream("test",
    //                "The Spring Framework provides a comprehensive programming and configuration model.");
            TokenStream tokenStream = analyzer.tokenStream("test",
                    "高富帅,是2012年之后才有的词汇");
            // 添加一个引用,可以获得每个关键词
            CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
            // 添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
            OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
            // 将指针调整到列表的头部
            tokenStream.reset();
            // 遍历关键词列表,通过incrementToken方法判断列表是否结束
            while (tokenStream.incrementToken()) {
                // 关键词的起始位置
    
                System.out.println("start->" + offsetAttribute.startOffset());
                // 取关键词
                System.out.println(charTermAttribute);
                // 结束位置
                System.out.println("end->" + offsetAttribute.endOffset());
            }
            tokenStream.close();
        }

    结果如下图: 

  • 相关阅读:
    类加载器
    java类的主动使用方式
    Java类装载器和命名空间
    cas改造
    所有jar文件列出工具
    源码阅读工具_解析所有类的使用情况
    web(s,哈哈,w,没有,d,用处,f)web框架引用类的次数
    struts2类型转换器StrutsTypeConverter的使用
    struts2的验证框架的使用和扩展
    Python3连接MySQL
  • 原文地址:https://www.cnblogs.com/getchen/p/8676459.html
Copyright © 2011-2022 走看看