Nlp 如何实现一个简单的;您键入的是ACB,是指ABC吗?”;

Nlp 如何实现一个简单的;您键入的是ACB,是指ABC吗?”;,nlp,spell-checking,Nlp,Spell Checking,我知道这不是一个直截了当的问题,所以如果你需要我提供更多关于它范围的信息,请告诉我。有一堆问题几乎涉及同一个问题(它们在这里链接),但从来没有完全相同的一个问题具有相同的范围和目标-至少据我所知 上下文: 我有一个带ID3标签的MP3文件 艺术家姓名和歌曲名称 我有两张桌子和两首歌 ID3标签可能稍有脱落(如Mikaell Jacksonne) 我正在使用ASP.NET+C#和MSSQL数据库 我需要将MP3与数据库同步。意思是: 用户启动一个脚本 剧本浏览了所有的MP3 剧本上写着“是‘迈

我知道这不是一个直截了当的问题,所以如果你需要我提供更多关于它范围的信息,请告诉我。有一堆问题几乎涉及同一个问题(它们在这里链接),但从来没有完全相同的一个问题具有相同的范围和目标-至少据我所知

上下文:

  • 我有一个带ID3标签的MP3文件 艺术家姓名和歌曲名称
  • 我有两张桌子和两首歌
  • ID3标签可能稍有脱落(如Mikaell Jacksonne)
  • 我正在使用ASP.NET+C#和MSSQL数据库
我需要将MP3与数据库同步。意思是:

  • 用户启动一个脚本
  • 剧本浏览了所有的MP3
  • 剧本上写着“是‘迈克尔·杰克逊’还是‘迈克尔·杰克逊’是/否”
  • 用户选择,我们重新开始
  • 系统可以找到的示例:

    在数据库中

    输出

    等等

    我从中阅读了一些文档,但这并不是我所需要的,因为我不想检查整本词典。我也不能真正使用web服务,因为它在很大程度上取决于我数据库中已有的内容。如果可能的话,我也希望避免和其他人打交道


    我可以使用(或类似的东西)来实现这一点,这意味着脚本将尝试拼写检查并使用数据库进行测试,但我觉得可能有更好的解决方案,因为我的数据库可能最终会针对奇怪的歌曲和艺术家,这使得拼写检查毫无用处

    我也可以尝试一些类似于已经解释过的东西,使用

    使用常规的拼写检查器是行不通的,因为我不会使用单词,而是使用姓名和“头衔”


    所以我的问题是:有没有一种相对简单的方法可以做到这一点,如果有,是什么

    任何形式的帮助都将不胜感激


    谢谢

    您需要的是相似性因子。本质上,您希望将您的输入(“例如,Micheal Jackson”)与您的期望值(“Michael Jackson”)进行比较;如果您的某个期望值的相似度值非常高,您可以询问用户


    一种方法是将期望值散列到一个完全压缩的哈希表中。如果你的散列算法正确(是的,这是一个棘手的问题),每个输入将散列到最接近的期望值;一旦找到最接近的期望值,就可以对输入和该期望值进行相似性评估;如果超过某个阈值,请询问用户。

    一个相当简单但相对不准确的系统是比较字符串的字符,并测量用户字符串中不同/缺失/添加的字符数。如果字符数足够少(您可以尝试根据键距离[lookup table]或类似的方式对差异进行加权),然后询问用户它们是否表示特定的给定字符串这是一项非常重要的任务。查看有关处理此问题的算法的更多信息。您已经点击了soundex,但是这里还有其他的转换,您正在寻找。

    这听起来非常类似于创建拼写检查器,最好使用一个。链接使用Java作为示例,但数据结构是重要部分。数据结构的行为就像一个散列,具有McWafflestix提到的属性。

    您正在寻找一个复杂问题的简单答案。考虑到您列出的限制条件,我怀疑您是否能找到答案。我也怀疑,但谁知道呢……我没有想到散列,但这是真的,而且非常聪明!你有在哪里寻找这种散列算法的指针吗?@margg:你可以试试谷歌的散列算法;但是,您可能需要为预期的数据集进行大量定制。我脑子里想不出有什么好的推荐信,这可能是最后的办法。也就是说,我试着查找精确的匹配,然后是其他可能更精确的东西,然后是这个。我相信会有大约30%的比赛,也许更少,但这仍然是一个有趣的想法,谢谢!这里最大的障碍是如何比较字符,因为“ABCDE”应该只与“ACDE”相隔一个字符,而不是我的一次老尝试所给出的4个字符(你能找出原因吗?)之所以这样做是因为你在测试字母的确切位置。我猜做“同一个字母同一个位置:+10,同一个字母不同的位置:+1”这样的组合可以让事情变得更加健壮。或者没有。是的,当我浏览字符串时,我没有检查是否添加或删除了字母。当然,您无法真正判断用户可能会被删除多少封信。
    SONGS = {"This is a great song title", "This is a song title"}
    ARTISTS = {"Michael Jackson"}
    
    "This is a grt song title" did you mean "This is a great song title" ?
    "This is song title" did you mean "This is a song title" ?
    "This si a song title"  did you mean "This is a song title" ?
    "This si song a title"  did you mean "This is a song title" ?
    "Jackson, Michael" did you mean "Michael Jackson" ?
    "JacksonMichael" did you mean "Michael Jackson" ?
    "Michael Jacksno" did you mean "Michael Jackson" ?