模糊搜索/与标准unix工具的近似字符串匹配

时间:2018-04-25 14:21:41

标签: string bash unix fuzzy-search approximate

我正在使用prokka注释文件,这些文件为我提供了uniprot数据库中发现的基因的蛋白质产物。不幸的是,许多基因与多个非常相似的产品名称相关联,例如

def convertToJSON = udf((value:  Array[ArrayElement]) => {
  Json.obj(
    "matches" -> value.map { x => Json.obj(
      "influencer" -> "",
      "overlap" -> "",
      "relevance" -> ""
    )
    }).toString()
})

而这些变体实际上是不同的产品

1%2C2-phenylacetyl-CoA epoxidase%2C subunit A
1%2C2 phenylacetyl-CoA epoxidase%2C subunit A
1%2C2-phenylacetyl CoA epoxidase%2C subunit A
1%2C2-Phenylacetyl CoA Epoxidase%2C subunit A

为了避免在将我的基因映射到各自的产品时遇到麻烦,我决定用所有可能的含糊不清和有问题的字符代替,例如" - " " " " /"与" @"并将所有字符串放在小写字母上。

但是有没有办法搜索,例如为了

1%2C2-phenylacetyl-CoA epoxidase%2C subunit A
1%2C2-phenylacetyl-CoA epoxidase%2C subunit B
1%2C2-phenylacetyl-CoA epoxidase%2C subunit C
1%2C2-phenylacetyl-CoA epoxidase%2C subunit E

包括可能的,与标准unix工具密切相关的条目作为grep?到目前为止我找不到答案。

1 个答案:

答案 0 :(得分:1)

如果您希望通过字符串距离指标定义真正的模糊搜索,请查看tre-agrep。 对于您的应用程序,我会使用grep与不区分大小写的匹配和句点特殊字符。

grep -i "1.2C2.phenylacetyl.CoA.epoxidase.2C subunit A" drugNames.txt

会匹配句点中的任何字符,并且不会关注案例,这就是你想要的。