gpt4 book ai didi

javascript - 突出显示 HTML 文档中的术语表术语

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:17 24 4
gpt4 key购买 nike

我们有一个包含多达 2000 个术语的术语表(其中每个术语表术语可能由一个、两个或三个单词组成(用空格分隔)或破折号)。

现在我们正在寻找一种解决方案来突出显示a中的所有术语(更长)HTML 文档(最多 100 KB 的 HTML 标记),以便生成带有突出显示的术语的静态 HTML 页面。

工作解决方案的限制是:大量术语表和长 HTML 文档...高效解决方案的蓝图是什么(在 Python 中)。

现在我正在考虑使用 lxml 解析 HTML 文档,迭代所有文本节点,然后将每个文本节点中的内容与所有术语表术语进行匹配。

客户端(浏览器)动态突出显示不是一个选项,因为 IE 会提示长时间运行的脚本超时......因此无法用于生产用途。

还有更好的主意吗?

最佳答案

您可以使用解析器以递归方式导航树并仅替换由文本组成的标签。
在此过程中,您仍然需要考虑以下几件事:
- 并非所有文本都需要替换(例如内联 javascript)
- 文档的某些元素可能不需要解析(例如标题等)

以下是一个快速且非生产就绪的示例,说明如何实现此目标:

html = """The HTML you need to parse"""
import BeautifulSoup

IGNORE_TAGS = ['script', 'style']

def parse_content(item, replace_what, replace_with, ignore_tags = IGNORE_TAGS):
for content in item.contents:
if isinstance(content, BeautifulSoup.NavigableString):
content.replaceWith(content.replace(replace_what, replace_with, ignore_tags))
else:
if content.name not in ignore_tags:
parse_content(content, replace_what, replace_with, ignore_tags)
return item

soup = BeautifulSoup.BeautifulSoup(html)
body = soup.html.body
replaced_content = parse_content(body, 'a', 'b')

这应该用“b”替换任何出现的“a”,但留下的内容是:
- 内联 javascript 或 css(尽管内联 JS 或 CSS 不应出现在文档正文中)。
- 标签中的引用,例如 img、a...
- 标签本身

当然,根据您的词汇表,您需要确保您不会仅用其他内容替换单词的一部分;要做到这一点,使用 content.replace 的正则表达式是有意义的。

关于javascript - 突出显示 HTML 文档中的术语表术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8366909/

24 4 0
文章推荐: javascript - 观察vue中的div宽度变化
文章推荐: c# - 如何重用重新打开连接的代码?
文章推荐: javascript - 将
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com