gpt4 book ai didi

java - 大数据的高效正则表达式,如果一个字符串包含一个词

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:46:04 27 4
gpt4 key购买 nike

我有一个代码可以工作,但速度非常慢。此代码确定字符串是否包含关键字。我的要求需要对我将在数千个文档中搜索的数百个关键字有效。

我该怎么做才能高效地查找关键字(不会错误地返回包含该关键字的单词)?

例如:

String keyword="ac"; 
String document"..." //few page long file

如果我使用:

if(document.contains(keyword) ){
//do something
}

如果文档中包含“帐户”之类的词,它也会返回 true;

所以我尝试使用正则表达式如下:

String pattern = "(.*)([^A-Za-z]"+ keyword +"[^A-Za-z])(.*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(document);
if(m.find()){
//do something
}

总结:

这是总结:希望它对其他人有用:

  1. 我的正则表达式可以工作,但非常不切实际处理大数据。 (它没有终止)
  2. @anubhava 完善了正则表达式。很容易理解和执行。它设法终止了,这是一个很大的事物。但还是有点慢。 (大约 240 秒)
  3. @Tomalak 解决方案实现和理解起来有点复杂,但它是最快的解决方案。所以向队友致敬。(18 秒)

所以@Tomalak 解决方案比@anubhava 快 15 倍。

最佳答案

不要认为您的正则表达式中需要有 .*

试试这个正则表达式:

String pattern = "\\b"+ Pattern.quote(keyword) + "\\b";

这里的\\b是用来分词的。如果关键字可以包含特殊字符,请确保它们不在单词的开头或结尾,否则单词边界将无法匹配。

如果您的关键字包含特殊的正则表达式字符,您还必须使用 Pattern.quote

编辑:如果您的关键字由空格分隔,您可以使用此正则表达式。

String pattern = "(?<=\\s|^)"+ Pattern.quote(keyword) + "(?=\\s|$)";

关于java - 大数据的高效正则表达式,如果一个字符串包含一个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24674318/

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