大数据工具:IKAnalyzer分词工具介绍与使用

版权声明: https://blog.csdn.net/maoyuanming0806/article/details/83478071

简单介绍IKAnalyzer分词工具与使用

简介

以下简介参考前辈和项目文档介绍

  • 为什么要分词呢,当大数据处理中要提取语句的特征值,进行向量计算。所有我们要用开源分词工具把语句中的关键词提取出来。

  • IK Analyzer是什么呢,就是我们需要的这个工具,是基于java开发的轻量级的中文分词工具包。它是以开源项目Luence为主体的,结合词典分词和文法分析算法的中文分词组件。IK有很多版本,在2012版本中,IK实现了简单的分词歧义排除算法。

  • 我们为什么选择IK作为我们的分词工具呢,这里我们简单介绍一下。这里我们采用了网上的一些介绍。

    • 1、IK才用了特有的“正向迭代最细粒度切分算法”,支持细粒度和智能分词两种切分模式。
    • 2、在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。
    • 3、2012版的只能分词模式支持简单的分词排歧义处理和数量词合并输出。
    • 4、用了多子处理器分析模式,支持 英文字母 数字 中文词汇等
    • 5、优化词典存储,更小的内存占用。

IKAnalyzer的引入使用

由于maven库里没有ik的坐标。我们需要手动添加到本地的maven仓库中。或则lib引用

项目地址:https://github.com/wks/ik-analyzer

  • 1、首先要clone代码

git clone https://github.com/wks/ik-analyzer

克隆到本地。

  • 2、编译并且安装到本地的repository

mvn install -Dmaven.test.skip=true

(1)编译后也可以将jar上传到自己的maven私有库(如果有maven私有库,那么久直接使用2012版本,直接网上下载,然后上传到maven库即可)。

(2)可以放在本地maven仓库的对应坐标

(3)项目lib下引用

  • 3、在pom.xml中加入如下配置即可
<dependency>
   <groupId>org.wltea.ik-analyzer</groupId>
    <artifactId>ik-analyzer</artifactId>
    <version>3.2.8</version>
</dependency> 

IK的两个重要词典

  • 扩展词典:为的是让需要切分的字符串的词语 根据扩展词典里的词,不要切分开来。

例如:扩展词典中有:中国的台湾 。那么原本会切分成:中国 的 台湾 在 东海 。会切分成:中国的台湾 在 东海

  • 停止词典:对比停止词典,直接删掉停止词典中出现的词语

IK的使用

自己案例
maven工程

resource目录下三个配置文件
IKAnalyzer.cfg.xml

<?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">/extend.dic</entry>
    <entry key="ext_stopwords">/stopword.dic</entry>
</properties>

extend.dic 扩展词典

这是一个
巨大的墙

stopword.dic

一个
一
个
的

IKAnalyzerTest.java

package com.mym.ikanalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.IOException;
import java.io.StringReader;

public class IKAnalyzerTest {

    public static String beginAnalyzer(String line){
        IKAnalyzer analyzer = new IKAnalyzer();

        //使用智能分词
        //ik2012和ik3.0,3.0没有这个方法
//        analyzer.setUseSmart(true);


        try {
            return printAnalyzerResult(analyzer, line);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    public static String printAnalyzerResult(Analyzer analyzer, String keyword) throws IOException {
        String resultData = "";
        String infoData = "";

        TokenStream tokenStream = analyzer.tokenStream("content",new StringReader(keyword));
        tokenStream.addAttribute(CharTermAttribute.class);
        while(tokenStream.incrementToken()){
            CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);
            infoData = infoData+ "    "+charTermAttribute.toString();

        }
        if(!"".equals(infoData)){
            resultData = resultData + infoData.trim()+"\r\n";
        }else{
            resultData = "";
        }
        return resultData;
    }

    public static void main(String[] args) {
        String line = "这是一个粗糙的栅栏,浪费钱,我想要一堵巨大的墙!”网友Mary说,还附上了“理想”中的边境墙照片";
        String s = IKAnalyzerTest.beginAnalyzer(line);
        System.out.println(s);
    }

}

执行结果

这是一个    这是    粗糙    栅栏    浪费    费钱    我    想要    一堵    巨大的墙    巨大    网友    mary    说    还    附上    上了    理想    中    边境    墙    照片

更详细使用可参考github上该工程有demo和文档

猜你喜欢

转载自blog.csdn.net/maoyuanming0806/article/details/83478071