gpt4 book ai didi

python - 使用 sqlite 的 FTS 片段功能处理 html 转义

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

我正在使用 sqlite 的全文搜索支持来存储可能包含 & 的文档, <>人物。我打算使用 snippet 函数来突出显示 html 结果页面的匹配项,但我没有看到在注入(inject)标记之前转义文本的明显方法。我不想在存储文本之前对其进行转义,因为这样 amp , ltgt将成为代币。

我能想到的最简单的解决方法是在存储页面之前转义页面,并使用首先取消转义 &amp; 的自定义分词器。 , &lt;&gt; .

但是...由于默认为 snippet(foo)就是使用<b></b> ,这看起来确实是一个非常常见的用例,我确信一定有一种方法可以处理这个问题,而无需在 C 中重新发明轮子。我是否忽略了一个更优雅的解决方案?

最佳答案

看来 FTS 确实不处理文本中的标记(请注意 <p> 是如何被分割的):

> CREATE VIRTUAL TABLE test USING fts3(content TEXT);
> INSERT INTO test VALUES('<p>Isn''t this <font face="Comic Sans">funny</font>?');
> INSERT INTO test VALUES('blah');
> SELECT snippet(test) FROM test WHERE content MATCH 'funny';
p>Isn't this <font face="Comic Sans"><b>funny</b></font>?
> SELECT snippet(test) FROM test WHERE content MATCH 'font';
p>Isn't this <<b>font</b> face="Comic Sans">funny</<b>font</b>>?

存储文本的最干净的方式是作为纯文本,不转义。但是,要正确突出显示搜索结果,您有两种选择:

  • 使用 snippet 的可选参数指定保证永远不会出现在文本中的标记(这可能是不可能的),并将它们转换为 <b>...当您转义 HTML 文本时;或
  • 使用 offsets而是使用函数并手动插入标记。

关于python - 使用 sqlite 的 FTS 片段功能处理 html 转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com