n元语法模型在这里不进行介绍,大家可以根据这两篇博客了解下:关于N-Gram模型或者自然语言处理中的N-Gram。

写这篇博客主要是要用到OpenNLP中的ngram模型(我用的opennlp-tools-1.7.0,版本,opennlp.tools.ngram包中),在这里对里面的类和方法的功能简要介绍。

一、NGramGenerator 类

1.功能:对给定的序列使用自定义的分隔符生成一个ngram,并将所有的ngram存储在String类型的List中

2.方法:

(1)public static List<String> generate(List<String> input, int n, String separator){...}

String类型的List作为输入input,用户根据n自定义要生成几元语法类型(n = 2,3 为bigram或者trigram),并且根据separator自定义字符分割标签

(2)public static List<String> generate(char[] input, int n, String separator){...}

该方法除了输入类型为char型数组外,与上一方法用法一样

3.例子:

public class App
{public static void main( String[] args ){String setence = "我爱自然语言处理。";char[] ch = setence.toCharArray();List<String> trigram = NGramGenerator.generate(ch, 3, "/");       System.out.println(trigram);}
}

该程序运行的结果为:[我/爱/自, 爱/自/然, 自/然/语, 然/语/言, 语/言/处, 言/处/理, 处/理/。]

二、NGramModel类

1.功能:用来生成ngrams 和 character ngrams

2.方法:

(1)public int getCount(StringList ngram){...}

统计给定的ngram的数量

(2)public void setCount(StringList ngram, int count){...}

设置某个已存在的ngram的数量

(3)public void add(StringList ngram){...}

新增一个给定的ngram,若已存在,将其数量递增一次

(4)public void add(StringList ngram, int minLength, int maxLength){...}

将Ngrams中特定长度的ngram添加到当前实例中

(5)public void add(String chars, int minLength, int maxLength){...}

新增一个character Ngram到当前实例

(6)public void remove(StringList tokens){...}

从当前Ngram模型中移除特定tokens

(7)public boolean contains(StringList tokens){...}

当前实例中是否存在给定的tokens

(8)public int size(){...}

返回当前实例中不同ngram的数量

(9)public int numberOfGrams(){...}

返回所有Ngrams的总数量

(10)public void cutoff(int cutoffUnder, int cutoffOver){...}

对NGrams进行删减,删除出现次数少于cutoffUnder和多于cutoffUnderOver的ngram

(11)public Dictionary toDictionary(){...}

根据当前NGramModel中所有的StringList创建一个Dictionary

(12)public void serialize(OutputStream out) throws IOException {...}

将ngram实例写入到OutputStream

三、NGramUtils类

1.功能

该类提供了使用拉普拉斯平滑算法、最大似然估计算法、线性内插算法等等计算NGram的概率的方法

2.方法

(1)public static double calculateLaplaceSmoothingProbability(StringList ngram, Iterable<StringList> set, int size, Double k) {...}

使用拉普拉斯平滑算法计算一个ngram在词汇表中的概率

ngram——待计算概率的ngram

set——词汇表

size——词汇表的长度

k——平滑因子

(2)public static double calculateUnigramMLProbability(String word, Collection<StringList> set) {...}

使用最大似然估计计算一个unigram在词汇表中的概率

word——待计算概率的unigram中唯一的一个词(字)

set——词汇表

(3)public static double calculateBigramMLProbability(String x0, String x1, Collection<StringList> set) {...}

使用最大似然估计计算一个bigram在词汇表中的概率

x0,x1——待计算概率的bigram中的第一第二两个词(字)

set——词汇表

(4)public static double calculateTrigramMLProbability(String x0, String x1, String x2, Iterable<StringList> set) {...}

使用最大似然估计计算一个trigram在词汇表中的概率

x0,x1,x2——待计算概率的bigram中的第一第二和第三的词(字)

set——词汇表

(5)public static double calculateNgramMLProbability(StringList ngram, Iterable<StringList> set) {...}

使用最大似然估计计算一个ngram在词汇表中的概率

ngram——待计算概率的ngram

set——词汇表

(6)public static double calculateBigramPriorSmoothingProbability(String x0, String x1, Collection<StringList> set, Double k) {...}

使用先验拉普拉斯平滑算法计算一个bigram在词汇表中的概率

(7)public static double calculateTrigramLinearInterpolationProbability(String x0, String x1, String x2, Collection<StringList> set,

Double lambda1, Double lambda2, Double lambda3) {...}

使用线性内插算法计算一个trigram在词汇表中的概率

lambda1——trigram内插因子

lambda2——bigram内插因子

lambda3——unigram内插因子

(8)public static double calculateMissingNgramProbabilityMass(StringList ngram, Double discount, Iterable<StringList> set) {...}

使用missing probability mass algorithm计算一个ngram在词汇表中的概率

discount——折扣因子

