我有一个网络应用程序,允许用户上传文本文档(大约2-3000个单词),以及一个包含大约50,000个短语(作为字符串)的数据库表。
如何最有效地找出每个上传文档中出现的短语? (即通过分别检查每个短语,还有什么比强制它更好的吗?)
理想情况下,网络应用流应该是在上传后的页面加载上,应用知道它在那个文档中找到了哪些短语。
理想情况下,我喜欢红宝石的解决方案,但有关其他技术或数据结构或其他任何内容的建议将是真正的帮助。
答案 0 :(得分:0)
我不知道你使用的是什么数据库,所以我只是给出一个MySQL解决方案:
require 'mysql2'
content = File.read('/path/to/document.txt')
client = Mysql2::Client.new(:host => "localhost", :username => "root")
sql = "SELECT phrase FROM phrases ORDER BY LENGTH(phrase)"
appeared = client.query(sql, as: :array, stream: true).each.with_object([]) do |row, array|
array << row[0] if content.gsub!(%r[#Regexp.escape(row[0])]i, '')
end
我们的想法是在每次匹配后缩小内容,以便下次搜索更快。
免责声明:未经测试。