【问题标题】:hashing strings散列字符串
【发布时间】:2011-09-30 16:29:44
【问题描述】:

我有流式字符串(包含单词和数字的文本)。

一次一行的流式传输字符串,我想为它们分配一个唯一的值。

示例可能是:带有分数/哈希的字符串

  User1 logged in Comp1 port8087       1109      
  User2 logged in comp2                1135
  user3 logged in port8080             1098
  user1 logged in comp2 port8080       1178       

这些字符串应该在同一个簇中。为此,我认为映射(散列的错误类型)字符串,以便字符串中的微小变化不会对分数产生太大影响。

一种简单的方法可能是:使用 UliCp8Ulic ....(即每个句子的第一个字母)并找到某种评分方法。之后,相似的得分字符串被保存在同一个桶中,然后对它们进行分组。

改进的方法是:让我们不要取出字符串中每个单词的第一个单词,而是找到一些方法来获取单词的代表值,这样字符串表示可能非常适合与我提到的 score/hash 进行映射.

考虑到 Levenstein 距离或 jaccard_index 或一些相似距离度量,它们都需要输入字符串进行比较。是否有任何方法可以在不进行比较的情况下对字符串进行哈希/评分。(POS标记,比较对于我的目的来说看起来效率不高,因为数据是流式的,数量庞大,非结构化)

希望您了解我想要实现的目标,并请帮助我。忘记下面的cmets,让我们重新启动。

【问题讨论】:

  • 你为什么要这样做?您应该始终解释您的最终目标,而不仅仅是您遇到问题的步骤。
  • 对于这样一个模糊的家庭作业问题的答案是如此有用,令人惊讶
  • 好吧..最终目标是对字符串消息进行聚类,识别它们的模式..例如:“my name is jared”和“my name is dour”是字符串。有很多这样的字符串。用适当的(一组)整数映射字符串,使得句子的哈希值应该彼此接近。我们可以开发(或使用任何现有的想法,如果有的话)一些算法来散列字符串,以便将相似的字符串保存在同一个桶中。然后,有办法找出桶的模式。在我们的例子中,“我的名字是 *”是项目应该输出的必需模式。
  • 我想我已经对你说清楚了。该项目的主要目的是开发“事件日志分类器”。可能是我无法解释我的问题,但我认为这是最需要研究的领域之一,特别是在考虑网络安全时。

标签: hash


【解决方案1】:

“至少两个相似的词(不考虑长度)应该有相似的哈希值”

这违反了哈希函数的最基本要求。使用散列函数,对输入的最小更改也会对散列所在的存储桶产生剧烈的变化。

您正在寻找一种算法来计算两个输入之间的相似度或距离。

【讨论】:

  • emboss 已经指向 Levenshtein 距离,这可能是您正在寻找的。​​span>
  • 如果您评论了您想要实现的目标,那么帮助您真的会更容易吗?查找词汇或语义或符号相似的字符串?你处理的是人类语言吗?哪一个?你能举一些应该“相似”的字符串集和应该“不同”的字符串集的例子吗?
  • 好的,有没有办法这样做...我不介意违反哈希值的基本要求。我需要一些想法,请帮助我...或者有什么方法可以映射或使用任何整数(或整数集)的整个字符串;在这种情况下,整数值应该取决于单词的长度和位置行为词)。所以结论是:我需要一些想法(或通过数字映射单词的算法,这样它不依赖于单词上的字母数量和/或:我需要映射整个字符串(一行文本),以便它应该取决于字数。你明白了吗?
  • 我不认为测试语义或词汇模式会做到这一点。当然这可能是一种方式,但我认为是流式算法。我只考虑日志的消息部分来对事件日志进行分类。例如,我想找到像“ Authentication for * is accepted”这样的模式(或正则表达式)(这只是一个例子)。我说清楚了吗?我可以进一步描述它们,但我的总体目标不仅仅是随机或没有任何基础。我也试图在其他评论中描述它们。请通过它们一次。我真的需要帮助。
  • 好的,我会自学的......请提供一些方法(至少一些名称或术语或标签)来散列字符串/句子只考虑它自己(这意味着不与其他字符串进行比较)。至少提供一些有用的术语/标签/关键字/技术名称,以便我可以探索它们。这很重要。我可能会失去我的最终项目和工程学位......
【解决方案2】:

如上所述,您不是在寻找哈希函数,而是像the Levenshtein distance 这样的算法,用于计算表示两个位序列之间差异程度的度量。它通常用于找出两个字符串的相似/不同程度。散列/消息摘要有助于为唯一、不同的值创建标识符,但它们会为“相似”值产生完全不同的结果。

您对字符串的相似性感兴趣。这是一个很好的post,它列出了一些用于测量字符串相似度的资源。也许Lucene 可以帮助您解决您的情况。

【讨论】:

  • 是的,我确实想要那个..所以请告诉我除了 Levenshtein 距离之外的其他方法(我已经阅读过,不能在我们的方法中使用)。据我所知,在所有这些评论之后,我希望算法/方法/想法与散列技术完全互补
  • @ajan:查看我的编辑。这些应该是很好的起点,所以至少你现在应该知道要寻找什么了。
  • 不客气。提醒一下,如果您觉得您的请求得到了解决,请投票选出好的答案并接受您最满意的答案。许多新用户似乎忘记了...... :)
猜你喜欢
  • 2020-03-17
  • 2011-12-25
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2016-04-22
  • 2011-12-18
  • 2013-11-16
相关资源
最近更新 更多