如何实现一个简单的“你输入了 ACB,你的意思是 ABC?”

mar*_*cgg 5 nlp spell-checking

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

语境:

  • 我有一个带有 ID3 标签的 MP3 文件,用于艺术家姓名和歌曲标题。
  • 我有两张表 Artists 和 Songs
  • ID3 标签可能略有偏差(例如 Mikaell Jacksonne)
  • 我正在使用 ASP.NET + C# 和 MSSQL 数据库

我需要将 MP3 与数据库同步。意义:

  1. 用户启动脚本
  2. 该脚本浏览所有 MP3
  3. 剧本上写着“是‘米凯尔·杰克逊’‘迈克尔·杰克逊’是/否
  4. 用户选择,我们重新开始

系统可以找到的示例:

在数据库...

SONGS = {"This is a great song title", "This is a song title"}
ARTISTS = {"Michael Jackson"}
Run Code Online (Sandbox Code Playgroud)

输出...

"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" ?
Run Code Online (Sandbox Code Playgroud)

等等。

我从这个/how-do-you-implement-a-did-you-mean 中阅读了一些文档,这并不是我所需要的,因为我不想检查整个字典。我也无法真正使用 Web 服务,因为它在很大程度上取决于我的数据库中已有的内容。如果可能的话,我也想避免处理距离和其他复杂的事情


我可以使用google api(或类似的东西)来做到这一点,这意味着脚本将尝试拼写检查并使用数据库进行测试,但我觉得可能有更好的解决方案,因为我的数据库最终可能会变得非常具体歌曲和艺术家,使拼写检查无用。

我也可以尝试类似这篇文章中解释的内容,使用Soundex for c#

使用普通的拼写检查器是行不通的,因为我不会使用单词,而是使用名称和“标题”。


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

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

谢谢!

Pau*_*ier 3

你想要的是相似度。本质上,您想要将您的输入(例如“Michael Jackson”)与您的预期值(“Michael Jackson”)进行比较;如果您对某个预期值的相似度值非常高,则可以询问用户。

实现此目的的一种方法是将期望值散列到完全打包的散列表中。如果你的哈希算法正确(是的,这是棘手的一点),每个输入都会哈希到最接近的期望值;一旦找到最接近的期望值,您就可以针对输入和该期望值运行相似性评估;如果超过某个阈值,请询问用户。