情况:我有一组表示Named Entities的字符串,这些字符串是从使用的内容中提取的HTML文档。我还有原始的HTML文档,被提供给NER引擎的剥离的全部标记纯文本,以及剥离文件中的字符串的偏移量/长度。
我需要使用突出显示的NE实例来注释原始HTML文档。为此,我需要执行以下操作:
在HTML文档中查找网元字符串的起点/终点。产生DOM Range Object的东西可能是理想的。
鉴于Range对象,将样式(可能使用<span class="ne-person" data-ne="123">...</span>
之类的东西)应用于范围。这很棘手,因为无法保证范围不会包含多个DOM元素(<a>
,<strong>
等),并且跨度需要在每个包含元素内正确启动/停止所以我不喜欢最终完全是虚假的HTML。
欢迎任何解决方案(全部或部分)。后端主要是Python / Django,前端使用jQuery。我们宁愿在后端做这件事,但我对任何事情持开放态度。
(我对如何标记这个问题有点不确定,所以请随意重新标记它。)
答案 0 :(得分:2)
使用range utility method加上注释库,例如以下之一:
答案 1 :(得分:1)
免费软件Rangy JavaScript库是您的朋友。关于你的两个任务:
在HTML文档中查找[...]字符串的开始/结束点。您可以使用Range#findText()
扩展名中的TextRange。它确实导致DOM Level 2 Range兼容对象[source]。
鉴于Range对象,将样式[...]应用于范围。可以使用Rangy Highlighter模块处理。如有必要,它将使用多个DOM元素进行突出显示以保持DOM树结构。
讨论: Rangy是@Paul Sweatte提出的DOM Level 2范围实用程序方法的跨浏览器实现。使用注释库将是范围库功能的进一步扩展;例如,Rangy将成为Annotator 2.0 [source]的基础。在您的情况下,它不是必需的,因为您只想渲染高光,不允许用户添加它们。