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

2024-02-28

我用头撞墙有一段时间了,现在正在尝试不同的技术。

它们都工作得不好。

我有两根弦。

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

IE。 “四分和七年前” TO “对于分数和七年前”

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

(“四”“为”,即使它很接近)

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

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

有什么想法或方向吗?

Code

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)

Edit:我一直在做一些研究,我想我最初找到了来自here http://www.codeproject.com/Articles/11157/An-improvement-on-capturing-similarity-between-str并在几年前将其翻译成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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 vb.net 比较字符串的百分比匹配? 的相关文章

随机推荐

  • 在 C++ 中获取集合的并集、交集或差集

    我有几个关于如何使用 C 集 std set 的问题 有没有办法获得两个 C 集合的并集 交集或差集 编写自己的函数来做到这一点非常容易 但我想知道是否有内置函数 C 集合可以用作映射中的键吗 Use the set difference
  • 在pyside中设置应用程序名称

    我在 Windows 8 和 Qt 5 下使用 Qt Creator Designer 创建了一个应用程序 它开始如下 class Ui MainWindow object def setupUi self MainWindow MainW
  • 是否可以触发/绑定 jQuery UI 事件? [复制]

    这个问题在这里已经有答案了 可能的重复 jQuery AutoComplete 触发更改事件 https stackoverflow com questions 6431459 jquery autocomplete trigger cha
  • 按钮禁用和启用

    我有一个基于 vb net 的 Windows 应用程序 当单击 GO 按钮时 一堆数据将加载到数据库中 因此 在我的应用程序中 一旦单击 GO 按钮 我只想禁用它 并希望在上传完成后重新启用它 现在 在 btnGo Click 的特定方法
  • 如何在Java字符串中输入引号?

    我想在Java中初始化一个字符串 但是该字符串需要包含引号 例如 ROM 我尝试这样做 String value ROM 但这行不通 我怎样才能包括 s 在字符串中 在 Java 中 您可以使用转义引号 String value ROM
  • 使用 PHP 创建加密的 zip 存档

    我正在寻找一种将 txt 文件加密为 zip 的方法 但采用安全密码保护的方式 我的目标是通过电子邮件将此文件发送给我 而任何人都无法阅读附件的内容 有谁知道一种简单且最重要的是安全的方法来实现这一目标 我可以创建 zip 存档 但我不知道
  • 从命令行激活 gcloud 服务帐号时出错

    我指的是这个网址https cloud google com speech docs getting started https cloud google com speech docs getting started开始使用 google
  • Vue 不是构造函数

    I using webpack 在 chrome 中构建并运行后显示此错误 我不知道如何解决它 我的代码很简单 devDependencies babel core 6 23 1 babel loader 6 3 2 babel plugi
  • 将 XML 注释添加到 LINQ to SQL 设计器生成的类属性

    我使用 Visual Studio 中的 LINQ to SQL 设计器来创建数据库的对象模型 现在 我想向每个生成的属性添加 XML 注释 但我不知道如何在下次刷新 dbml 文件时不删除属性的情况下执行此操作 如何才能做到这一点 我相信
  • 无法从本地主机访问 Django

    这有点奇怪 我无法从本地主机访问 django 但我可以从本地 IP 访问它 python manage py runserver 0 0 0 0 8000 然后当我尝试访问时 我的主机文件 127 0 0 1 lmlicenses wip
  • -bash: ./configure: 没有这样的文件或目录 - MySQL 在 Mac OS X 10.6 上安装

    我正在尝试在 Mac OS X 10 6 上安装 MySQL 下载 MySQL 并使用 tar xzvf mysql 5 1 37 tar gz 解压后 我尝试运行此配置行 configure prefix usr local mysql
  • 使用 popen() 调用 shell 命令?

    当通过 xcode 运行以下代码时 我得到不一致的行为 有时它会正确打印 git 版本 有时它不会打印任何内容 但 shell 命令的返回码始终为 0 关于为什么会这样的任何想法吗 我究竟做错了什么 define BUFFER SIZE 2
  • UIRefreshController 结束动画问题

    当我呼唤self refreshControl endRefreshing 它将 tableView 像它应该的那样恢复到原来的位置 我应该如何对其进行动画处理 以便它能够流畅地返回到原来的位置endRefreshing Try this
  • UINavigationBar - 更改 UIBarButtonItem 位置

    我在我的应用程序中使用 UINavigationController 及其栏 现在我想更改 leftBarButtonItem 和 rightBarButtonItem 的位置 我希望它们位于不同的 x 和 y 位置 具有自定义的宽度和高度
  • 如何选择Eclipse界面语言?

    我安装了 Flash Builder Burrito 版本并将其添加为dropin到我的日食 现在所有的 Eclipse 界面都是法语的 我真诚地热爱我的国家 但是D boguer and 世代相传真的没有那么性感Debug and 构建路
  • 查一下X509Certificate2是否被撤销?

    我怎样才能知道是否X509Certificate2已被撤销 我假设Verify 方法检查它 但它没有在帮助中明确说明 有人知道吗 另外 Verify 是否检查证书是否过期 您是否尝试过使用X509链条 http msdn microsoft
  • 如何找到 Phabricator 对象的 PHID?

    我需要在 Phabricator 安装中获取一个项目和多个用户的 PHID 看来找出如何做到这一点应该是微不足道的 但我搜索了文档却无济于事 我是不是找错地方了还是怎么的 最简单的方法 前往项目 单击新建任务 查看 URL 它会有一个参数
  • C++ 中的 const 运算符重载问题

    我在使用 const 版本重载 operator 时遇到问题 include
  • C函数判断IP地址是否为多播地址

    如果用户输入一些IP地址 例如 239 4 4 4 我如何使用linux C中可用的任何函数确定该IP地址是多播的 IPv4 多播地址由最高有效位定义1110 so 如果IP地址存储为32位unsigned变量 应用 gt gt 28到变量
  • 如何使用 vb.net 比较字符串的百分比匹配?

    我用头撞墙有一段时间了 现在正在尝试不同的技术 它们都工作得不好 我有两根弦 我需要比较它们并获得准确的匹配百分比 IE 四分和七年前 TO 对于分数和七年前 好吧 我首先将每个单词与每个单词进行比较 跟踪每个命中 然后百分比 count