在单个文档中查找短语

时间:2016-11-15 12:17:30

标签: ruby search

我有一个网络应用程序,允许用户上传文本文档(大约2-3000个单词),以及一个包含大约50,000个短语(作为字符串)的数据库表。

如何最有效地找出每个上传文档中出现的短语? (即通过分别检查每个短语,还有什么比强制它更好的吗?)

理想情况下,网络应用流应该是在上传后的页面加载上,应用知道它在那个文档中找到了哪些短语。

理想情况下,我喜欢红宝石的解决方案,但有关其他技术或数据结构或其他任何内容的建议将是真正的帮助。

1 个答案:

答案 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

我们的想法是在每次匹配后缩小内容,以便下次搜索更快。

免责声明:未经测试。