2009-07-07 50 views
4

我知道這不是一個直接的問題,所以如果你需要我提供更多關於它的範圍的信息,請告訴我。有很多問題可以解決幾乎相同的問題(它們在這裏相互關聯),但從來沒有完全相同的問題,至少據我所知,它的範圍和目標是相同的。如何實現簡單的「你輸入的ACB,你的意思是ABC?」

語境:

  • 我有ID3標籤爲 藝術家名字和歌曲標題的MP3文件。
  • 我使用ASP.NET + C#和MSSQL數據庫的兩個表藝術家和歌曲
  • ID3標籤可能會稍微偏離(如Mikaell Jacksonne)

我需要將MP3與數據庫同步。含義:

  1. 用戶啓動腳本
  2. 腳本通過所有的MP3音樂
  3. 腳本稱瀏覽 「是'Mikaell Jacksonne '邁克爾·傑克遜' YES/NO
  4. 用戶首選,我們重新開始

什麼樣的系統可以找到例子:

在數據庫...

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,使用Soundexfor c#

使用常規拼寫檢查器將不起作用,因爲我不會使用單詞,而是名稱和「標題」。


所以我的問題是:是否有這樣做的相對簡單的方法,如果是這樣,是什麼呢?

任何形式的幫助,將不勝感激。

謝謝!

+4

您正在尋找一個複雜問題的簡單答案。鑑於你列出的限制,我懷疑你會找到答案。 – 2009-07-07 17:42:36

+0

我也懷疑,但是誰知道...... – marcgg 2009-07-07 17:46:15

回答

3

你想要的是一個相似性因素。基本上,你想比較你的輸入(例如「Micheal Jackson」)和你的期望值(「Michael Jackson」);如果您對某個預期值得到非常高的相似度值,則可以詢問用戶。

這樣做的一種方法是將期望值散列到完全壓縮的散列表中。如果你的散列算法正確(是的,這是棘手的一點),每個輸入將哈希到最接近的期望值;一旦找到最接近的期望值,就可以對輸入和期望值進行相似性評估;如果你超過一定的門檻,詢問用戶。

+0

我沒有想到哈希,但這是真的,非常聰明!你有指向哪裏尋找這樣的哈希算法? – marcgg 2009-07-07 17:45:35

1

一個相當簡單但相對不準確的系統是比較字符串的字符,並測量用戶字符串中不同/缺失/添加的字符數。如果字符數足夠少(您可以嘗試根據關鍵距離[查找表]或其他)加權差異,然後詢問用戶是否意味着特定給定的字符串。

1

這是一項非平凡的任務。查看Wikipedia瞭解更多關於算法的信息。你已經擊中了soundex,但是你在這裏尋找其他的轉換。

1

這聽起來與創建拼寫檢查器非常相似,最好用ternary search tree完成。鏈接使用Java作爲示例,但數據結構是重要部分。數據結構像McWafflestix提到的屬性一樣表現爲Hash。

相關問題