OpenNLP ngram n元语法模型(简介)
来源:互联网 发布:降调软件哪个好 编辑:程序博客网 时间:2024/05/19 16:35
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元语法模型(简介)
- 分词学习(3),基于ngram语言模型的n元分词
- 分词学习(3),基于ngram语言模型的n元分词
- 自然语言处理之n元语法模型
- Ngram模型
- 统计自然语言处理——n元语法(马尔可夫模型)小结
- 统计自然语言处理——n元语法(马尔可夫模型)小结
- 统计自然语言处理——n元语法(马尔可夫模型)小结
- 统计自然语言处理(统计推理:稀疏数据集上的n元语法模型)
- n元语法
- n元语法
- N元模型
- N元语言模型
- N元语言模型
- openNLP的POSTagger使用(一)训练模型
- ngram模型的光滑处理
- N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑
- N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑
- Spring中<context:annotation-config/>的作用
- spring boot +mybatis+shiro
- [LeetCode]561. Array Partition I
- 为什么做的报表领导不满意,如何提升报表的价值?
- vue2.0中的组件通信
- OpenNLP ngram n元语法模型(简介)
- MVP模式在Android项目中的使用
- 使用GnuPG(PGP)加密信息及数字签名教程
- LaTex图形与表格插入
- Mac关闭支付宝AlipayDispatcherService进程
- vector容器存入类对象写法
- Chromium的UI绘制初探
- [Leetcode] 107. Binary Tree Level Order Traversal II 解题报告
- oracle job定时执行存储过程详解