OpenNLP ngram n元语法模型(简介)
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元语法模型(简介)相关推荐
- 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论...
2019独角兽企业重金招聘Python工程师标准>>> 依存句法分析,法国语言学家L.Tesniere1959年提出.句法,句子规则,句子成分组织规则.依存句法,成分间依赖关系.依赖 ...
- 通俗易懂的Go协程的引入及GMP模型简介
本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...
- 主题模型简介(Topic Models)
主题模型简介(Topic Models) 要想更好地管理当今爆炸式的电子文档档案,需要使用新的技术或工具来处理自动组织.搜索.索引和浏览大型电子文档集合.在当今机器学习和统计学研究的基础上,利用层次概 ...
- 点击率预估的几个经典模型简介
点击率预估的几个经典模型简介 2016-02-22 00:32 点击率预估是大数据技术应用的最经典问题之一,在计算广告,推荐系统,金融征信等等很多领域拥有广泛的应用.本文不打算对这个话题做个全面 ...
- SNF快速开发平台2019-权限管理模型简介-权限都在这里
1.1 权限的概念 权限是指为了保证职责的有效履行,任职者必须具备的,对某事项进行决策的范围和程度.它常常用"具有批准--事项的权限"来进行表达.例如,具有批准预算外5000 ...
- N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑
转载自时空霹雳 在统计语言模型章节中,我们谈到了N元语法模型不可避免的一个问题,就是数据稀疏,其原因是大规模语料统计与有限语料的矛盾.根据齐普夫(Zipf)法则,我们能够推测知零概率问题不可避免.数据 ...
- bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结
bert模型简介.transformers中bert模型源码阅读.分类任务实战和难点总结:https://blog.csdn.net/HUSTHY/article/details/105882989 ...
- 《Power Designer系统分析与建模实战》——2.1 需求模型简介
本节书摘来自华章计算机<Power Designer系统分析与建模实战>一书中的第2章,第2.1节,作者:谢星星,朱婵著, 更多章节内容可以访问云栖社区"华章计算机"公 ...
- ASP.NET中Session模型简介
阅读本文章前,需要读者对以下知识有所了解.否则,阅读过程中会在相应的内容上遇到不同程度的问题. 懂得ASP/ASP.NET编程 了解ASP/ASP.NET的Session模型 了解ASP.NET We ...
最新文章
- R语言stringr包str_count函数计算字符串匹配个数实战
- [产品设计]为什么目前的运动手表的产品设计是错的?
- java newsize_JVM中的-Xms -Xmx -XX:newSize -XX:MaxnewSize -Xmn -XX:PermSize -XX:MaxPermSize区别介绍...
- linux查看网卡速率
- mysql根据时间戳查询指定日期内数据
- linux shell wc 命令
- 关于java自动生成一个tostring-json,解决hibernate框架,每次全属性输出,的数据动态且限制对象的属性书写到前端,使用模板!
- 如何快速部署一个Elasticsearch集群?
- linux中类似findfirst的函数,findfirst函数的用法
- 谈论源码_为什么每个人都在谈论WebAssembly
- python3.7怎么安装turtle_python3绘图程序教学:载入和查询Turtle模组(一)
- ZeroC Ice demo构建(继承Ice::Application类)
- HCIE-Security Day3:防火墙特征和组网方式
- vc6.0安装过程中出现的问题——解决
- Eplan 3D安装板布局步骤(快速上手)
- python display方法_python学习之Display
- hive 数据类型 java_Hive数据类型
- centos7 oracle 打补丁
- 感谢有你 | LiveVideoStackCon 2021 上海站优秀出品人、讲师与志愿者
- 路由器默认账户密码大全