文本相似度算法

我有两个字幕文件。 我需要一个函数来告诉它们是代表相同的文本还是相似的文本

有时只有一个文件中有“风正在吹……音乐在播放”这样的评论。 但80%的内容都是一样的。 该函数必须返回TRUE(文件表示相同的文本)。 有时会出现像1这样的拼写错误,而不是l(1-L),就像这里一样: 她只有行李 。 当然,这意味着函数必须返回TRUE。

我的意见:
该函数应返回文本相似度的百分比 – 同意

“所有人都很开心”和“所有人都不高兴” – 这里被认为是拼写错误,因此被视为同一文本。 确切地说,函数返回的百分比将更低,但足够高以表示短语是相似的

请考虑是否要在整个文件或搜索字符串上应用Levenshtein – 不确定Levenshtein,但算法必须作为一个整体应用于文件。 不过,这将是一个很长的字符串。

Levenshtein算法: http : //en.wikipedia.org/wiki/Levenshtein_distance

除零结果之外的任何内容都意味着文本不是“相同”。 “相似”衡量它们的距离/附近。 结果是一个整数。

对于您所描述的问题(即编译大字符串),您可以使用余弦相似度 ,它根据术语频率向量返回0(完全不同)到1(相同)之间的数字。

您可能希望查看此处描述的几个实现: Cosine Similarity

你在这里期待太多,看起来你必须为你的特定需求编写一个函数。 我建议从现有的文件比较应用程序开始(也许diff已经拥有你需要的一切)并改进它以便为你的输入提供良好的结果。

看看近似的grep 。 它可能会给你指点,虽然它几乎肯定会像你所说的那样在大块文本上表现糟糕。

编辑:agrep的原始版本不是开源的,因此您可以从http://en.wikipedia.org/wiki/Agrep获取OSS版本的链接

Levenshtein距离有很多选择。 例如Jaro-Winkler距离 。

这种算法的选择取决于语言,单词的类型,人类输入的单词等等……

在这里,您可以在一个库中找到有用的多种算法实现