本文主要研究下如何使用opennlp进行文档分类

DoccatModel

要对文档进行分类,需要一个最大熵模型(Maximum Entropy Model),在opennlp中对应DoccatModel

    @Testpublic void testSimpleTraining() throws IOException {ObjectStream<DocumentSample> samples = ObjectStreamUtils.createObjectStream(new DocumentSample("1", new String[]{"a", "b", "c"}),new DocumentSample("1", new String[]{"a", "b", "c", "1", "2"}),new DocumentSample("1", new String[]{"a", "b", "c", "3", "4"}),new DocumentSample("0", new String[]{"x", "y", "z"}),new DocumentSample("0", new String[]{"x", "y", "z", "5", "6"}),new DocumentSample("0", new String[]{"x", "y", "z", "7", "8"}));TrainingParameters params = new TrainingParameters();params.put(TrainingParameters.ITERATIONS_PARAM, 100);params.put(TrainingParameters.CUTOFF_PARAM, 0);DoccatModel model = DocumentCategorizerME.train("x-unspecified", samples,params, new DoccatFactory());DocumentCategorizer doccat = new DocumentCategorizerME(model);double[] aProbs = doccat.categorize(new String[]{"a"});Assert.assertEquals("1", doccat.getBestCategory(aProbs));double[] bProbs = doccat.categorize(new String[]{"x"});Assert.assertEquals("0", doccat.getBestCategory(bProbs));//test to make sure sorted map's last key is cat 1 because it has the highest score.SortedMap<Double, Set<String>> sortedScoreMap = doccat.sortedScoreMap(new String[]{"a"});Set<String> cat = sortedScoreMap.get(sortedScoreMap.lastKey());Assert.assertEquals(1, cat.size());}

这里为了方便测试,先手工编写DocumentSample来做训练文本
categorize方法返回的是一个概率,getBestCategory可以根据概率来返回最为匹配的分类

输出如下:

Indexing events with TwoPass using cutoff of 0Computing event counts...  done. 6 eventsIndexing...  done.
Sorting and merging events... done. Reduced 6 events to 6.
Done indexing in 0.13 s.
Incorporating indexed data for training...
done.Number of Event Tokens: 6Number of Outcomes: 2Number of Predicates: 14
...done.
Computing model parameters ...
Performing 100 iterations.1:  ... loglikelihood=-4.1588830833596715    0.52:  ... loglikelihood=-2.6351991759048894    1.03:  ... loglikelihood=-1.9518912133474995    1.04:  ... loglikelihood=-1.5599038834410852    1.05:  ... loglikelihood=-1.3039748361952568    1.06:  ... loglikelihood=-1.1229511041438864    1.07:  ... loglikelihood=-0.9877356230661396    1.08:  ... loglikelihood=-0.8826624290652341    1.09:  ... loglikelihood=-0.7985244514476817    1.010:  ... loglikelihood=-0.729543972551105    1.0
//...95:  ... loglikelihood=-0.0933856684859806    1.096:  ... loglikelihood=-0.09245907503183291    1.097:  ... loglikelihood=-0.09155090064000486    1.098:  ... loglikelihood=-0.09066059844628399    1.099:  ... loglikelihood=-0.08978764309881068    1.0
100:  ... loglikelihood=-0.08893152970793908    1.0

小结

opennlp的categorize方法需要自己先切词好,单独调用不是很方便,不过如果是基于pipeline设计的,也可以理解,在pipeline前面先经过切词等操作。本文仅仅是使用官方的测试源码来做介绍,读者可以下载个中文分类文本训练集来训练,然后对中文文本进行分类。

doc

  • Document Categorizer API

使用opennlp进行文档分类相关推荐

  1. java opennlp_使用opennlp进行文档分类

    序 本文主要研究下如何使用opennlp进行文档分类 DoccatModel 要对文档进行分类,需要一个最大熵模型(Maximum Entropy Model),在opennlp中对应DoccatMo ...

  2. ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类

    ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类 目录 输出结果 实现代码 输出结果 先看文档分类后的结果,一共得到五类电影: 实现代码 # -*- c ...

  3. ML之H-Clusters:基于H-Clusters算法利用电影数据集实现对top 100电影进行文档分类

    ML之H-Clusters:基于H-Clusters算法利用电影数据集实现对top 100电影进行文档分类 目录 输出结果 实现代码 输出结果 先看输出结果 实现代码 # -*- coding: ut ...

  4. 《机器学习实战》学习笔记之第四章朴素贝叶斯进行文档分类

    朴素贝叶斯有两个假设: 1."朴素":特征之间相互独立,单词出现的概率相同,当然这个假设不合理 2."权重相同":每个特征等同重要,这个假设也不太合理 尽管如此 ...

  5. python文件查重_文件查重 我使用的是面向局部敏感的最小哈希签名的方法进行文档查重 联合开发网 - pudn.com...

    文件查重 所属分类:其他 开发工具:Python 文件大小:39KB 下载次数:7 上传日期:2017-12-20 16:45:32 上 传 者:lala_ 说明:  我使用的是面向局部敏感的最小哈希 ...

  6. 企业怎样有效地进行文档管理

    企业文件涵盖了企业的核心知识.文化内涵.商业经验等无形资产.越来越多的管理者意识到文档管理在企业管理中的重要性.企业文档管理是一项必须做好的系统工作.然而,如何提高企业文档管理水平是许多管理者应该考虑 ...

  7. Linux系统通过FTP进行文档基本操作【华为云分享】

    [摘要] Linux系统里通过FTP可以对文档进行上传,更改权限和基本的文档管理. 获得Linux系统后,不熟悉命令操作的情况下,可以通过FTP工具进行文档操作,下面以WinSCP工具为例进行讲解: ...

  8. 利用YAKE进行文档关键词提取

    利用YAKE!进行文档关键词提取 现记录一种基于关键词统计.无监督.单文档关键词提取算法YAKE!(Yet Another Keyword Extractor)的使用笔记. YAKE!基于5种指标:是 ...

  9. 使用 pandoc 进行文档转换(markdown转word)

    pandoc 是一个神奇的转换工具(详见官网),它支持各种文档格式之间的转换.本文针对如何使用 pandoc 转换 markdown 为 docx 进行说明. pandoc 下载 安装 pandoc ...

最新文章

  1. Cache 与Memory架构及数据交互
  2. 【大数据学习】数学基础及应用
  3. iOS的类方法和实例方法区别与使用
  4. VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题
  5. 健康管理-健康管理特点
  6. 线程安全面试题 java_Java面试题-线程安全
  7. CF888G XOR-MST 最小异或生成树
  8. Hadoop学习笔记
  9. python图像resize_Python图像resize前后颜色不一致问题
  10. git clone失败的问题,网络问题
  11. 【转】重装Ubuntu时如何保留/home分区中的数据
  12. c/c++混编到的问题 extern C 介绍【转】
  13. 获取0-1的加密的随机数
  14. 中国省市县地区代码数据库文件
  15. android intent singletask,singleTask模式Activity二次start接收Intent失败?
  16. 城通网盘仿蓝奏网盘源码|字母哥网盘|+搭建教程
  17. 基于SSM的ERP管理系统和仓库管理系统
  18. c语言转换为python语言_C语言程序转换为Python语言
  19. Android 集成谷歌地图
  20. Photoshop安装

热门文章

  1. 拼多多程序员:因为看到同事被抬上救护车,我被开除了!
  2. 程序员毕业两年,如何在帝都购房上车?
  3. 云原生应用程序的架构应该怎么设计?
  4. 算法笔记-经典链表操作案例
  5. 梯度下降法的三种形式-BGD、SGD、MBGD
  6. 二、配置QtDesigner、PyUIC及PyRcc
  7. ReentrantLock和Condition理解及应用
  8. Oracle 10g RAC RMAN备份异机单实例恢复
  9. 【拓扑排序】【bitset】Gym - 101128A - Promotions
  10. BZOJ 1091([SCOI2003]分割多边形-分割直线)