比较大量的二进制字符串

时间:2018-09-28 16:00:53

标签: python elasticsearch solr redis memcached

全部

撰写文章,看看是否有人在以下情况下对自己认为最好的技术有所投入。是python,solr,redis,memcache等。

情况如下。

我有1亿+个二进制字符串,长度约为1100个字符... '0010100010101001010101011 ....'

您认为最符合逻辑的方法是执行以下操作?

对于给定的相同字符数的字符串,找到最接近的匹配项的最有效方法是什么?最接近的意思是在给定位置共享最大数量的0和1。我相信汉明距离。

我的用例实际上涉及到100k个左右的字符串,并试图在1亿多个字符串中找到最匹配的字符串。

有什么想法吗?不必使用特定的技术,而最好使用相当普遍的技术。

想知道任何人可能有什么想法。

谢谢, 丁骨

2 个答案:

答案 0 :(得分:0)

您可以使用numpy,R或MATLAB或其他适用于大型矩阵的方法:

假设您有一个NxM矩阵A,其中N是len(string),M是字符串数。并说您有一个要匹配的字符串S。您可以:

  1. 从A减去S的数组版本
  2. 取(1)结果的所有元素的绝对值
  3. 将(2)的结果沿N轴求和
  4. 对(3)的结果进行排序,以找到与S的距离最小的字符串的索引。

答案 1 :(得分:0)

您基本上正在尝试在Elasticsearch的汉明空间中进行最近邻居搜索。

对此,[1]中最近提出的FENSHSES方法似乎是Elasticsearch上最先进的方法。

[1] Mu,C,Zhao,J.,Yang,G.,Yang,B. and Yan,Z.,2019年10月。在全文搜索引擎上的汉明空间中进行快速,精确的最近邻搜索。在关于相似性搜索和应用的国际会议上(第49-56页)。湛史普林格。