偏移到树

Offsets to tree

本文关键字:      更新时间:2023-09-26

所以我有一个看起来像这样的数据结构:

{
  "text": "hello world!",
  "tags": [{"start": 0, "end": 4, "tag": "b"}, {"start": 1, "end": 5, "tag": "i"}]
}

我想把它变成这样的东西:

[["b", [
   ["#text", "h"],
   ["i", ["#text", "ello"]]]]
,["i", ["#text", " "]]
,["#text", "world!"]]

(是的,这是它看起来像 DOM 树的一种抽象表示。

我真的不确定开始解决这个问题的正确方法是什么。有什么想法吗?

也许添加新

标签的方法将通过类似于深度优先搜索的过程来完成。最初,数据结构只是一个单叶节点:

[
    ["#text", "hello world!"]
]

添加第一个标签会将到目前为止唯一的节点拆分为两个节点,其中一个节点具有标签"b"。实际上,正在添加一个新元素,并且唯一节点的字符串正在被制作成它的子字符串:

[
    ["b",
        ["#text", "hello"]
    ],
    ["#text", " world!"]
]
概括该过程,叶节点

包含原始文本的子字符串,非叶节点是标记。添加另一个标签时,将执行深度优先搜索,同时保持到目前为止看到的子字符串长度的总和

当搜索在上述结构中输入"b"时,子字符串总和长度将为 0。添加该节点字符串的长度("hello")后,子字符串长度将变为 5。由于 "i" 的范围与 0 - 5 重叠,因此必须暂时拆分 "b" 节点,从而产生:

[
    ["b",
        ["#text", "h"],
        ["i",
            ["#text", "ello"]
        ]
    ],
    ["#text", " world!"]
]
但是,"

i"标签的深度优先搜索并不完整,下一个节点(标记为"#text")仍然必须拆分。当前子字符串长度在进入该节点时为 5,在添加该节点的文本("world!")后将变为 12。"i"在 5 - 12 的范围内,这是拆分节点的条件,产生:

[
    ["b",
        ["#text", "h"],
        ["i",
            ["#text", "ello"]
        ]
    ],
    ["i",
        ["#text", " "]
    ],
    ["#text", "world!"]
]

请注意,括号与您在问题中发布的内容略有不同。我认为最初的括号问题(在评论中提到)不是最后一个括号

相关文章:
  • 没有找到相关文章