• 常见的四种文本自动分词详解及IK Analyze的代码实现


    以下解释来源于网络-百度百科

    1.word分词器 

    word分词 [1]  是一个Java实现的分布式中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词性标注、同义标注、反义标注、拼音标注等功能。同时还无缝和LuceneSolrElasticSearchLuke集成。

    听着就不叼,就没深入研究

    2、ansj
    ansj_seg分词器个人觉得是开源分词器里最强悍功能最丰富的。ansj_seg基于中科院的 ictclas 中文分词算法,智能、高效。虽然现在已经有ictclas 的for java版本,但是 ansj_seg从实现到使用来说要强大的多,而且作者自产自销自用,很多细节和小功能都有考虑,在索引和自然语言分析方面都有很优秀的表现。ansj_seg可以作为ictclas 算法实现的分词器的代表出场。

    这个我有jar但是代码我没搞懂就没贴

    3、IKanalyzer
    IKanalyzer采用的是“正向迭代最细粒度切分算法”,是比较常见而且很容易上手的分词器了。一般新手上路学习lucene或者solr都会用这个。优点是开源(其实java分词器多是开源的,毕竟算法都是业内熟知的)、轻量、目前来看没有太大的bug,源码简单易懂,做二次开发也很简单,即使遇到solr/Lucene版本更新,只需要自己稍微修改下实现类就可以通用。

    4、mmseg4j

    mmseg4j用Chih-Hao Tsai 的MMSeg算法实现的中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j已经实现了这两种分词算法。

    5、jcseg 

    jcseg是使用Java开发的一个开源的中文分词器,使用流行的mmseg算法实现。是一款独立的分词组件,不是针对lucene而开发,但是提供了最新版本的lucene和solr分词接口。

    IK Analyze的代码实现

     1 import java.io.BufferedReader;
     2 import java.io.BufferedWriter;
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileWriter;
     6 import java.io.InputStreamReader;
     7 import java.io.StringReader;
     8  
     9 import org.apache.lucene.analysis.Analyzer;
    10 import org.apache.lucene.analysis.TokenStream;
    11 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
    12 import org.wltea.analyzer.lucene.IKAnalyzer;
    13 
    14 /**
    15  * 
    16  * @author zps
    17  *
    18  */
    19 public class Test {
    20  
    21     public static void main(String[] args) throws Exception {
    22         
    23         String encoding = "UTF-8";
    24         String text = null;
    25         File file = new File("C:\Users\dell\Desktop\大数据\热词数据\热词数据.txt");//将要被分词的文本
    26         File file1 =new File("C:\Users\dell\Desktop\大数据\热词细胞词库\热词数据1.txt");//分完词的文本
    27         if(!file.exists()){
    28             file.createNewFile();
    29            }
    30         FileWriter fw = new FileWriter(file1.getAbsoluteFile());
    31         BufferedWriter bw = new BufferedWriter(fw);
    32         if (file.isFile() && file.exists()) { //判断文件是否存在
    33             InputStreamReader read = new InputStreamReader(
    34             new FileInputStream(file), encoding);//考虑到编码格式
    35             BufferedReader bufferedReader = new BufferedReader(read);
    36            // String text = null;
    37             
    38             
    39             while ((text = bufferedReader.readLine()) != null) {
    40                 Analyzer analyzer = new IKAnalyzer(true);
    41                 StringReader reader = new StringReader(text);
    42                 TokenStream ts = analyzer.tokenStream("", reader);
    43                 CharTermAttribute term=ts.getAttribute(CharTermAttribute.class);
    44                    //System.out.println(text); 
    45                 while(ts.incrementToken()){
    46                        System.out.println(term.toString()+"|");
    47                        bw.write(term.toString()+" ");   
    48                    }
    49                 bw.write("
    ");  
    50                 analyzer.close();
    51                 reader.close();
    52                   }
    53              
    54             read.close();
    55             bw.close();
    56             
    57         } else {
    58             System.out.println("找不到指定的文件");
    59         }
    60     
    61         
    62         //String text = "数据的福利局撒放了肯德基萨芬快乐圣诞节疯狂了";
    63         //Analyzer analyzer = new IKAnalyzer(false);
    64         
    65     }
    66  
    67 }

    这个代码不仅仅是分词还把分完的词保存到了

    C:\Users\dell\Desktop\大数据\热词细胞词库\热词数据1.txt

    可以去官网下载

    这三个文件放到根目录

    IKAnalyze.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">ext.dic;</entry> 
        -->
        <entry key="ext_dict">MyDic.dic;</entry>
        <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">stopword.dic;</entry> 
    
    </properties>

    需要的jar

    注意Lucene的版本号必须是3.6.0

    文学使思想充满血与肉,他比科学和哲学更能给予思想以巨大的明确性和说明性。
  • 相关阅读:
    64位Windows2008下插入Oracle中文乱码问题解决
    .net自定义WebService WSDL
    IE8下调用Active控件
    IIS7.5下发布应用程序备忘
    在aws ec2上使用root用户登录
    win2008 服务器文件夹权限配置
    thinkphp3.1 多表联合查询代码
    并发 并行 同步 异步 多线程的区别
    学习ES6生成器(Generator)
    node.js+socket.io配置详解
  • 原文地址:https://www.cnblogs.com/zpsblog/p/10590950.html
Copyright © 2020-2023  润新知