我正在使用Python(并且可以访问pandas,numpy,scipy)。
我有两组字符串集A和集B。每个集合A和B包含大约2000个元素(每个元素都是一个字符串)。这些字符串长约50-100个字符,包含多达20个单词(这些集合可能会变得更大)。
我希望检查集合A的成员是否也是集合B的成员。
现在我考虑一个朴素的实现方式,可以将A和B中的成员进行比较,并将布尔值(0、1)从比较中构成矩阵(例如,A1 == B1,A1 == B2,A1 == B3等),该矩阵即为结果。
如何高效地实现这一目标?
进一步说明:
(i)对于更大的数据集,我考虑使用Bloom过滤器(例如使用PyBloom,pybloomfilter)对每个字符串进行哈希处理(即使有假阳性也无妨……)。这是否是一个好方法,或者是否有其他策略应该考虑?
(ii)我正在考虑在字符串之间包括Levenshtein距离匹配(我知道它可能很慢),因为我可能需要模糊匹配 - 是否有一种方法可以将其与(i)中的方法结合起来或以其他方式使其更有效?
提前感谢任何帮助!
seta & setb
(或seta.intersection(setb)
)有什么问题? - mgilsonset
(就像dictionary
)使用哈希来检查项目是否存在。这是大多数应用程序的有效方法。但是,这仅适用于_精确_匹配。不适用于_模糊_匹配。如果您计划使用某些算法,例如Levenshtein距离,则必须使用有效数据。而不是哈希。因此,这将是一个重要的性能下降。更不用说您将不得不计算第一组每个项目和第二组每个项目之间的距离。最好是O(n log n)? - Sylvain Leroux