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

DoccatModel

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

@Test

public void testSimpleTraining() throws IOException {

ObjectStream 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> sortedScoreMap = doccat.sortedScoreMap(new String[]{"a"});

Set cat = sortedScoreMap.get(sortedScoreMap.lastKey());

Assert.assertEquals(1, cat.size());

}

这里为了方便测试,先手工编写DocumentSample来做训练文本

categorize方法返回的是一个概率,getBestCategory可以根据概率来返回最为匹配的分类

输出如下:

Indexing events with TwoPass using cutoff of 0

Computing event counts... done. 6 events

Indexing... 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: 6

Number of Outcomes: 2

Number of Predicates: 14

...done.

Computing model parameters ...

Performing 100 iterations.

1: ... loglikelihood=-4.1588830833596715 0.5

2: ... loglikelihood=-2.6351991759048894 1.0

3: ... loglikelihood=-1.9518912133474995 1.0

4: ... loglikelihood=-1.5599038834410852 1.0

5: ... loglikelihood=-1.3039748361952568 1.0

6: ... loglikelihood=-1.1229511041438864 1.0

7: ... loglikelihood=-0.9877356230661396 1.0

8: ... loglikelihood=-0.8826624290652341 1.0

9: ... loglikelihood=-0.7985244514476817 1.0

10: ... loglikelihood=-0.729543972551105 1.0

//...

95: ... loglikelihood=-0.0933856684859806 1.0

96: ... loglikelihood=-0.09245907503183291 1.0

97: ... loglikelihood=-0.09155090064000486 1.0

98: ... loglikelihood=-0.09066059844628399 1.0

99: ... loglikelihood=-0.08978764309881068 1.0

100: ... loglikelihood=-0.08893152970793908 1.0

小结

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

doc

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

  1. 使用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. java进行文档类型转换PDF

    使用jacob进行文档类型转换支持PPT.Excel.Word转为PDF模式 本方法对Windows部署的项目友好,最后需要在jdk/bin目录下导入与jar包版本一致的.dll文件 文件地址 链接: ...

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

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

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

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

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

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

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

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

最新文章

  1. 用好 Java 中的枚举,真的没有那么简单!
  2. KRPano JS 场景编辑器源码
  3. python关于七巧板的代码_Css打造一个简单的静态七巧板
  4. [转]常用Delphi开发资料网址
  5. linux 的间隔定时器函数setitimer
  6. 控制台——EventLog实现事件日志操作
  7. c语言头文件及形式,C语言头文件作用及写法
  8. 浙大PAT考试经验/考前必看/日常刷题总结(经验只写了一点点
  9. 贴片电阻的功率与封装对照表
  10. java毕业生设计web人力资源管理系统计算机源码+系统+mysql+调试部署+lw
  11. 小说阅读,原生小说APP源码出售,可二次开发 四端互通:android端,ios端,h5端,公众号端
  12. com.homelink.android,链家-新房二手房租房
  13. ffmpeg一些基本用法
  14. dotnet 基于 debian 创建一个 docker 的 sdk 镜像
  15. php 保持内容换行符,PHP 将内容写入word pdf 换行符不生效咋办
  16. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java大学生学科竞赛管理系统t16zl
  17. C# .Net通过pythonnet调用python pyd文件
  18. 简单的学生网页作业源码 基于html css javascript仿淘宝购物商城设计毕业论文源码
  19. Python爬虫抓取基金数据
  20. GAN学习总结一 GAN基本概念理解

热门文章

  1. 视频光流估计综述:从算法原理到具体应用
  2. 使用VA助手如何快速添加注释(按doxygen注释规范)
  3. 天数换算月份_Js 计算指定月份的天数
  4. Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a cl
  5. Java线程---休眠问题来看并发执行
  6. LeetCode 116. 填充每个节点的下一个右侧节点指针
  7. matplotlib.pyplot中add_subplot方法参数的含义
  8. RDKit | 基于随机森林(RF)预测SARS-CoV 3CL蛋白酶抑制剂的pIC50
  9. Nat. Methods | ilastik:为生物图像分析而生的交互式机器学习平台
  10. RDKit:基于RDKit的溶解度预测的机器学习模型