2011-04-15 48 views
4

讓我來舉個例子來解釋一下。 我們有以下文字:文本中的異常

「Comme Il Faut成立於1927年。這家菸草公司以其爲全球合作伙伴生產定製私人標籤品牌而聞名遐邇。

這是正常的文本。但是,下面的文字:

「於1927年CommeIlFautwasfounded生產全球customizedprivatelabelbrands foritspartners的菸草companyi最知名foritsreputation」

這是文本異常:錯別字,詞沒有空格,也許別的東西。

如何搜索這樣的異常?
這個(統計)有什麼算法?

希望結果是一個百分比:例如,80%的異常。

謝謝。

回答

1

構造一個Trie樹字典中的所有已知的話。 把你的文字中出現的每個單詞都試着在Trie樹中找到它。如果你沒有找到它,然後嘗試匹配長度-K的前綴。如果你找到一個匹配,那麼你對其餘的k個字符應用相同的程序。它是遞歸的,它可以捕捉兩個以上的連接詞

+0

謝謝。我會看到Trie。 – user348173 2011-04-15 13:23:46

+1

還有一點需要注意:有一種方法可以結合試驗和編輯距離。用一個正常的Trie,你可以搜索一個完美的匹配,即你不會輕易地找到拼寫錯誤的單詞。有一種算法可以很容易地匹配一個不匹配的樹上的序列。如果您需要,我可以在家爲您找到紙張。或者你可以看看[這個代碼](https://forge.ocamlcore.org/snippet/detail.php?type=snippet&id=9)(用一種函數式語言編寫)。 – LiKao 2011-04-18 07:49:18

0
+0

拼寫檢查程序在一個單詞(最多兩個)中運行良好。例如:「CommeIlFautwasfounded」,在這樣的條件下,他們不會幫助。 – user348173 2011-04-15 07:57:18

+0

@ user348173:是的,但它暗示你「CommeIlFautwasfounded」是一個未知的單詞,因此可能是錯誤的類型或更多單詞的連接......進一步的分析取決於你,即使我認爲這樣做很難做得比Word拼寫檢查器......可能是創建啓發式算法來分析錯誤,或者引入某種AI(好運)...... – digEmAll 2011-04-15 08:11:26

1

另一個簡單的方法是使用edit distance algorithm。該算法計算爲了將字符串轉換爲另一個字符串而必須執行的編輯操作(插入,刪除或替換)的最小數量。使用一些額外的邏輯,您可以輕鬆獲得該算法以輸出操作。

然而,這假設你有正確的和斷開的字符串。如果你只有斷絃,這會變得更加困難。在那種情況下,我建議你或者嘗試前面提到的trie方法,或者使用一些外部庫如ispell來處理這個邏輯。你可以看一下ispell的代碼或者它的變體來看看這樣的任務可能會有多複雜。