我知道这不是一个直截了当的问题,所以如果您需要我提供有关其范围的更多信息,请告诉我。有很多问题可以解决几乎相同的问题(它们在这里链接),但从来没有完全相同的问题具有相同的范围和目标 - 至少据我所知。
背景:
我需要将MP3与数据库同步。含义:
系统可以找到的示例:
在数据库中......
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" ?
等
我从这个/how-do-you-implement-a-did-you-mean读了一些文档,这不是我需要的,因为我不想检查整个字典。我也不能真正使用Web服务,因为它在很大程度上依赖于我在数据库中已有的东西。如果可能,我还想避免处理distances和其他complicated things。
我可以使用google api(或类似的东西)来执行此操作,这意味着脚本将尝试拼写检查并使用数据库对其进行测试,但我觉得可能有更好的解决方案,因为我的数据库可能会结束奇怪的歌曲和艺术家真的具体,使拼写检查毫无用处。
我还可以使用on this post Soundex尝试使用for c#解释的内容。
使用常规拼写检查功能无效,因为我不会使用单词而是使用名称和“标题”。
所以我的问题是:是否有相对这样做的简单方法,如果有,那是什么?
任何形式的帮助都将受到赞赏。
谢谢!
答案 0 :(得分:3)
你想要的是一个相似因素。基本上,你想比较你的输入(例如“迈克尔杰克逊”)和你的期望值(“迈克尔杰克逊”);如果您将某个非常高的相似度值与您的某个预期值进行比较,则可以询问用户。
这样做的一种方法是将期望值散列为完全打包的哈希表。如果你的哈希算法正确(是的,这是棘手的一点),每个输入将散列到最接近的期望值;一旦找到最接近的期望值,就可以对输入和期望值进行相似性评估;如果您超过某个阈值,请询问用户。
答案 1 :(得分:1)
一个相当简单但相对不准确的系统是比较字符串的字符,并测量用户字符串中不同/缺失/添加的字符数。如果字符数足够少(您可以尝试根据键距离[查找表]或某些情况来加权差异),那么询问用户它们是否意味着特定的给定字符串
答案 2 :(得分:1)
这是一项非常重要的任务。查看Wikipedia以获取有关处理此问题的算法的更多信息。你已经点击了soundex,但是你还在寻找其他的转换。
答案 3 :(得分:1)
这听起来非常类似于创建拼写检查程序,最好使用ternary search tree。该链接使用Java作为示例,但数据结构是重要的部分。数据结构的行为类似于具有McWafflestix提到的属性的Hash。