散列字符串

时间:2011-07-07 17:46:01

标签: hash

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

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

示例可能是:带有分数/散列的字符串

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

这些字符串应该在同一个集群中。对于这个我所想的是映射(糟糕的散列类型)字符串,这样字符串中的小变化不会影响分数那么多。

这样做的一个简单方法可能是:采取 UliCp8 Ulic ....(即每个句子的第一个字母)并找到一些得分方式。之后,类似的得分字符串将保存在同一个存储桶中,然后再将其分组。

改进的方法是:不要取出字符串中每个单词的第一个单词,但找到一些方法来获取单词的代表值,使得字符串表示可能非常适合用于得分/散列映射,如我所述

考虑Levenstein距离或jaccard_index或某些相似距离矩阵,所有这些都需要输入字符串进行比较。是不是有任何方法可以在不进行比较的情况下对字符串进行散列/评分。(POS标记,比较看起来不太适合我的目的,因为数据是流式传输,数量巨大,非结构化)

希望你明白我想要实现的目标,请帮助我。忘了下面的评论,然后重新开始。

2 个答案:

答案 0 :(得分:2)

“至少两个相似的单词(不考虑长度)应具有相似的散列值”

这违反了哈希函数的最基本要求。使用散列函数,输入的最小变化也应该对散列所属的桶产生激烈的变化。

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

答案 1 :(得分:2)

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

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