gpt4 book ai didi

vb.net - 如何使用 vb.net 比较字符串的百分比匹配?

转载 作者:行者123 更新时间:2023-12-01 10:39:40 25 4
gpt4 key购买 nike

我现在正在尝试不同的技术。

没有一个运行良好。

我有两个字符串。

我需要比较它们并获得准确的匹配百分比,

即。 "四分七年前"TO "for scor and sevn yeres ago"

嗯,我首先将每个单词与每个单词进行比较,跟踪每个命中,然后百分比 = count\numOfWords。不,没有考虑拼写错误的单词。

("four"<> "for"即使它很接近)

然后我开始尝试比较每个字符中的每个字符,如果不匹配则递增字符串 char(以计算拼写错误)。但是,我会得到错误的命中,因为第一个字符串可以在第二个中包含每个字符,但不是第二个的确切顺序。 (“stuffavail”<>“stu vail”(但它会这样回来,百分比很低,但很成功。9\11 = 81%))

所以,然后我尝试比较每个字符串中的字符对。如果 string1[i] = string2[k] AND string1[i+1] = string2[k+1],则增加计数,并在不匹配时增加“k”(以跟踪拼写错误。“for”和“四”应该以 75% 的命中率返回。)这似乎也不起作用。它越来越接近,但即使完全匹配,它也只能返回 94%。然后当某些东西真的拼写错误时,它就真的搞砸了。 (代码在底部)

有什么想法或方向吗?

代码

count = 0
j = 0
k = 0
While j < strTempName.Length - 2 And k < strTempFile.Length - 2
' To ignore non letters or digits '
If Not strTempName(j).IsLetter(strTempName(j)) Then
j += 1
End If

' To ignore non letters or digits '
If Not strTempFile(k).IsLetter(strTempFile(k)) Then
k += 1
End If

' compare pair of chars '
While (strTempName(j) <> strTempFile(k) And _
strTempName(j + 1) <> strTempFile(k + 1) And _
k < strTempFile.Length - 2)
k += 1
End While
count += 1
j += 1
k += 1

End While

perc = count / (strTempName.Length - 1)

最佳答案

编辑:我一直在做一些研究,我想我最初是从 here 中找到代码的并在几年前将其翻译成 vbnet。它使用 Levenshtein 字符串匹配算法。

这是我使用的代码,希望对您有所帮助:

Sub Main()
Dim string1 As String = "four score and seven years ago"
Dim string2 As String = "for scor and sevn yeres ago"
Dim similarity As Single =
GetSimilarity(string1, string2)
' RESULT : 0.8
End Sub

Public Function GetSimilarity(string1 As String, string2 As String) As Single
Dim dis As Single = ComputeDistance(string1, string2)
Dim maxLen As Single = string1.Length
If maxLen < string2.Length Then
maxLen = string2.Length
End If
If maxLen = 0.0F Then
Return 1.0F
Else
Return 1.0F - dis / maxLen
End If
End Function

Private Function ComputeDistance(s As String, t As String) As Integer
Dim n As Integer = s.Length
Dim m As Integer = t.Length
Dim distance As Integer(,) = New Integer(n, m) {}
' matrix
Dim cost As Integer = 0
If n = 0 Then
Return m
End If
If m = 0 Then
Return n
End If
'init1

Dim i As Integer = 0
While i <= n
distance(i, 0) = System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
Dim j As Integer = 0
While j <= m
distance(0, j) = System.Math.Max(System.Threading.Interlocked.Increment(j), j - 1)
End While
'find min distance

For i = 1 To n
For j = 1 To m
cost = (If(t.Substring(j - 1, 1) = s.Substring(i - 1, 1), 0, 1))
distance(i, j) = Math.Min(distance(i - 1, j) + 1, Math.Min(distance(i, j - 1) + 1, distance(i - 1, j - 1) + cost))
Next
Next
Return distance(n, m)
End Function

关于vb.net - 如何使用 vb.net 比较字符串的百分比匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com