一,分词系统地址: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

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

最新文章

  1. mysql开启远程访问权限
  2. CxImage在VS2010下的配置
  3. java实现顺序栈
  4. [译]git rebase
  5. SPC.NET,为5年的开发做个结尾
  6. 了解Json
  7. HTML 常见代码整合;
  8. 《OD大数据实战》Hive环境搭建
  9. Enter password: ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (2)
  10. javascript实现可编辑的下拉框
  11. Ubuntu 14.04 LAMP搭建小记
  12. PowerBuilder预防数据库死锁相关处理
  13. android--屏幕旋转方法总结
  14. 醒醒吧!互联网的真正未来不是AI,更不是VR,AR,而是区块链
  15. Codeforces #448 Div2 E
  16. spring-boot 2.1.2.RELEASE bug
  17. java官网真不错
  18. 3分钟看完Java 8——史上最强Java 8新特性总结之第一篇 函数式编程基础
  19. bzoj4456: [Zjoi2016]旅行者
  20. 树莓派通过GPIO控制步进电机

热门文章

  1. 关于.NET字符串驻留的问题
  2. 修改Windows默认远程端口号
  3. celery 定时任务
  4. March 09th, 2018 Week 10th Friday
  5. Unity Shader 基础(1): RenderType &amp; ReplacementShader
  6. CISCO ACL配置
  7. Automatically migrating data to new machines kafka集群扩充迁移topic
  8. Nginx使用教程(四):提高Nginx网络吞吐量之buffers优化
  9. [Java] SpringMVC工作原理之四:MultipartResolver
  10. Grid布局指南