一,分词系统地址:https://github.com/NLPchina/ansj_seg

二,为什么选择ansj?

1.项目需求:

我们平台要做手机售后的舆情分析,即对购买手机的用户的评论进行分析。分析出手机每个模块(比如:相机,充电等。这些大模块还需要细分,比如充电又可以分:充电慢,没有快充等)的好差评,并且计算差评率,供开发后续改进。之前一直是人工分析,随着评论的增加,这一块也是一个很大的工作量。因此我们想到了做评论的自动分析。这就要用到自然语言处理的技术了。

2.ansj的优点

分词效率高,支持自定义词典(这是最重要的,我们需要根据我们的业务自定义自己的词库,方便我们进行观点分析)

三,业务分析

首先这个系统肯定不能完全代替人工作,我们的目标是尽可能的减少人的工作量。通过统计源声发现,很多评论就一两句话。通过正则表达式把把评论分句。发现小于3句的评论占比将近70%。只要重点处理这种评论就行。把评论分句后,提取出名词和观点匹配。提取出形容词和情感匹配(好评或差评)。这就是评论分析的思路。

四,项目集成分析系统

1.引入jar包

<!-- nps 自然语言处理 -->
    <dependency>
        <groupId>org.nlpcn</groupId>
        <artifactId>nlp-lang</artifactId>
        <version>1.7.7</version>
        <scope>compile</scope>
    </dependency>

2.拷贝org.ansj包到src目录下

3.在resources目录下创建ansj_library.properties文件。这个文件项目里也有(注意这里要写绝对路径,不然会读不到自定义的文件。这是一个坑)

#path of userLibrary this is default library
#dic=library/default.dic
dic=D:/Lure_workspace/iFocusStruc/src/main/resources/library/default.dic
#path of crfModel
#crf_dic1=library/crf.model
userLibrary=D:/Lure_workspace/iFocusStruc/src/main/resources/userLibrary.dic
#stop_dic1=library/stop.dic

#redress dic file path
#ambiguity=library/ambiguity.dic
ambiguity=D:/Lure_workspace/iFocusStruc/src/main/resources/library/ambiguity.dic
synonyms=library/synonyms.dic

#set real name
isRealName=true

#isNameRecognition default true
isNameRecognition=true

#isNumRecognition default true
isNumRecognition=true

#digital quantifier merge default true
isQuantifierRecognition=true

3.把library文件夹拷贝到resources目录下,(这个library文件夹项目中有)

自定义词典:default.dic

连网    n    8000
发热    n    80000
这是    n    1000

4.把resource目录拷贝到本地resource目录。

5.测试:ToAnalysis方法

@Test
    public void wordTest2333() {
        String str = "数据结构效果不好,连网太慢,发热严重";
        Result result = ToAnalysis.parse(str);
        List<Term> termList = result.getTerms();
        for (Term term : termList) {
            System.out.println(term.getName() + ":" + term.getNatureStr());
        }
    }

结果:   

数据结构:n
效果不好:a
,:w
连网:vn
太慢:d
,:w
发热:v
严重:a

数据结构:n    这个自定义的词生效了

连网:vn      没有生效

发热:v   没有生效

发现有问题,我明明把连网设置为了n,为什么还是vn。其实ToAnalysis只能使自定义的词在默认字典中不存在时,这个自定义的词才会生效(这个问题困扰了很久)。

测试二:DicAnalysis方法

@Test
    public void wordTest2333() {
        String str = "数据结构效果不好,连网太慢,发热严重";
        Result result = DicAnalysis.parse(str);
        List<Term> termList = result.getTerms();
        for (Term term : termList) {
            System.out.println(term.getName() + ":" + term.getNatureStr());
        }
    }

结果:

数据结构:n
效果不好:a
,:w
连网:n
太慢:d
,:w
发热:n
严重:a

可以看到我们已经实现自定义的词库中的词全部生效了。

