2010-02-24 81 views
13

我有两个字幕文件。 我需要告诉他们是否代表相同的文字,或相似文本文字相似度算法

有时也有像“风在吹......正在播放的音乐”只在一个文件中注释的功能。 但是,80%的内容将是相同的。该函数必须返回TRUE(文件表示相同的文本)。 有时还有像1这样的拼写错误,而不是l(one-L),如下所示: 她1eft的行李。 当然,这意味着函数必须返回TRUE。

我的评论:
函数应该返回文本的相似度的百分比 - 同意

“所有的人都幸福”和“所有的人都不会快乐” - 在这里,会被视为拼写错误,所以这将被视为相同的文字。确切地说,函数返回的百分比将会更低,但足够高以说明这些短语是相似的

请考虑您是要将Levenshtein应用于整个文件还是仅仅搜索字符串 - 对于Levenshtein不确定,但该算法必须作为一个整体应用于文件。不过,这将是一个非常长的字符串。

+2

函数应该返回文本的相似度的百分比您决定TRUE或FALSE的阈值。 – YOU 2010-02-24 11:37:56

+0

您需要非常仔细地考虑您的相似性标准,我认为这可能是您尝试执行的最难的部分。例如“所有的人都很开心”和“所有的人都不开心”在语义上是相似的,但在意义上完全相反。类似和不相似的文本的一些例子可能会有所帮助。 – glenatron 2010-02-24 11:46:34

+1

查看Soundex(http://en.wikipedia.org/wiki/Soundex),看看你是否在寻找。 – 2010-02-24 11:59:54

回答

11

Levenshtein算法:大于零的结果的其它http://en.wikipedia.org/wiki/Levenshtein_distance

任何意味着文本不是“相同的”。 “相似”是衡量它们到底有多远。结果是一个整数。

+2

+1:整数结果需要进行归一化以确定整个文件的相似性。例如。相似度= Levenshtein Distance/Num。字符。我还建议在应用此算法之前预处理文件以纠正拼写错误。 – Adamski 2010-02-24 11:48:09

+0

在Apache Commons'StringUtils'中有一个Levenshtein距离的实现:http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringUtils.html#getLevenshteinDistance(java.lang。 String,java.lang.String) – 2010-02-24 11:56:54

+2

@Fabian:这是PHP中的内建函数:http://php.net/manual/en/function.levenshtein.php – soulmerge 2010-02-24 13:16:27

2

你期望过高这里,它看起来像你必须写一个函数您的特定需求。我建议从现有的文件比较应用程序开始(可能diff已经拥有您需要的所有内容)并对其进行改进,以便为您的输入提供良好结果。

+0

,或者使用已知字体大小(和面)呈现文本,然后比较像素。这样,具有相似形状的符号可以看起来相似,并且更容易检测到。 – Chii 2010-02-24 11:42:02

+0

@Chii,但更大的符号转移页面的其余部分将抛出一切。 – 2010-02-24 11:45:28

+0

我不认为这个问题与OCR有什么关系,只是纯文本 – stillstanding 2010-02-24 12:16:02