2012-11-03 63 views
0

我從日誌中提取例外,這裏是一個示例:比較字符串和比較他們如何密切配合

異常:System.InvalidOperationException:集合已修改;枚舉操作可能不會執行。 at System.Collections.Generic.List`1.Enumerator.MoveNextRare() at test.Modules.UI.Table。 <> C_ DisplayClass2.b _0() 在System.Win

有時日誌是在不同的語言,所以它看起來是這樣的:

異常:System.InvalidOperationException:拉COLECCION FUE修訂於,LA operacióndeenumeraciónno puede ejecutar。 at Test.Modules.UI.Table的System.Collections.Generic.List`1.Enumerator.MoveNextRare() 。 <> C_ DisplayClass2.b _0() 在System.Win

正如你可以看到只有該異常部分不同,因爲其在不同的語言,但之後的部分將是相同的。我有所有這些例外存儲在一個數據庫中,所有修剪長度爲300個字符,因爲通常長得多,但300個字符足以告訴是否存在相同或不存在

所以我想也許跳過例外,並比較接下來的300個字符,但它很難知道異常結束的地方,沒有任何具體的東西顯示異常的開始和結束。

任何想法,我可以克服這一點?也許我只是使用Levenshtein來突出顯示哪裏有近距離匹配,然後我可以過濾這些,也許設置一個接口,允許我連接異常,一旦我手動識別那裏有不同的語言寫在同一個異常?

我的最終目標是審查數以千計的這些日誌,看看有多少例外是相同的,大多數日誌是英語但可能有25%是非英語的,所以通常我可以運行一個查詢完全匹配異常,因爲異常部分的語言不同,可能只有60-70%的匹配。可能有極個別情況下的異常之後的部分是接近匹配到不同的異常,但是這將是難得這麼沒有太多關注

我需要做到這一點在PHP

+0

你確定所有異常都不以冒號結尾嗎? – Cups

回答

0

不是100%穩健,但是您可以根據第二個分號前的文本和文字之後的文字進行匹配。我打賭at這個詞後面跟着一個新行,所以+新行很可能不會出現在異常消息本身中(使它成爲分隔符的不錯選擇)。

我想你設計的任何方案,你想完全忽略異常信息。您不會找到語言之間的共同結構,因此允許將短信作爲匹配排名的一部分,只會削弱您匹配的信心。