2010-07-28 67 views
0

我有一个“大”设置线的划定完整的句子,我正在用Hadoop处理。我开发了一个映射器,将一些我最喜欢的NLP技术应用到它。有几种不同的技术可以映射到原始语句集,而我在缩小阶段的目标是将这些结果收集到一个组中,以便组中的所有成员共享相同的原始语句。解析用Hadoop批量文本:最佳实践生成密钥

我觉得利用整个句子的关键是一个坏主意。我觉得产生一些哈希值的句子可能无法工作,因为有限数量的键(不合理的信念)。

谁能推荐生成唯一的密钥对每个句子最好的办法/做法?理想情况下,我想维护秩序。但是,这不是主要要求。

Aνtίο,

回答

1

标准哈希应该工作正常。大多数哈希算法的值空间远大于您可能使用的句子数量,因此碰撞的可能性仍然非常低。

+0

你可以给我一个价值空间的粗略数字吗?我需要扩展应用程序,并担心在测试环境中有解决方案,但以后会出现问题。 – sholsapp 2010-07-28 03:32:44

+1

SHA-1输出160位的哈希值,其中有2^160元素的价值空间......我有点怀疑你要去比,哦更多的句子,2^40个左右(那将会是一种每个字符在平均句子长度上为terabyte)。 – Amber 2010-07-28 04:30:29

0

虽然你可能要避免简单的散列函数(例如,你可以很快想出任何半生不熟的想法),因为他们可能不会混淆了一句数据足以避免碰撞摆在首位,的一个标准加密散列函数可能非常合适,例如MD5,SHA-1或SHA-256。

您可以使用MD5这一点,即使collisions have been found和算法被认为是不安全的安全性强化的目的。这不是一个安全关键的应用程序,已发现的冲突是通过仔细构建的数据产生的,并且可能不会随机出现在您自己的NLP句子数据中。 (例如,请参阅Johannes Schindelin的解释,说明为什么可能不必更改git以使用SHA-256哈希值,以便您可以理解此背后的原因。)

1

尽管我已经给出了有关一个合适的哈希函数可能是什么,我真的建议你只是使用句子本身作为键,除非你有一个特定的原因,为什么这是有问题的。