精华内容
下载资源
问答
  • java文本分词工具
    2021-03-06 14:01:09

    说明

    到目前为止,就中文分词工具和中文分词方法而言,分词模型大概有10几个种类,效果较好的并不多,HMM,MMSEG之类的,当然还有深度学习的模型,paddle的模型比较好。按工具名说的话有中科院的nlpir,哈工大的ltp,不知何出的jieba,还有清华北大都有分词工具,还有很多,十几种应该有。所有工具我都看了的效果并不是他们吹嘘的那么好,很多场景都无法正常分词。

    主要问题:

    同样的词在不同的句子中分词效果不一样;

    未登录词,也就是常见的专有名词,无法处理;

    歧义句子;

    现在语言多国语言混输;

    文言文这种,常人无法看懂的文章。

    这些问题解决思路:通过Natural Language Understanding和Reinforcement Learning,应该还没人研究出来;

    正文

    这里用maven,IK分词找不到单独实现的包,因为它实现在lucene所以需要借用lucene-core

    org.apache.lucene

    lucene-core

    8.6.3

    com.jianggujin

    IKAnalyzer-lucene

    8.0.0

    java代码,注意包名这里没添加

    import org.apache.lucene.analysis.TokenStream;

    import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;

    import org.wltea.analyzer.lucene.IKAnalyzer;

    import static java.lang.System.out;

    import java.io.StringReader;

    import java.util.ArrayList;

    import java.util.List;

    public class test4 {

    public static String ikwordSplit( String content) throws Exception {

    @SuppressWarnings("resource")

    IKAnalyzer analyzer=new IKAnalyzer(true);

    TokenStream stream = analyzer.tokenStream(null, new StringReader(content));

    stream.reset();

    CharTermAttribute term = stream.addAttribute(CharTermAttribute.class);

    List result = new ArrayList();

    while(stream.incrementToken()) {

    result.add(term.toString());

    }

    stream.close();

    return String.join("|", result);

    }

    public static void main(String[] args) throws Exception {

    out.print(ikwordSplit("明天你好"));

    }

    }

    总结

    分词效果一般般,还没jieba好,这是个人认知,通常分词还是能胜任。见仁见智,目前文本分词还有很长的路要走,前面的问题亟待解决!像paoding,盘古这些分词方法,据网上发文好像火过一段时间,现已消沉。

    自然语言处理分词不仅仅是中文分词,还要考虑英文、古文。世界在发展,全球文字分词也需要考虑,所以,还得做语言识别,语言识别大体比较简单uncode编码可以做到。但是拼读文字可能会识别错误,而且每个字符都要做一次文字识别,计算量还是有些大。

    本文地址:https://blog.csdn.net/LearnToPain/article/details/109620101

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    更多相关内容
  • HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构...提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。
  • 中文分词java实现

    2018-05-09 22:38:07
    所需要抽取的文本进行分词和词性的标注,将中文划分为独立存在的词, 并且辨别这些词的词性,将每一个词的词性标注在每一个词的后面。这样做可以方便我们对一些需要的词的抽取,并且能更加方便的进行词频统计。
  • import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.RandomAccessFile;import java.util.StringToke...

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.RandomAccessFile;

    import java.util.StringTokenizer;

    /*

    * 文本格式:已分词的中文文本,空格分割。有若干行,每行为一个段落。

    * 功能:遍历文档,逐个返回词语。

    * 两种模式:

    * 1 到文档末尾后,结束

    * 2 到文档末尾后,从头再读。

    /

    public class WordReader

    {

    static final int normalMode = 0;

    static final int againMode = 1;

    int currentMode = 0;

    //BufferedReader br=null;

    RandomAccessFile raf= null;

    StringTokenizer tokenizer = null;

    String nextWord=null;

    int currentLine = 0;

    int allCounts = 0;

    public WordReader(String fileName) throws IOException

    {

    File file=new File(fileName);

    //br=new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));

    raf = new RandomAccessFile(file,"r") ;

    }

    private boolean hasNextWord() throws IOException

    {

    if( tokenizer!=null && tokenizer.hasMoreTokens())

    {

    nextWord = tokenizer.nextToken();

    return true;

    }

    else

    {

    String line=raf.readLine();

    if(line == null)

    {

    if(currentMode == normalMode)

    return false;

    else //从头再来

    {

    raf.seek(0);

    return hasNextWord();//递归

    }

    }

    tokenizer = null;

    line = new String(line.getBytes("iso8859-1"),"utf-8");

    tokenizer= new StringTokenizer(line," ");

    return hasNextWord();//递归

    }

    }

    private String getNextWord() throws IOException

    {

    if(nextWord != null)

    {

    String word = nextWord;

    nextWord = null;

    allCounts ++;

    return word;

    }

    else if(hasNextWord())

    {

    return getNextWord();

    }

    else return null;

    }

    public static void main(String[] args) throws IOException

    {

    // TODO Auto-generated method stub

    WordReader wordReader = new WordReader("/home/linger/sources/ParaModel/electronic_seg.txt");

    wordReader.currentMode = WordReader.againMode;

    //while(wordReader.hasNextWord())//共10329309个词

    for(int i=0;i<10329319;i++)//文本从头读

    {

    System.out.println(wordReader.getNextWord());

    }

    System.out.println(wordReader.allCounts);

    }

    }

    用randomaccessfile类很容易操作文件指针。

    但是遇到中文乱码问题,参考了这里http://blog.chinaunix.net/uid-15490606-id-211958.html,解决了。

    line = new String(line.getBytes("iso8859-1"),"utf-8");

    对编码不是很精通,有时见看看这个http://blog.sina.com.cn/s/blog_673c81990100t1lc.html。

    展开全文
  • 前言: Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,...这里我就主要介绍Ansj中文分词器,它是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词

    前言:
    Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词器,Paoding分词器,smartcn分词器,HanLP分词器。

    不同的分词器有不同的用法,定义的接口也不一样,至于效果哪个好,那要结合自己的应用场景自己来判断。这里我就主要介绍Ansj中文分词器,它是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如MMseg4j)的分词准确率更高,目前实现了.中文分词. 中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能,适用于对分词效果要求高的各种项目。

    1. ANSJ项目git地址:https://github.com/NLPchina/ansj_seg
    2. ANSJ文档地址:点击此处跳转文档地址链接
    3. Maven
    <!-- 开源中文分词器Ansj -->
    <dependency>
    	<groupId>org.ansj</groupId>
    	<artifactId>ansj_seg</artifactId>
    	<version>5.1.6</version>
    </dependency>
    
    

    一、基本分词 BaseAnalysis

    基本分词是什么?
    1、基本就是保证了最基本的分词.词语颗粒度最非常小的…所涉及到的词大约是10万左右.
    2、基本分词速度非常快.在macAir上.能到每秒300w字每秒.同时准确率也很高.但是对于新词他的功能十分有限

    /**
         * 基本分词
         */
        public static void baseAnalysis () {
            long startTime = System.currentTimeMillis();
            String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
            Result analysisedResult = BaseAnalysis.parse(text);
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            System.out.println("基本分词输出词性: " + analysisedResult + "     耗时(" + time + "ms)");
            System.out.println("-----------------------------------------------------------");
            String analysisedText = BaseAnalysis.parse(text).toStringWithOutNature();
            long endTime2 = System.currentTimeMillis();
            long time2 = endTime2 - startTime;
            System.out.println("基本分词仅输出词: " + analysisedText + "     耗时(" + time2 + "ms)");
        }
            public static void main(String[] args) {
            	baseAnalysis();
        }
    

    二、精准分词 ToAnalysis

    精准分词是什么?
    1、精准分词是Ansj分词的店长推荐款
    2、它在易用性,稳定性.准确性.以及分词效率上.都取得了一个不错的平衡.
    3、如果你初次赏识Ansj如果你想开箱即用.那么就用这个分词方式是不会错的.

    public static void toAnalysis () {
          System.out.println("-----------------------------------------------------------");
          long startTime = System.currentTimeMillis();
          String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
          String analysisedText = ToAnalysis.parse(text).toStringWithOutNature();
          long endTime = System.currentTimeMillis();
          long time = endTime - startTime;
          System.out.println("精准分词: " + analysisedText + "   (耗时" + time + "ms)");
      }
      public static void main(String[] args) {
            	toAnalysis();
        }
    

    三、nlp分词 NlpAnalysis

    nlp分词是什么?
    1、nlp分词是总能给你惊喜的一种分词方式.
    2、它可以识别出未登录词.但是它也有它的缺点.速度比较慢.稳定性差.ps:我这里说的慢仅仅是和自己的其他方式比较.应该是40w字每秒的速度吧.
    3、个人觉得nlp的适用方式.1.语法实体名抽取.未登录词整理.只要是对文本进行发现分析等工作

    public static void nlpAnalysis () {
            System.out.println("-----------------------------------------------------------");
            long startTime = System.currentTimeMillis();
            String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
            String analysisedText = NlpAnalysis.parse(text).toStringWithOutNature();
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            System.out.println("nlp分词: " + analysisedText + "   (耗时" + time + "ms)");
        }
        public static void main(String[] args) {
            	nlpAnalysis ();
        }
    

    四、面向索引的分词 IndexAnalysis

    面向索引的分词是什么?
    1、面向索引的分词。故名思议就是适合在lucene等文本检索中用到的分词。 主要考虑以下两点

    • 召回率
      召回率是对分词结果尽可能的涵盖。比如对“上海虹桥机场南路” 召回结果是[上海/ns, 上海虹桥机场/nt, 虹桥/ns, 虹桥机场/nz, 机场/n, 南路/nr]
    • 准确率
      其实这和召回本身是具有一定矛盾性的Ansj的强大之处是很巧妙的避开了这两个的冲突 。比如我们常见的歧义句“旅游和服务”->对于一般保证召回 。大家会给出的结果是“旅游 和服 服务” 对于ansj不存在跨term的分词。意思就是。召回的词只是针对精准分词之后的结果的一个细分。比较好的解决了这个问题
    public static void indexAnalysis () {
            System.out.println("-----------------------------------------------------------");
            long startTime = System.currentTimeMillis();
            String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
            String analysisedText = IndexAnalysis.parse(text).toStringWithOutNature();
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            System.out.println("索引分词: " + analysisedText.toString() + "   (耗时" + time + "ms)");
        }
        public static void main(String[] args) {
            	indexAnalysis ();
        }
    

    五、全部代码

    package com.yawei.web.controller;
    
    import org.ansj.domain.Result;
    import org.ansj.domain.Term;
    import org.ansj.splitWord.analysis.BaseAnalysis;
    import org.ansj.splitWord.analysis.IndexAnalysis;
    import org.ansj.splitWord.analysis.NlpAnalysis;
    import org.ansj.splitWord.analysis.ToAnalysis;
    import org.apache.commons.lang3.ArrayUtils;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * ansj 分词测试
     */
    public class AnsjTest {
    
        /**
         * 基本分词
         */
        public static void baseAnalysis () {
            long startTime = System.currentTimeMillis();
            String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
            Result analysisedResult = BaseAnalysis.parse(text);
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            System.out.println("基本分词输出词性: " + analysisedResult + "     耗时(" + time + "ms)");
            System.out.println("-----------------------------------------------------------");
            String analysisedText = BaseAnalysis.parse(text).toStringWithOutNature();
            long endTime2 = System.currentTimeMillis();
            long time2 = endTime2 - startTime;
            System.out.println("基本分词仅输出词: " + analysisedText + "     耗时(" + time2 + "ms)");
        }
    
        public static void toAnalysis () {
            System.out.println("-----------------------------------------------------------");
            long startTime = System.currentTimeMillis();
            String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
            String analysisedText = ToAnalysis.parse(text).toStringWithOutNature();
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            System.out.println("精准分词: " + analysisedText + "   (耗时" + time + "ms)");
        }
    
        public static void nlpAnalysis () {
            System.out.println("-----------------------------------------------------------");
            long startTime = System.currentTimeMillis();
            String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
            String analysisedText = NlpAnalysis.parse(text).toStringWithOutNature();
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            System.out.println("nlp分词: " + analysisedText + "   (耗时" + time + "ms)");
        }
    
        public static void indexAnalysis () {
            System.out.println("-----------------------------------------------------------");
            long startTime = System.currentTimeMillis();
            String text = "山东省青岛市崂山区辽阳东路181号崂山市场监督管理局";
            String analysisedText = IndexAnalysis.parse(text).toStringWithOutNature();
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            System.out.println("索引分词: " + analysisedText.toString() + "   (耗时" + time + "ms)");
        }
    
        public static void main(String[] args) {
            baseAnalysis();
            toAnalysis();
            nlpAnalysis();
            indexAnalysis();
        }
    }
    
    
    展开全文
  • HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构...提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。
  • 1. 整体思路第一步:先将中文文本进行分词,这里使用的HanLP-汉语言处理包进行中文文本分词。第二步:使用停用词表,去除分好的词中的停用词。2. 中文文本分词环境配置使用的HanLP-汉语言处理包进行中文文本分词。·...

    1. 整体思路

    第一步:先将中文文本进行分词,这里使用的HanLP-汉语言处理包进行中文文本分词。

    第二步:使用停用词表,去除分好的词中的停用词。

    2. 中文文本分词环境配置

    使用的HanLP-汉语言处理包进行中文文本分词。

    ·HanLP-汉语言处理包下载,可以去github上下载

    ·HanLP 的环境配置有两种方式:方式一、Maven;方式二、下载jar、data、hanlp.properties。

    ·官方环境配置步骤也可以在github上查询到。

    ·环境配置好后,java使用HanLP进行中文分词文档如下:http://hanlp.linrunsoft.com/doc.html

    3. 下载停用词表

    停用词表可以去百度或者其他搜索引擎检索一份,很容易就找到!

    4. 去除停用词工具类

    使用这个工具类的之前,请先完成中文文本分词环境配置,并测试一下。停用词 .txt 文件路径请修改为自己的本地路径。

    6ab56df4c70696e604011f0b0fae814f.png

    5. 工具类测试

    5.1 测试代码

    public class test {

    public static void main(String args[]) {

    try {

    System.out.println(FormatUtil.RemovalOfStopWords("床前明月光,疑是地上霜。举头望明月,低头思故乡。"));

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    5.2 测试结果

    2d0d389c76f9637c1507af7a6f19f607.png

    文章转载自 syrdbt 的博客

    展开全文
  • NULL 博文链接:https://xiaofancn.iteye.com/blog/2205024
  • word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...
  • java分词工具hanlp介绍

    2021-03-09 23:34:49
    原标题:java分词工具hanlp介绍前几天(6月28日),在第23届中国国际软件博览会上,hanlp这款自然语言处理工具荣获了“2019年第二十三届中国国际软件博览会优秀产品”。HanLP是由一系列模型预算法组成的工具包,结合...
  • 是越南语文本处理工具包,可用于分词和词性标注。 UETnlp 比 UETsegmenter 更容易使用。 概述 src : java源代码文件夹 uetsegmenter.jar :一个可执行的 jar 文件(参见 ) models :用于越南语分词的预训练模型 ...
  • word分词java源码Vitk——越南语文本处理工具包 注意:此存储库现已过时。 有兴趣的程序员应该考虑使用新的 repo vlp (github.com/phuonglh/vlp) 自 2016 年以来,我们更喜欢使用 Scala 而不是 Java。 注意:2018 ...
  • java文本英文分词

    2021-03-13 01:14:59
    public static void IKAnalysis(String str) throws IOException {Analyzer anal=new IKAnalyzer(true);StringReader reader=new StringReader...//分词TokenStream ts=anal.tokenStream("", reader);CharTermAttri...
  • 一、背景笔者2年前写过一篇《PHP使用elasticsearch搜索安装及分词方法》的文章,记录了使用ES的分词的实现步骤,最近又需要用到分词,在网上发现一个百度的中文分词项目,中文词法分析(LAC) ,决定使用一番,并把...
  • 文本语义分词工具

    2013-11-10 20:39:44
    文本 语义 分词工具
  • Java中文分词组件 - word分词

    万次阅读 2019-02-10 16:17:50
    word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过...
  • import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.RandomAccessFile;import java.io.Serializable...
  • 本文的目标有两个:1、学会使用11大Java开源中文...11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口:/*** 获取文本的所有分词结果, 对比不同分词器结果*@auth...
  • They made a trip to Beijing last year 分词、去除停用词、提取词干 后 得到 test, sing, song, bingo, made, trip, beij, last, year 英文句子进行 分词、去除停用词、提取词干 工具类源码: (注:停用词可以...
  • 文本数据是自然语言处理的重要数据来源,对于中文文本而言,由于其特殊性,常常需要对文本进行分词,本文针对中文文本,利用Java对其进行分词,并去除停用词。
  • 引入:敏感词是许多网站...方法一:语句采用分词工具进行分词,再与敏感词库进行匹配查找。方法二:采用DFA算法进行敏感词匹配。 方法一:采用分词工具实现敏感词过滤(IKAnalyzer3.2.5Stable.jar) package com....
  • 开始使用NLPIR分词,在分词准确性上效果要比SCWS好。本文介绍如何在windows系统下编译JAVA,生成可以执行的jar文件。NLPIR的下载地址:GitHub的地址:两个版本有一些不同,本文将分别讲解如何利用Eclipse建立工程。...
  • 特性极简的 api 设计支持转换长文本支持多音字支持多种拼音标注方式支持中文分词快速开始准备jdk 1.7+maven 引入com.github.houbbpinyin0.0.4快速开始返回中文的拼音使用 PinyinHelper.toPinyin(string) 进行中文...
  • 本文所介绍的工具主要针对英文分词,对于英文分词工具很多,笔者经比较Apache OpenNLP效率和使用便捷度较好。另外其针对Java开发提供开源的API。维基百科:ApacheOpenNLP库是一个基于机器学习的自然语言文本处理的...
  • .index) gongdan = gongdan.drop(indexs) content = gongdan['content'] cont = ''.join(content) cont = ''.join(re.findall(u'[\u4e00-\u9fa5]+', cont)) 分词并去除停用词 stopwords = set() fr = codecs.open('...
  • 算法介绍最近要做领域概念的提取...计算公式比较简单,如下:预处理由于需要处理的候选词大约后3w+,并且语料文档数有1w+,直接挨个文本遍历的话很耗时,每个词处理时间都要一分钟以上。为了缩短时间,首先进行分词...
  • 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词分词效果将直接影响词性,句法树等模块...
  • 以前写的例子,都是基于用空格分割的...这里我们是用一款叫做结巴分词器的工具,来对输入源的中文进行分词。 在上一次修改过的基础之上https://blog.csdn.net/xxkalychen/article/details/117136261?spm=1001.2014.3

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,806
精华内容 5,122
关键字:

java文本分词工具