我有两个字幕文件.我需要一个函数来告诉它们是代表相同的文本还是相似的文本
有时只有一个文件中有"风正在吹......音乐在播放"的评论.但80%的内容都是一样的.该函数必须返回TRUE(文件代表相同的文本).有时会出现像1而不是l(1 - L)这样的拼写错误: 她只能放行李.当然,这意味着函数必须返回TRUE.
我的评论:
该函数应返回文本相似度的百分比 - 同意
"所有人都很开心"和"所有人都不开心" - 这里被认为是拼写错误,因此被视为同一文本.确切地说,函数返回的百分比将更低,但足够高以表示短语是相似的
请考虑是否要在整个文件或搜索字符串上应用Levenshtein - 不确定Levenshtein,但算法必须作为一个整体应用于文件.不过,这将是一个很长的字符串.
我希望通过像q-gram距离或简单的"包距离"或者Python中的Levenshtein距离来聚集~100,000个短字符串.我打算填写距离矩阵(100,000选择2比较),然后用pyCluster进行分层聚类.但是我甚至在开始之前遇到了一些记忆问题.例如,距离矩阵太大而不适合numpy.
aa = numpy.zeros((100000, 100000))
ValueError: array is too big.
Run Code Online (Sandbox Code Playgroud)
这看起来像是一件合理的事吗?或者我注定要在这项任务中记忆问题?谢谢你的帮助.
在搜索了几天之后,我准备放弃为Python Levenshtein库的 Python 2.7(Windows 64位)找到预编译的二进制文件,所以不是我自己尝试编译它.我安装了最新版本的MinGW32(版本0.5-beta-20120426-1)并将其设置为distutils中的默认编译器.
开始了:
C:\Users\tomas>pip install python-levenshtein Downloading/unpacking python-levenshtein Running setup.py egg_info for package python-levenshtein warning: no files found matching '*' under directory 'docs' warning: no previously-included files matching '*pyc' found anywhere in distribution warning: no previously-included files matching '.project' found anywhere in distribution warning: no previously-included files matching '.pydevproject' found anywhere in distribution Requirement already satisfied (use --upgrade to upgrade): setuptools in c:\python27\lib\site-packages\setuptools-0.6c11-py2.7.egg (from python-levenshtein) Installing collected packages: python-levenshtein Running setup.py …
关于它们如何工作,我想知道低级工作的东西:
关于安全性,事实上,巨大的Linux内核存储库是他们安全的证明.但我想知道以下几点:
好的人,我正在编辑,因为问题含糊不清,答案没有解决细节问题.
Git似乎默认使用的统一差异格式基本上输出三个东西:变化,变化周围的上下文以及与上下文相关的行号.这些东西中的每一个可能同时也可能没有同时更改,因此Git基本上必须处理8种可能的情况.
例如,如果在上下文之前添加或删除了行,则行号将不同; 但是如果上下文和更改仍然相同,那么diff可以使用上下文本身来对齐文本并应用补丁(我不知道这是否确实发生).现在,其他案件会发生什么?我想知道Git如何决定自动应用更改以及何时决定发出错误并让用户解决冲突的详细信息.
我非常确定Git是完全可靠的,因为它确实具有完整的提交历史并且可以遍历历史.我想要的是一些指向学术研究和有关这方面的参考资料,如果它们存在的话.
仍然有点与这个主题相关,我们知道Git/diff将文件视为通用文本文件并在线上工作.此外,diff使用的LCS算法将生成一个试图最小化变化数量的补丁.
所以这里有一些我想知道的事情:
同样,这些可能是一个巨大的主题,欢迎学术文章.
我们正在开发一个系统,使用UTF-8,UTF-16和UTF-32 Unicode字符标准对50多种国际语言进行模糊匹配.到目前为止,我们已经能够使用Levenshtein距离来检测德语Unicode扩展字符单词的拼写错误.
我们希望扩展这个系统来处理用Unicode表示的普通话中文表意文字.我们如何在相似的汉字之间进行Levenshtein距离计算?
假设我的数据库中有以下两个字符串:
(1) 'Levi Watkins Learning Center - Alabama State University'
(2) 'ETH Library'
Run Code Online (Sandbox Code Playgroud)
我的软件从数据源接收自由文本输入,它应该将这些自由文本与数据库中的预定义字符串(上面的那些)相匹配.
例如,如果软件获得字符串'Alabama University'
,它应该认识到这与(1)
它更相似(2)
.
起初,我想过使用像Levenshtein-Damerau或Trigrams这样众所周知的字符串度量,但这会导致不必要的结果,如下所示:
http://fuzzy-string.com/Compare/Transform.aspx?r=ETH+Library&q=Alabama+University
Difference to (1): 37
Difference to (2): 14
Run Code Online (Sandbox Code Playgroud)
(2)
获胜因为它比它短得多(1)
,即使(1)
包含搜索字符串的单词(Alabama
和University
).
我也尝试过Trigrams(使用Javascript库fuzzySet),但我在那里得到了类似的结果.
是否有一个字符串指标可以识别搜索字符串的相似性(1)
?
是否有一个编辑距离,如Levenshtein考虑到替换的距离?
举例来说,如果我们会考虑的话,如果是平等的,typo
并且tylo
是非常接近(p
并l
物理上靠近键盘上),而typo
与tyqo
相距甚远.我想为更可能的错别字分配更小的距离.
必须有一个指标考虑到这种主张吗?
我正在编写的核心数据应用程序存在一个小问题.我有两个不同的模型,上下文和持久的商店.一个用于我的应用数据,另一个用于具有相关信息的网站.
大多数情况下,我将我的应用程序中的一条记录与另一条源中的另一条记录完全匹配.然而,有时候,我必须回退到模糊字符串匹配以链接两个记录.我正在尝试匹配歌曲标题.我的本地标题可以是(编写)"The French Idealist is in your pensée"
,也可以是远程歌曲标题"01 - 10 - French idealist in in you're pensee, The (dub remix, feat. DJ Objective-C)"
我搜索堆栈溢出,谷歌,可可文档,我找不到任何关于如何在这些情况下进行模糊匹配的明确答案.我的字符串可以从任何东西开始,有一堆特殊字符,通常以随机或被忽略的字符结尾.
Regexp不会这样做,也不是NSPredicates,Soundex与外国名称不兼容,也许Levenshtein不够(或者它会不会?).
我正在寻找一组十几个潜在比赛中的冠军头衔,但我非常愿意做这个操作.100%准确度不是目标.
我想删除被忽略的单词,提取关键词(在这个例子中,"法语,理想主义者,pensée"),连接它们,然后使用Levenshtein距离(歌曲标题中的单词应该是相同的顺序).
在我的特殊情况下,它会起作用吗?关于这个问题的行业标准是什么(我不能成为世界上唯一想要匹配略有不同歌曲名称的人)Core Data,Cocoa或Objective-C可以帮助我吗?
非常感谢.
我正在使用Selenium来自动化网页功能测试.在我们推出新代码时,对我们进行逐像素比较非常重要,因此我们使用Selenium来截取屏幕截图并比较base64编码的字符串以查看是否有任何更改.
我们发现在实践中,很难获得完整的像素一致性,特别是对于图像.我希望将较小的模糊/渲染工件视为"通过"而不是"失败",所以我想知道是否有一种方法可以进行模糊比较以使我们的测试不那么脆弱.
我在考虑将base64字符串之间的Levenshtein距离作为一个起点,但我真的不知道这是一个好的方法,还是应该区分"在页面上移动的东西"和"渲染"的公差神器".任何想法/方法?
我正在尝试运行模拟来测试随机二进制字符串之间的平均Levenshtein距离.
我的程序是在python中,但我正在使用此C扩展.大部分时间相关的函数计算两个字符串之间的Levenshtein距离,就是这个.
lev_edit_distance(size_t len1, const lev_byte *string1,
size_t len2, const lev_byte *string2,
int xcost)
{
size_t i;
size_t *row; /* we only need to keep one row of costs */
size_t *end;
size_t half;
/* strip common prefix */
while (len1 > 0 && len2 > 0 && *string1 == *string2) {
len1--;
len2--;
string1++;
string2++;
}
/* strip common suffix */
while (len1 > 0 && len2 > 0 && string1[len1-1] == string2[len2-1]) {
len1--; …
Run Code Online (Sandbox Code Playgroud)