我想检查关键字字符串是否包含在文本字符串中。这一定是一个模糊的包含。
我的第一次尝试是使用库blurwuzzy。当使用部分比率时字符串差异很大时,这似乎具有产生高匹配值的意外行为。
我尝试使用 levenshtein 的距离,它可以将一个字符串与另一个字符串进行比较,但不能用于查找字符串是否包含关键字。
我尝试的一个想法是将文本拆分为单个单词,然后遍历它们,计算距离以查看是否匹配。问题是关键字中可能有空格,这意味着使用此方法找不到任何匹配项。
我现在尝试使用 Bitap 算法来查找关键字是否在文本中,但是当关键字和文本非常不同时,这会返回为真。该算法可以在这里找到。
final String keyword = "br0wn foxes very nice and hfhjdfgdfgdfgfvffdbdffgjfjfhjgjfdghfghghfg".toLowerCase();
final String text = "The Quick Brown Fox Jumps Over the Lazy Dog".toLowerCase();
final Bitap bitap = new Bitap(keyword, alphabet);
bitap.within(text, 20); // Returns true
我已经研究过使用 Lucene。这样做的问题在于,其中很多都是基于从所有数据创建索引然后执行搜索。在我的情况下,这是无法做到的,因为它需要是一种分别采用关键字和文本的方法。如果有任何资源可以在不使用 Lucene 索引的情况下执行模糊包含,这将非常有用。
最好的方法是什么?