我正在使用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)来散列每个字符串(即我不介意那么多……).这是一个好方法还是我应该考虑其他策略?
(ii)我正在考虑在字符串之间包含Levenshtein距离匹配(我知道它可能很慢)因为我可能需要模糊匹配 – 有没有办法将它与(i)中的方法相结合或以其他方式使其更有效?
在此先感谢您的帮助!
解决方法:
首先,2000 * 100字符不是那么大,你可以直接使用一套.
其次,如果你的字符串是排序的,有一种快速的方法(我发现here)来比较它们,如下所示:
def compare(E1, E2):
i, j = 0, 0
I, J = len(E1), len(E2)
while i < I:
if j >= J or E1[i] < E2[j]:
print(E1[i], "is not in E2")
i += 1
elif E1[i] == E2[j]:
print(E1[i], "is in E2")
i, j = i + 1, j + 1
else:
j += 1
它肯定比使用set慢,但它不需要将字符串保存到内存中(同时只需要两个字符串).
对于Levenshtein来说,有一个C模块可以在Pypi上找到,而且速度非常快.
标签:python,string,bloom-filter 来源: https://codeday.me/bug/20190517/1122100.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。