2

情况:我有一组表示命名实体的字符串,这些字符串是从曾经是 HTML 文档的东西中提取的。我还拥有原始 HTML 文档、提供给 NER 引擎的全部标记纯文本以及剥离文件中字符串的偏移量/长度。

我需要用突出显示的 NE 实例来注释原始 HTML 文档。为此,我需要执行以下操作:

  1. 在 HTML 文档中查找 NE 字符串的开始/结束点。导致DOM 范围对象的东西可能是理想的。

  2. 给定 Range 对象,对范围应用样式(可能使用类似的东西<span class="ne-person" data-ne="123">...</span>)。这很棘手,因为不能保证该范围不会包含多个 DOM 元素(<a>,<strong>等),并且跨度需要在每个包含元素内正确启动/停止,所以我最终不会得到完全伪造的 HTML。

欢迎任何解决方案(全部或部分)。后端多为 Python/Django,前端使用 jQuery。我们宁愿在后端这样做,但我对任何事情都持开放态度。

(我对如何标记这个问题有点不确定,所以请随时重新标记它。)

4

2 回答 2

2

使用范围实用程序方法和注释库,例如以下之一:

于 2012-08-30T18:22:10.317 回答
1

免费软件Rangy JavaScript 库是您的朋友。关于你的两个任务:

  1. 在 HTML 文档中查找 […] 字符串的开始/结束点。您可以Range#findText()TextRange扩展中使用。它确实产生了 DOM Level 2 Range 兼容对象 [ source ]。

  2. 给定 Range 对象,将样式 [...] 应用于范围。这可以使用Rangy Highlighter模块来处理。如有必要,它将使用多个 DOM 元素进行突出显示以保持 DOM 树结构。

讨论: Rangy 是 @Paul Sweatte 提出的 DOM Level 2 range 实用方法的跨浏览器实现。使用注释库将是范围库功能的进一步扩展;例如,Rangy 将成为 Annotator 2.0 [来源] 的基础。在您的情况下,这不是必需的,因为您只想渲染高光,不允许用户添加它们。

于 2015-01-25T00:17:34.790 回答