Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 智能跟踪Rails应用程序中的文字 问题_Ruby On Rails_Ruby On Rails 4_Word Count - Fatal编程技术网

Ruby on rails 智能跟踪Rails应用程序中的文字 问题

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个单词。处理随时间添加的单词跟踪问题的最佳方法是什么 我当前的解决方案 我为每个用户存储了有限的单词总数历史记录,允许我将他们今天所有章节中的单词总数与他们昨天、上周或上月所有章节中的单词总数进行比较 边缘案例我没有处理(也不知道如何处理) 如果用户删除了一个章节的大部分内容并重写了它,或者删除了整个章节或故事,该怎么办?我不想因为他们把以前写的东西扔掉而惩罚他们 编辑: 我刚刚修改了计算所有添加、

我正在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卡来做这件事