gpt4 book ai didi

ruby - 最佳实践 : Text-search in Ruby, 还是让 MongoDB 完成工作?

转载 作者:可可西里 更新时间:2023-11-01 10:34:41 25 4
gpt4 key购买 nike

我有一个关键字数组,它的长度是可变的。对于这个例子,假设有 50 个:

keywords = ['dog','cat','monkey'...'bird']

我有一组句子(同样是可变长度),我想循环遍历,搜索每个关键字。

sentences = [ ['My dog ate cat food'], ['I went to the store.'], ... ]

如果该句子包含任何关键字,那么我会将其移动到一个新的“匹配”数组中。所以在 Ruby 中,我的代码看起来像这样:

sentences.each do |sentence|
keywords.each do |keyword|
if sentence.match(/\b#{keyword}\b/i)
matched << sentence
end
end
end

这需要相当长的时间,而且看起来效率很低——尤其是当我有一个大关键字列表和一个大句子列表时。我是第一个承认我的 Ruby 开发还不是很好的人——有没有更简单、更有效的方法来做到这一点?

我正在使用 MongoDB 来存储关键字和句子。如果有更好的使用数据库的方法,我很乐意探索它。

最佳答案

我以前没有使用过 MonogDB,但是您可以稍微优化一下您的 ruby​​ 代码。由于您只关心句子中是否有 any 关键字的匹配项,因此我会将逻辑插入 Ruby 正则表达式引擎:

regexp = keywords.map { |keyword| Regexp.quote(keyword) }.join('|')

matched = sentences.select do |sentence|
sentence[0].match(/\\b(?:#{regexp})\\b/i)
end

它的作用是生成一个组合所有关键字的正则表达式。这样您就只会遍历句子而不是每个关键字。

关于ruby - 最佳实践 : Text-search in Ruby, 还是让 MongoDB 完成工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10437886/

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