python - 在文件中突出但不完全重复的行

标签 python algorithm unix grep nlp

我正在梳理 Web 应用程序的日志文件以寻找突出的语句。

大部分台词都是相似且无趣的。我会通过 Unix uniq 传递它们,但是这不会过滤任何东西,因为所有行都略有不同:它们都有不同的时间戳,类似的语句可能会打印不同的用户 ID,等等。

有什么方法和/或工具可以只获取与其他任何明显不同的线条? (但是,同样,不是精确的重复)

我正在考虑使用 Python 的 difflib但这似乎是为了区分两个文件,而不是同一文件中的所有行。

[编辑]

我假设该解决方案会为每一行给出唯一性分数。因此,我的意思是“显着不同”,我选择了一个阈值,唯一性分数必须超过该阈值才能将任何行包含在输出中。

在此基础上,如果还有其他可行的定义方式,欢迎讨论。此外,该方法不必具有 100% 的准确率和召回率。

[/编辑]

例子:

我更喜欢尽可能通用的答案。我知道我可以去掉开头的时间戳。剥离结尾更具挑战性,因为它的语言可能与文件中的任何其他内容完全不同。这些细节是我之前回避具体示例的原因,但因为有些人问...

类似 1:

2009-04-20 00:03:57 INFO  com.foo.Bar - URL:/graph?id=1234
2009-04-20 00:04:02 INFO  com.foo.Bar - URL:/graph?id=asdfghjk

类似 2:

2009-04-20 00:05:59 INFO  com.baz.abc.Accessor - Cache /path/to/some/dir hits: 3466 / 16534, 0.102818% misses
2009-04-20 00:06:00 INFO  com.baz.abc.Accessor - Cache /path/to/some/different/dir hits: 4352685 / 271315, 0.004423% misses

不同点 1:

2009-04-20 00:03:57 INFO  com.foo.Bar - URL:/graph?id=1234
2009-04-20 00:05:59 INFO  com.baz.abc.Accessor - Cache /path/to/some/dir hits: 3466 / 16534, 0.102818% misses

在 Different 1 的情况下,我希望返回这两行而不是其他类似的行。换句话说,这两条线是不同的类型(然后我可以稍后只要求统计上罕见的线类型)。一方面,两者之间的编辑距离要大得多。

最佳答案

定义“显着不同”。那就看看"edit distance" measures .

关于python - 在文件中突出但不完全重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769775/

相关文章:

python - 使用 phatomJS 和 selenium 滚动浏览网站

python - Windows下获取系统信息(CPU速度-总RAM-显卡型号等)

python - 如何将 python 2.7 中的 bytearray 转换为十进制字符串?

java - 从 Java 运行 unix 命令 - 身份验证失败

python - 清除 bytearray 的正确 python 方法

algorithm - 为什么我们不在链表上使用快速排序?

algorithm - 均匀距离生成树的优缺点

java - 在java中找到一个质数

linux - unix find without sort 逆向打印结果

c - unix 进程 ID 的基数是 10 吗?