我有两个字幕文件。 我需要一个函数来判断它们是代表相同的文本,还是类似的文本
有时会在一个文件中发表评论,例如“风正在吹......音乐正在播放”。 但80%的内容都是一样的。该函数必须返回TRUE(文件代表相同的文本)。 有时会出现像1而不是l(one-L)这样的拼写错误: 她只有行李。 当然,这意味着函数必须返回TRUE。
我的评论:
该函数应返回文本相似度的百分比 - 同意
“所有人都很开心”和“所有人都不开心” - 这里被认为是拼写错误,因此被视为同一文本。确切地说,函数返回的百分比将更低,但足够高以表示短语相似
考虑是否要在整个文件或搜索字符串上应用Levenshtein - 不确定Levenshtein,但算法必须作为一个整体应用于文件。不过,这将是一个很长的字符串。
答案 0 :(得分:11)
Levenshtein算法:http://en.wikipedia.org/wiki/Levenshtein_distance
除零结果之外的任何内容都意味着文本不是“相同”。 “相似”衡量它们的距离/附近。结果是一个整数。
答案 1 :(得分:5)
对于您所描述的问题(即编写大字符串),您可以使用Cosine Similarity,它基于term frequency返回0(完全不同)到1(相同)之间的数字载体
您可能希望查看此处描述的几个实现:Cosine Similarity
答案 2 :(得分:2)
看看approximate grep。它可能会给你指点,虽然它几乎肯定会像你所说的那样在大块文本上表现糟糕。
编辑:agrep的原始版本不是开源的,因此您可能会从http://en.wikipedia.org/wiki/Agrep获得OSS版本的链接
答案 3 :(得分:2)
你在这里期待太多,看起来你必须为你的特定需求编写一个函数。我建议从现有的文件比较应用程序开始(也许diff已经拥有了你需要的一切)并改进它以便为你的输入提供良好的结果。
答案 4 :(得分:1)
Levenshtein距离有许多替代方案。例如Jaro-Winkler distance。
这种算法的选择取决于语言,单词类型,人类输入的单词等等......
Here you find a helpful implementation of several algorithms within one library