【发布时间】:2013-06-20 06:09:09
【问题描述】:
我正在使用 Python(并且可以访问 pandas、numpy、scipy)。
我有两个集合字符串集合 A 和集合 B。每个集合 A 和 B 包含 c。 2000 个元素(每个元素都是一个字符串)。字符串长度约为 50-100 个字符,最多包含 c。 20 个单词(这些集合可能会变得更大)。
我想检查集合 A 的成员是否也是集合 B 的成员。
现在我认为可以将一个简单的实现可视化为一个矩阵,其中 A 和 B 中的成员相互比较(例如 A1 == B1、A1 == B2、A1 == B3 等等......)比较中的布尔值 (0, 1) 包含矩阵的元素。
什么是有效实现这一点的最佳方法?
两个进一步的阐述:
(i) 我也在想,对于更大的集合,我可以使用 Bloom Filter(例如使用 PyBloom、pybloomfilter)来散列每个字符串(即,我不太介意 fasle positives ......)。这是一个好方法还是我应该考虑其他策略?
(ii) 我正在考虑在字符串之间加入 Levenshtein 距离匹配(我知道这可能很慢),因为我可能需要模糊匹配 - 有没有办法将它与 (i) 中的方法结合起来,或者以其他方式制作它效率更高?
提前感谢您的帮助!
【问题讨论】:
-
seta & setb(或seta.intersection(setb))有什么问题 -
在 Python 中
set(如dictionary)使用哈希来检查项目是否存在。对于大多数应用程序来说,这是一种有效的方法。但是,这仅适用于 exact 匹配。不适用于 fuzzy 匹配。如果您打算使用像Levenshtein distance 这样的算法,您将不得不使用有效数据。不是哈希。所以这将是一个重要的性能下降。更不用说您必须计算第一组的每个项目与第二组的每个项目之间的距离。 O(n log n) 最多?。 -
如何定义模糊匹配?根据定义,您可以使用后缀树或尝试。
标签: python string bloom-filter