2017-07-11 60 views
0

我有一大堆由硬件設計模擬生成的錯誤消息。這些消息中只有極少的語法或語言概念。沒有明確定義的語法。這些消息可能包含數學表達式(在模擬中引發錯誤),發生錯誤的時間,以及隨機符號(如@,:,[,],(,)(取決於設計作者感覺如何顯示!)。消息中不需要空格,並且不需要空格。在Python中創建錯誤消息的集羣

我想對這組消息應用一個算法,可以將這些消息歸入包含類似消息的存儲桶中,以便我可以輕鬆識別出現的錯誤類型。

我讀了關於使用Levenshtein距離或餘弦相似來找出字符串之間的距離;然後使用k-means聚類。我也讀過關於word2vec和類似的圖書館。但是我覺得他們在更結構化的類似英語的輸入數據上工作得最好?

對我來說推薦的方法是什麼?當然,我會先對數據進行大量的預處理(比如用空格替換所有隨機符號,將多個空格合併成一個等等),但是在消息中我仍然沒有有意義的單詞。

+1

絕對不是word2vec,但你試過Levenshtein + k-means?有一個包,聽起來可以工作:https://pypi.python.org/pypi/python-Levenshtein –

回答

1

我能夠使用dbscan algorithm from sklearn與度量Levenshtein距離(使用python-Levenshtein包)。

k-means無法使用,因爲它需要相對於原點(歐幾里德距離)的距離,並且dbscan可以採用集合中的項目之間的相對距離進行聚類。

我還做了一些預處理,從錯誤消息中提取出已知字符串以在創建羣集之前清理消息。

謝謝你的指針Josep。