Ruby on rails 智能跟踪Rails应用程序中的文字 问题
我正在Rails 4中开发一个创造性写作应用程序,用户要求提供一个功能,让他们每天/每周/每月写X个单词。处理随时间添加的单词跟踪问题的最佳方法是什么 我当前的解决方案 我为每个用户存储了有限的单词总数历史记录,允许我将他们今天所有章节中的单词总数与他们昨天、上周或上月所有章节中的单词总数进行比较 边缘案例我没有处理(也不知道如何处理) 如果用户删除了一个章节的大部分内容并重写了它,或者删除了整个章节或故事,该怎么办?我不想因为他们把以前写的东西扔掉而惩罚他们 编辑: 我刚刚修改了计算所有添加、删除或替换的单词的数量,以使作者在完成所有这些活动的写作目标时得到认可。您可以在此处看到代码:Ruby on rails 智能跟踪Rails应用程序中的文字 问题,ruby-on-rails,ruby-on-rails-4,word-count,Ruby On Rails,Ruby On Rails 4,Word Count,我正在Rails 4中开发一个创造性写作应用程序,用户要求提供一个功能,让他们每天/每周/每月写X个单词。处理随时间添加的单词跟踪问题的最佳方法是什么 我当前的解决方案 我为每个用户存储了有限的单词总数历史记录,允许我将他们今天所有章节中的单词总数与他们昨天、上周或上月所有章节中的单词总数进行比较 边缘案例我没有处理(也不知道如何处理) 如果用户删除了一个章节的大部分内容并重写了它,或者删除了整个章节或故事,该怎么办?我不想因为他们把以前写的东西扔掉而惩罚他们 编辑: 我刚刚修改了计算所有添加、
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
def words\u更改\u自(秒)
第一个=自我分裂
秒=秒
矩阵=[(0..first.length).to_a]
(1.第二个长度)。每个do | j|
matrix一个非常好的解决方案,但也有点复杂,就是使用一些extern软件来比较每次更新前后的文本。Git将是一个明显的选择,然后您甚至可以拥有github页面和Wiki的版本历史记录!然而,也有很多其他的程序在那里,唯一的目的是比较文本和发现差异。只需在谷歌上搜索“文本比较工具”
编辑(git集成工具):
我发现这些gem可用于从ruby调用git命令:
- 请参阅此处的更多信息:
编辑2(文本比较工具):
以下是我找到的一些资源,它们可能对比较文本很有用:
红宝石
在线API
编辑3(我对最后几个问题的回答):
Levensthtein算法的良好解决方案!我将尝试回答最后两个问题,但没有正确的答案,所以这只是我的观点:
我应该将其存储在我的postgres db中,还是使用另一个存储,如redis?
这不是一个真正的关键/价值的情况,即使您更改了实现,我也看不到使用Redis的任何理由。也许你以后会遇到性能方面的问题,但我现在认为redis是一个不成熟的、完全不必要的优化
不让每日单词过期,甚至比每天更频繁地跟踪,比如用户每小时写一次,这会是一个非常糟糕的主意吗?这将使我能够为作者提供一个非常详细的写作历史,也有助于他们了解什么时候他们的写作效率最高。
不,这不是个坏主意。Postgres和大多数SQL数据库通常都经过优化以查询大量行。查询一个包含大量行的表比查询多个包含少量行的表(例如联接)更快
然而,这也取决于你将如何使用这些数据。您是只查询最后一天左右的情况,还是需要经常使用用户更改的整个历史记录?做统计用的外汇?如果是这样的话,你应该适当考虑通过在较长的时间内拥有汇总数据的表来进行优化。我用自己制作的一些简单的会计软件来显示收入和结果的统计数据(通过显示每周的摘要而不是单独显示每笔交易)
一个非常好的解决方案,但也有点复杂,就是使用一些外部软件来比较每次更新“前后”的文本。Git将是一个明显的选择,然后您甚至可以拥有github页面和Wiki的版本历史记录!然而,也有很多其他的程序在那里,唯一的目的是比较文本和发现差异。只需在谷歌上搜索“文本比较工具”
编辑(git集成工具):
我发现这些gem可用于从ruby调用git命令:
- 请参阅此处的更多信息:
编辑2(文本比较工具):
以下是我找到的一些资源,它们可能对比较文本很有用:
红宝石
在线API
编辑3(我对最后几个问题的回答):
Levensthtein算法的良好解决方案!我将尝试回答最后两个问题,但没有正确的答案,所以这只是我的观点:
我应该将其存储在我的postgres db中,还是使用另一个存储,如redis?
这不是一个真正的关键/价值的情况,即使您更改了实现,我也看不到使用Redis的任何理由。也许你以后会遇到性能方面的问题,但我现在认为redis是一个不成熟的、完全不必要的优化
不让每日单词过期,甚至比每天更频繁地跟踪,比如用户每小时写一次,这会是一个非常糟糕的主意吗?这将使我能够为作者提供一个非常详细的写作历史,也有助于他们了解什么时候他们的写作效率最高。
不,这不是个坏主意。Postgres和大多数SQL数据库通常都经过优化以查询大量行。查询一个包含大量行的表比查询多个包含少量行的表(例如联接)更快
然而,这也取决于你将如何使用这些数据。您是只查询最后一天左右的情况,还是需要经常使用用户更改的整个历史记录?做统计用的外汇?如果是这样的话,你应该适当考虑通过在较长的时间内拥有汇总数据的表来进行优化。我自己用一些sim卡来做这件事