(9)public static StringList getNMinusOneTokenFirst(StringList ngram) {...}

将ngram中最后一个词(字)去掉,得到(n-1)gram,n=1时返回null

(10)public static StringList getNMinusOneTokenLast(StringList ngram) {...}

将ngram中第一个词(字)去掉,得到(n-1)gram,n=1时返回null

(11)public static Collection<StringList> getNGrams(StringList sequence, int size) {...}

给定序列sequence和维数size,生成ngram集合,n=size

OpenNLP ngram n元语法模型(简介)相关推荐

  1. 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论...

    2019独角兽企业重金招聘Python工程师标准>>> 依存句法分析,法国语言学家L.Tesniere1959年提出.句法,句子规则,句子成分组织规则.依存句法,成分间依赖关系.依赖 ...

  2. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  3. 主题模型简介(Topic Models)

    主题模型简介(Topic Models) 要想更好地管理当今爆炸式的电子文档档案,需要使用新的技术或工具来处理自动组织.搜索.索引和浏览大型电子文档集合.在当今机器学习和统计学研究的基础上,利用层次概 ...

  4. 点击率预估的几个经典模型简介

     点击率预估的几个经典模型简介 2016-02-22 00:32 点击率预估是大数据技术应用的最经典问题之一,在计算广告,推荐系统,金融征信等等很多领域拥有广泛的应用.本文不打算对这个话题做个全面 ...

  5. SNF快速开发平台2019-权限管理模型简介-权限都在这里

    1.1    权限的概念 权限是指为了保证职责的有效履行,任职者必须具备的,对某事项进行决策的范围和程度.它常常用"具有批准--事项的权限"来进行表达.例如,具有批准预算外5000 ...

  6. N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑

    转载自时空霹雳 在统计语言模型章节中,我们谈到了N元语法模型不可避免的一个问题,就是数据稀疏,其原因是大规模语料统计与有限语料的矛盾.根据齐普夫(Zipf)法则,我们能够推测知零概率问题不可避免.数据 ...

  7. bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结

    bert模型简介.transformers中bert模型源码阅读.分类任务实战和难点总结:https://blog.csdn.net/HUSTHY/article/details/105882989 ...

  8. 《Power Designer系统分析与建模实战》——2.1 需求模型简介

    本节书摘来自华章计算机<Power Designer系统分析与建模实战>一书中的第2章,第2.1节,作者:谢星星,朱婵著, 更多章节内容可以访问云栖社区"华章计算机"公 ...

  9. ASP.NET中Session模型简介

    阅读本文章前,需要读者对以下知识有所了解.否则,阅读过程中会在相应的内容上遇到不同程度的问题. 懂得ASP/ASP.NET编程 了解ASP/ASP.NET的Session模型 了解ASP.NET We ...

最新文章

  1. R语言stringr包str_count函数计算字符串匹配个数实战
  2. [产品设计]为什么目前的运动手表的产品设计是错的?
  3. java newsize_JVM中的-Xms -Xmx -XX:newSize -XX:MaxnewSize -Xmn -XX:PermSize -XX:MaxPermSize区别介绍...
  4. linux查看网卡速率
  5. mysql根据时间戳查询指定日期内数据
  6. linux shell wc 命令
  7. 关于java自动生成一个tostring-json,解决hibernate框架,每次全属性输出,的数据动态且限制对象的属性书写到前端,使用模板!
  8. 如何快速部署一个Elasticsearch集群?
  9. linux中类似findfirst的函数,findfirst函数的用法
  10. 谈论源码_为什么每个人都在谈论WebAssembly
  11. python3.7怎么安装turtle_python3绘图程序教学:载入和查询Turtle模组(一)
  12. ZeroC Ice demo构建(继承Ice::Application类)
  13. HCIE-Security Day3:防火墙特征和组网方式
  14. vc6.0安装过程中出现的问题——解决
  15. Eplan 3D安装板布局步骤(快速上手)
  16. python display方法_python学习之Display
  17. hive 数据类型 java_Hive数据类型
  18. centos7 oracle 打补丁
  19. 感谢有你 | LiveVideoStackCon 2021 上海站优秀出品人、讲师与志愿者
  20. 路由器默认账户密码大全

热门文章

  1. 上下左右键的ASCII
  2. 美国的做法致芯片市值持续暴跌5000亿美元,美国芯片则祈求中国买更多芯片
  3. 毕业论文里面的各种公式该如何编辑
  4. ffmpeg av_read_frame函数解析
  5. 服务器所有文件后缀名变了,怎么样批量修改文件扩展名(后缀)
  6. PHP大型Web应用入门
  7. 笛卡尔树简介(分类到treap里面)
  8. Springboot毕业设计毕设作品,微信垃圾分类小程序系统 开题报告
  9. GameObject.Find()能否查找隐藏属性的游戏对象?
  10. PCI GXL 关于JPS与作业