2017-07-11 20 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。