Attribute VB_Name = "Module5" Function SimilarityNGramJaccard(s1 As String, s2 As String, n As Integer) As Double Dim set1 As Object Set set1 = CreateObject("Scripting.Dictionary") Dim set2 As Object Set set2 = CreateObject("Scripting.Dictionary") Dim i As Integer Dim ngram1 As String Dim ngram2 As String ' Create n-grams from string 1 For i = 1 To Len(s1) - n + 1 ngram1 = Mid(s1, i, n) set1(ngram1) = 1 Next i ' Create n-grams from string 2 For i = 1 To Len(s2) - n + 1 ngram2 = Mid(s2, i, n) set2(ngram2) = 1 Next i ' Calculate the size of the intersection of the n-gram sets Dim intersectionSize As Integer intersectionSize = 0 For Each Key In set1.Keys If set2.Exists(Key) Then intersectionSize = intersectionSize + 1 End If Next Key ' Calculate the n-gram similarity Dim similarity As Double If set1.Count + set2.Count = 0 Then similarity = 1 Else similarity = intersectionSize / (set1.Count + set2.Count - intersectionSize) End If SimilarityNGramJaccard = similarity End Function