【发布时间】:2013-10-14 23:38:59
【问题描述】:
问题
我正在 Rails 4 中开发一个创意写作应用程序,用户要求提供一项功能,让他们负责每天/每周/每月编写 X 个单词。处理随时间添加的词的跟踪问题的最佳方法是什么?
我目前的解决方案
我为每个用户存储了有限的总字数历史记录,让我可以将他们今天所有章节的总字数与他们昨天、上周或上个月所有章节的总字数进行比较。
我没有处理的边缘情况(并且不确定如何处理)
如果用户删除了大部分章节并重写或删除了整个章节或故事怎么办?我不想因为他们扔掉他们之前写的东西而惩罚他们。
编辑:
我刚刚修改了the Levenshtein algorithm 以计算添加、删除或替换的所有单词,以使作者对所有这些活动的写作目标给予肯定。您可以在此处查看代码:
def words_changed_since(second)
first = self.split
second = second.split
matrix = [(0..first.length).to_a]
(1..second.length).each do |j|
matrix << [j] + [0] * (first.length)
end
(1..second.length).each do |i|
(1..first.length).each do |j|
if first[j-1] == second[i-1]
matrix[i][j] = matrix[i-1][j-1]
else
matrix[i][j] = [
matrix[i-1][j],
matrix[i][j-1],
matrix[i-1][j-1],
].min + 1
end
end
end
return matrix.last.last
end
这是在初始化器中的 String 类上的猴子补丁,因此我可以调用 new_chapter_content.words_changed_since old_chapter_content 并且它只会给我一个正数。我愿意接受有关该算法的反馈,但我现在对此非常满意。我现在最大的问题是:
- 我应该将它存储在我的 postgres 数据库中,还是应该使用其他存储,例如 redis?
- 不使每日单词过期,甚至比每日更频繁地跟踪,比如用户每小时写一次,这会是一个非常糟糕的主意吗?这将使我能够为作家提供非常详细的写作历史,并帮助他们跟踪他们何时最富有成效。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 word-count