项目集成自动分词系统ansj,实现自定义词库的更多相关文章

  1. paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.

    paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:// ...

  2. paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.

    paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库. mmseg默认词库只能是文件格式...不好维护..要是不个词库放的个数据库里面走好维护兰.. 要实现2个目标..: 1 ...

  3. Java——word分词·自定义词库

    word: https://github.com/ysc/word word-1.3.1.jar 需要JDK8word-1.2.jar c语言给解析成了“语言”,自定义词库必须为UTF-8 程序一旦运 ...

  4. 【自定义IK词典】Elasticsearch之中文分词器插件es-ik的自定义词库

    Elasticsearch之中文分词器插件es-ik 针对一些特殊的词语在分词的时候也需要能够识别 有人会问,那么,例如: 如果我想根据自己的本家姓氏来查询,如zhouls,姓氏“周”.      如 ...

  5. 31.IK分词器配置文件讲解以及自定义词库

    主要知识点: 知道IK默认的配置文件信息 自定义词库     一.ik配置文件     ik配置文件地址:es/plugins/ik/config目录     IKAnalyzer.cfg.xml:用 ...

  6. 30.IK分词器配置文件讲解以及自定义词库

    主要知识点: 知道IK默认的配置文件信息 自定义词库     一.ik配置文件     ik配置文件地址:es/plugins/ik/config目录     IKAnalyzer.cfg.xml:用 ...

  7. ElasticSearch7.3学习(十五)----中文分词器(IK Analyzer)及自定义词库

    1. 中文分词器 1.1 默认分词器 先来看看ElasticSearch中默认的standard 分词器,对英文比较友好,但是对于中文来说就是按照字符拆分,不是那么友好. GET /_analyze ...

  8. Java——ikanalyzer分词·只用自定义词库

    需要包:IKAnalyzer2012_FF_hf1.jarlucene-core-5.5.4.jar需要文件: IKAnalyzer.cfg.xmlext.dicstopword.dic 整理好的下载 ...

  9. solr添加中文IK分词器,以及配置自定义词库

    Solr是一个基于Lucene的Java搜索引擎服务器.Solr 提供了层面搜索.命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式).它易于安装和配置,而且附带了一个基于H ...

随机推荐

  1. Unity Shader 基础(3) 获取深度纹理

    Unity提供了很多Image Effect效果,包含Global Fog.DOF.Boom.Blur.Edge Detection等等,这些效果里面都会使用到摄像机深度或者根据深度还原世界坐标实现各 ...

  2. 【English】20190307

    appropriate for 适用[əˈpropriɪt fɔr] appropriate for many business applications:

  3. 不同主机的docker容器互相通信

    Docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.0.1/16,一个16位的子网掩码给容器提供了 65534个IP地址. docker0只是一个在绑定到 ...

  4. C#深度学习のTask(基于任务的异步模型)

    一.Task关键字解释 Task 类的表示的单个操作不会返回一个值,通常以异步方式执行. Task 对象是一种的中心思想 基于任务的异步编程模式 首次引入.NET Framework 4 中. 因为由 ...

  5. Nginx+Keepalived双机热备

    一.Keepalived Keepalived是保证集群高可用的服务软件.网络中优先级高的节点为master负责响应VIP的ARP包,将VIP和MAC地址映射关系告诉网络内其他主机,还会以多播的形式向 ...

  6. android studio 定位具体的错误原因

    编译一个数据监测APP的时候出现了报错: Error:Compilation failed; see the compiler error output for details. 在网上查到方法如下: ...

  7. 发现一款比echarts更牛B,效果更炫的图表组件 d3.js

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code d3.js  ,能制作更加复杂的图表 https://github.com/d3/d3 ...

  8. P2440 木材加工(二分+贪心)

    思路:这里就要看往那边贪心了,因为解决的是最大值最小化,最小值最大化.也就是说当满足大于等于c时,l=mid+1这样的二分得到的就是在所有满足条件函数下的最右端. #include<iostre ...

  9. P1451 求细胞数量(广搜)

    题意:就是0把是所有细胞圈起来了.而被圈起来的是所有数字全部为一个细胞问有多少个这样的细胞.(mmp,我读半天题) 思路:广搜索.就是,0的话就不放入了,不为0的话,就进入队列,然后,再看它的4个方向 ...

  10. java 方法超时

    public void getcd() { logger.info("任务开始!-------------------------------------"); final Exe ...