2013-08-22 50 views
0

我有一些字符串,我想要一個度量它們的相似度,但不同於字符串編輯距離,例如基於結構相似性而不是字母相似性。如何計算基於結構的字符串相似度?

例如:312164和48479應該得到非常高的分數,因爲它們只是數字並且具有相同的長度。對於Bla blubb和bla bloob blo應該是相同的,因爲它們只包含字母並且在兩者之間有間隙。 較少的分數應該適用於像蘋果和app3這樣的情侶,即使他們分享了一些字母,但具有不同的結構。

這樣的事......有人有線索嗎?在Java中,如果可能的話。

謝謝!

+0

這是一個非常具體的要求。您需要記住使用哪些字符,按照什麼順序,以及它們是什麼類型,字母,數字,其他($,!,#,_等)。 –

+0

StringUtils.getLevenshteinDistance() - http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#getLevenshteinDistance(java.lang.CharSequence,java .lang.CharSequence)? – cjstehno

回答

1

定義並以相似度對它們進行評分。

實施例的字符串:

香蕉

橙123

香蕉234

長度= X點,其中x是長度

相同的字符= 1點(A!=一)

爲相似字符相同的位置= 2分

扣除點所特有的每個字符串

例如字符比較香蕉與Orange

長度= 6個點(兩者都是6在長度)

對於 'A'= 1分(兩者都有一個)。如果兩者都有兩個a,我們會給2分。如果'a'在兩個字符串中處於相同位置,我們會再給出2分。

對於 'N'= 1點

總積極點:8

1爲乙因爲橙沒有乙

2 '一個',因爲香蕉具有3 a's

1 for'n'因爲香蕉有2個n's

1對於O-

1對於r

1克

1爲電子

總減去:8

總加點 - 總減分= 0

這只是一個粗略的邏輯,但你可以從它。

+0

謝謝!我在想類似,但也許有一個更一般的方法?再次感謝 – maggu

+0

@maggu你的情況是一個特定的情況,我不知道任何一般的方法。 –

+0

好的。非常感謝你! – maggu