【问题标题】:How to tag text, to keep track of unique edits如何标记文本,以跟踪独特的编辑
【发布时间】:2014-07-15 07:59:16
【问题描述】:

因此,例如在数据库中,我有三个用户:Peter、John 和 Sara。有一个特定的字段,三个用户都可以在其中写入。 彼得写道:

“我喜欢苹果”

,然后 John 附加

“我喜欢香蕉”

。现在我有字段说

“我喜欢苹果,我喜欢香蕉”

,所以如果我想显示哪个部分是由谁编写的,我的方法是创建 html 标签: 该字段将是:

<span class="text-sequence-1">I like apples</span><span class="text-sequence-2"> and I like bananas</span>

然后,我会从数据库中按顺序选择句子,并在悬停时使用 CSS 显示附加内容,在悬停的每个部分上。

  1. 第一个问题。问题是,如果第三个用户 Sara 来了 更新属于两个原始的文本。哪个可以 如果我允许逐个编辑 Johns 和 Peters 标签,则可以克服。 然后我在原始跨度内获得编辑跨度并可以跟踪 编辑了哪个部分以及如何编辑。如果我这样做,我仍然会 面临第二个问题:
  2. 第二个问题。如果 Sara 决定编辑,例如 Johns 部分,一些 次。我仍然会严重嵌套。 我可以使用#number 标签而不是 spans,这样我就可以跟踪每个版本的结束位置,但是我无法将 CSS 代码应用到它们上来为属于谁的部分着色并在悬停时应用其他效果,例如显示一个框,谁编辑了它,什么时候编辑的。 任何想法我该如何实施? 对不起我的英语不好。

【问题讨论】:

  • Gacek 是对的 - 这不是不是的方法,如果几个人更改单个字母或复制和粘贴文本,它会很快崩溃。彩虹色的文字很快就会失去任何意义。

标签: tagging


【解决方案1】:

由于您使用的是数据库,因此请在单独的表中跟踪编辑。对于每次编辑,请保留以下字段:

  • 此编辑的行 ID(主键)
  • 父行 ID(开始/确认编辑时“当前编辑”的行 ID;请参阅下文了解如何使用)
  • 编辑的作者
  • 时间戳
  • 描述更改内容的可选短文本(例如,“固定拼写”)

显示该字段时,您可以显示指向“历史”的链接,该链接将显示谁在何时编辑了什么。当您查看页面历史时,您可以显示individual differences between any two versions,例如 Wikipedia 所做的 - 有许多库可以做到这一点,包括突出显示等等。 This library 看起来不错,但有各种语言的 many others

当有人开始编辑时,让他们修改当时的版本(最高时间戳)。当他们提交编辑时(单击accept 或类似内容),再次检查以查看在他们编辑时没有其他人更改内容(父编辑的时间戳仍然最高)。如果有人确实更改了某些内容,请向他们展示您的父行和编辑之间的区别,并告诉他们在提交之前修复问题(可能有几个编辑需要考虑帐户)。这是“维基百科方式”,它相当于一种轻量级版本控制(比Git 更容易实现)

【讨论】:

    【解决方案2】:

    实际上我认为这种方法不好。正如你所注意到的,你会得到很多讨厌的嵌套。

    如果某人只编辑一个字母怎么办?

    取而代之的是,考虑线比较方法。就像 Git 一样。因此,比较第一行是否更改并存储每个版本。(更复杂的方法是仅存储更改的行并应用 git 补丁等更改。)

    我认为你的方式注定要失败。太复杂了,没有逻辑比较方法可以用。

    John is cool John is uncool John is Uncool John is weak

    想想你会如何标记这些。如果某人删除了一段文字怎么办?编辑将不可见,或者您将插入一个空标签(不可见)?

    不要标记,比较。我认为标记不是您要寻找的。另请参阅:Text comparison algorithm

    【讨论】:

    • 我完全同意跨度不起作用。但是,我认为 git 是矫枉过正
    • 不是 Git。 Gitlike 比较。逐行比较。
    • 啊——“存储每个版本”和“git 补丁”引用让我感到困惑。
    • 现在更有意义了。那么,如果...我使用 original_text 和 updated_text 并像这样扫描:从 original_text 中的符号 [0] 开始,逐个符号添加到我的数组中并继续添加,而我可以在 updated_text 中找到这个符号序列,然后收集尽可能长的将这样的数组转换为文本,从这一点我会知道,哪个部分不属于任何 original_text 部分,再一次,我以某种方式标记它(如何)?这种方法会占用太多资源和执行时间吗?编辑:一旦我写了它,就会出现新消息,我会阅读它们。
    • @user3565320 你可以自己找出一个差异算法,但是很难做到正确并让它运行得很快。使用现有的(请参阅我的答案中的链接)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2013-10-12
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多