当前位置: 首页 > 知识库问答 >
问题:

检查字符串数组中出现哪些关键字(10k个字)的最有效方法?

公羊涛
2023-03-14

我有几个由100个字符串组成的数组,其中包含我使用FETCH检索到的注释。(称为comments)和另一个包含10,000个关键字的数组。(称为关键字)

对于数组中的每个注释,我要检查它包含哪些关键字。(我需要知道它包含的所有关键字,但不需要知道它出现的次数)

最快的方法是什么?

我尝试过foreach在彼此之间循环:

keywords.forEach(word => {
    comments.forEach(comment => {
       if(comment.includes(word)) //call a function
    }
})

以及之间的循环:

for(i = 0; i < keywords.length; i++) {
    for(j = 0; j < comments.length; j++){
         if(comments[j].includes(keywords[i])) //call a function
    }
}

对于这两个,我都尝试过切换内部循环和外部循环。

我还尝试使用关键字构建正则表达式,并使用matchallfor..of循环进行匹配。

keywords.forEach(word => regex = regex + `(^|\\b)${word}(\\b|$)|`)
comments.forEach(comment => {
    const matches = comment.matchAll(regex)
    for (const match of matches){
       //call a function
    }
})

这些都在我最初测试的10个关键字的时候起作用,但是很明显,对于10,000个关键字,这将花费更长的时间。最有效的方法是什么?

这对我来说都是很新的,所以有可能我错过了一些明显的东西!

谢谢

共有1个答案

桂丰
2023-03-14

请尝试使用。我已经在关键字数组中创建了一个。现在,对于注释数组中的每个单词,我都可以在中查找它是否包含该单词。

null

const keywords = ["java", "golang", "python", "ruby"];

const comments = ["I love java", "Golang is by google", "Python bit me hard"];

const hash = new Set(keywords.map((k) => k.toLowerCase()));

const test = (w) => console.log(w);

comments.forEach((c) =>
  c.split(" ").forEach((w) => hash.has(w.toLowerCase()) && test(w))
);
 类似资料:
  • 查找字符串中出现最多的字符和个数? 如 sdsdsddssssssdd -> 字符最多的是s,出现9次 思路说明 利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。 然后将结果转化为字典类型。 特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。 解答1(python) import

  • 我正在阅读一些面试准备材料,我想知道如果字符串或数组中的字符可以是unicode字符,那么解决这个问题的最佳方法是什么。如果它们是严格的ascii,则可以创建一个大小为256的数组,并将每个ascii字符映射到一个索引,该数组中的位置将表示出现的次数。如果字符串有unicode字符,是否仍然可以这样做,即unicode字符的大小是否合理,您可以使用整数数组的索引来表示它?由于unicode字符的大

  • 问题内容: 检查字符串是否仅包含字母数字字符的最快方法是什么。 我有一些代码会占用大量CPU,我想知道是否有比使用预编译正则表达式更快的方法。 问题答案: 我已经编写了使用正则表达式(根据其他答案)与不使用正则表达式进行比较的测试。在运行Java 1.6的四核OSX10.8计算机上进行的测试 有趣的是,使用正则表达式比手动迭代字符串要慢5到10倍。此外,该功能比的速度略快。一种支持允许扩展Unic

  • 问题内容: 一种有效的方法来检查Python中的字符串是否仅包含一个字符,例如?像这样的行为: 两种看似效率低下的方法是:首先将字符串转换为列表并检查每个元素,其次使用正则表达式。有没有更有效的方法,或者这些是Python中最好的方法?谢谢。 问题答案: 到目前为止,这是最快的,甚至比它快几倍,只需使用出色的mgilson计时套件即可: 在这里,所有检查都是在Python C代码中完成的,它只是:

  • 问题内容: 我正在尝试查找“ |”的所有出现 在一个字符串中。 但我得到一个错误: 问题答案: 功能: 将返回的索引列表中的出现。

  • 问题是,我试图这么做,但我检查字符串长度的方法不起作用;我能做些什么来修复它?