就是N-Gram version of edit distance
public float getDistance(String source, String target) { final int sl = source.length(); final int tl = target.length(); if (sl == 0 || tl == 0) { if (sl == tl) { return 1; } else { return 0; } } int cost = 0; if (sl < n || tl < n) { for (int i=0,ni=Math.min(sl,tl);i<ni;i++) { if (source.charAt(i) == target.charAt(i)) { cost++; } } return (float) cost/Math.max(sl, tl); } char[] sa = new char[sl+n-1]; float p[]; //'previous' cost array, horizontally float d[]; // cost array, horizontally float _d[]; //placeholder to assist in swapping p and d //construct sa with prefix // 填充前缀,满足n-gram for (int i=0;i<sa.length;i++) { if (i < n-1) { sa[i]=0; //add prefix } else { sa[i] = source.charAt(i-n+1); } } p = new float[sl+1]; d = new float[sl+1]; // indexes into strings s and t int i; // iterates through source int j; // iterates through target char[] t_j = new char[n]; // jth n-gram of t // 初始化第一横排的编辑距离 for (i = 0; i<=sl; i++) { p[i] = i; } for (j = 1; j<=tl; j++) { // 开始处理第二个横排,...到tl最后一个横排 //construct t_j n-gram,构建n-gram if (j < n) { // 补充前缀 for (int ti=0;ti<n-j;ti++) { t_j[ti]=0; //add prefix } for (int ti=n-j;ti<n;ti++) { t_j[ti]=target.charAt(ti-(n-j)); } } else { // 直接取n-gram t_j = target.substring(j-n, j).toCharArray(); } d[0] = j; for (i=1; i<=sl; i++) { cost = 0; int tn=n; //compare sa to t_j,计算f(i,j) for (int ni=0;ni<n;ni++) { if (sa[i-1+ni] != t_j[ni]) { cost++; } else if (sa[i-1+ni] == 0) { //discount matches on prefix tn--; } } float ec = (float) cost/tn; // minimum of cell to the left+1, to the top+1, diagonally left and up +cost d[i] = Math.min(Math.min(d[i-1]+1, p[i]+1), p[i-1]+ec); } // copy current distance counts to 'previous row' distance counts _d = p; p = d; d = _d; } // our last action in the above loop was to switch d and p, so p now // actually has the most recent cost counts return 1.0f - ((float) p[sl] / Math.max(tl, sl)); }
相关推荐
3.lmstats.countfile--ngram-count的子流程,用于构建词汇表和统计ngram的频度 4.ngram.estimate--ngram-count的子流程,在词汇表和ngram频度的基础上计算ngram条件概率以及backoff权值的过程 5.ngram.read--与训练...
它还提供了一个简单的命令行工具来下载名为google-ngram-downloader的ngram。 请参阅帮助以查看可用的操作: google-ngram-downloader help usage: google-ngram-downloader <command> [options] co
java笔试题算法通过预测 N-gram 来学习文档嵌入以对长篇电影评论进行情感分类 此代码实现了 iclr 2016 研讨会论文中提出的 DV-ngram 模型: [Li Bofang Li, Tao Liu, Xiaoyong Du, Deyuan Zhang and Zhe Zhao - ...
ngram 尝试算法 希望下载的人能继续编写下去。可以互相讨论
开发计算两个字符串间的编辑距离,LCS距离和N-gram距离的函数。 (1)编辑距离 ...设Ngram(a) 是字符串a中长度为N的子串的集合。两个字符串a,b的N-gram相似度NG(a,b)定义如下: NG(a,b)越大,字符串a,b越相似。
N-Gram(有时也称为N元模型)...另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间的差异程度。这是模糊匹配中常用的一种手段。本文将从此开始,进而向读者展示N-Gram在自然语言处理中的各种powerful的应用。
input - 要拆分为 ngram 的字符串或字符串数组。 n - 作为数字的 ngram 大小。 默认为 2(即二元组)。 pad - 可选的填充参数。 采用布尔值或数组。 默认为 false(即无填充)。 请参阅下面的。 ...
ngram是一个模块,用于计算两个字符串之间的相似度。 它与python的“ difflib.SequenceMatcher”不同,因为它更关心两个字符串的大小。 ngram是perl模块的端口和扩展,称为“ String :: Trigram”
在本文中,我们将深入探讨如何使用MATLAB进行实用的语音识别算法设计。MATLAB是一种强大的数学计算环境,广泛应用于信号处理、图像分析和机器学习等领域,包括语音识别。以下是一些关键知识点: 1. **语音信号处理...
ngram折扣平滑算法.pdf ngram折扣平滑算法是自然语言处理领域中一个重要的语言模型算法,主要用于估计前n-1词为a_的情况下,第n个词为z的概率,即概率Pr(z|a_)。该算法的主要思想是通过对训练语料中的ngram进行统计...
3. **CountTable**: 作为ngram-count的核心数据结构,CountTable存储了N-gram的计数。它可以处理不同长度的N-grams,并支持高效的查找和更新操作。 4. **BackoffModel**: 在训练过程中,如果遇到未见过的N-gram,...
描述的 Open Refine 项目中 ngram-fingerprint 算法的 JavaScript 实现。 算法 该算法与 Google Refine 的算法略有不同。 扩展西文字符的替换已经在第三步而不是最后一步完成。 这样做主要是为了使排序正常工作。 ...
simstring SimString近似字符串匹配算法的Ruby实现。参考: SimString网站: : SimString参考实现(C ++): : SimString论文: ://www.aclweb.org/anthology/C10-1096安装gem install simstring_pure用法在IRB中...
语法n-gram的格式与Google Ngram集合( )中使用的格式相同。输入目前,默认支持的输入格式为CONLL-U,但也支持CONLL-09。 扩展的n元语法是为斯坦福依赖关系(SD)和通用依赖关系(UD)方案定义的。生成n-gram ...
ngram-slp-0.0.2.jar
多语言 程序语言专家。 它用于检测程序语言,就像,但基于朴素贝叶斯分类器。 入门 使用pip安装 ...首先,我们需要在多语言训练语料... echo import os | polyglot classify --ngram=3 --top=3 --verbose --model=./mode
我们的项目是根据google N-Gram数据构建和使用同现网络。 我们从Google获得了100GB的数据,其中包含5万亿个单词来构建共现网络。
N-Gram模型是指在文本中考虑一个单词出现的概率时,不仅考虑当前单词,还考虑其前面n-1个单词,这里的n通常为1到3,即uni-gram、bi-gram和tri-gram。这种模型在中文分词、信息检索、机器翻译等领域有广泛应用。 **...
3.lmstats.countfile.jpg:ngram-count的子流程,用于构建词汇表和统计ngram的频度; 4.ngram.estimate.jpg:ngram-count的子流程,在词汇表和ngram频度的基础上计算ngram条件概率 以及backoff权值的过程; 5.ngram....
$ make $ ngrams --type=word --n=3 --in= sample.txt 或者$ ngrams --type=character -n=3 --in= sample.txt 或者字节 ngram,例如,从二进制文件中获取 ngram。 $ ngrams --type=byte -n=3 --in= sample.txt 就是...