gpt4 book ai didi

java - 执行模糊包含检查

转载 作者:行者123 更新时间:2023-11-30 07:49:33 24 4
gpt4 key购买 nike

我想检查文本字符串中是否包含关键字字符串。这一定是一个模糊包含。

我的第一次尝试是使用库 fuzzywuzzy .当字符串在使用部分比率时差异很大时,这似乎具有产生高匹配值的意外行为。

我试过使用 levenshtein 的距离,它适用于将一个字符串与另一个字符串进行比较,但不适用于查找字符串是否包含关键字。
我尝试的一个想法是将文本拆分为单个单词,然后循环遍历所有单词,计算距离以查看是否存在匹配项。问题是关键字中可能有空格,这意味着它不会使用此方法找到任何匹配项。

我现在已经尝试使用 Bitap 算法来查找关键字是否在文本中,但是当关键字和文本非常不同时,这会返回 true。算法可见here.

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 进行索引的情况下执行模糊包含,那将非常有用。

最好的方法是什么?

最佳答案

我之前遇到过同样的问题。要求是应检测并删除包含在系统中注册为阻止的 url 的传入文本。

但是它们不会 100% 匹配,因为传入文本的检测是通过 OCR 算法完成的。

假设我们有一个被阻止的字符串“www.blockedwebsite.com”和一个传入的字符串“我喜欢网站 www.blockdwebsite.com :)”(注意“e”已从 url 中删除) .由于“我喜欢该网站”,计算 levenshtein 距离会导致很大的距离,因此不匹配。(我使用 apache.commons.similarity.LevenshteinDistance 库)

我所做的是迭代传入的字符串,将子字符串从 i 提取到阻塞字符串的长度。

    LevenshteinDistance ld = LevenshteinDistance.getDefaultInstance();
String incomingString = "I like the website www.blockdwebsite.com";
String blockedString = "www.blockedwebsite.com";
for (int i = 0; i < incomingString.length()-blockedString.length(); i++) {
String substring = incomingString.substring(i, i+blockedString.length());
Integer distance = ld.apply(substring, blockedString);
if (distance < 5)
System.out.println("match found");
}

当距离低于 5 时,检测到匹配。您可以将其更改为 90% 匹配或类似的东西。我希望这有帮助。祝你好运。

关于java - 执行模糊包含检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48421004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com