最近在做KTDictSeg 的 1.3 版本,在这个版本中做了一个用Lucene.net 搜索新闻的例子,其中生成关键词摘要用了
highlighter.net-1.4.0版本,发现中文关键词摘要生成结果总是不对,但英文的结果是对的。没办法,只得把highlighter.net
的源码拿出来调了一遍,最终发现问题在TokenGroup类的IsDistinct函数上。该函数源码如下
internal virtual bool IsDistinct(Token token)
{
return token.StartOffset() > endOffset;
}
正确的代码应该是
internal virtual bool IsDistinct(Token token)
{
return token.StartOffset() >= endOffset;
}
之所以在英文下是对的,是因为英文单词之间通常都是通过空格来分割,所以下一个单词的StartOffset一般都比前一个单词的 endOffset要大。
而中文的情况就不同了,单词间没有空格,导致下一个单词的StartOffset等于前一个单词的endOffset。结果自然就不对了。
后来想确认一下最新的 2.0 版本是否更改了这个Bug。结果始终没有找到源码,无奈之下只能将 2.0版本的动态库反编译看了一下,结果发现
该处Bug在2.0版本中已经被更正。要提醒的一点是如果用 highlighter.net2.0版本,必须要使用 Lucene的2.0以上版本。
哪位兄弟如果有highlighter.net2.0版本的源码,能否方便分享一下,先谢过了!
highlighter.net-1.4.0版本,发现中文关键词摘要生成结果总是不对,但英文的结果是对的。没办法,只得把highlighter.net
的源码拿出来调了一遍,最终发现问题在TokenGroup类的IsDistinct函数上。该函数源码如下




正确的代码应该是




之所以在英文下是对的,是因为英文单词之间通常都是通过空格来分割,所以下一个单词的StartOffset一般都比前一个单词的 endOffset要大。
而中文的情况就不同了,单词间没有空格,导致下一个单词的StartOffset等于前一个单词的endOffset。结果自然就不对了。
后来想确认一下最新的 2.0 版本是否更改了这个Bug。结果始终没有找到源码,无奈之下只能将 2.0版本的动态库反编译看了一下,结果发现
该处Bug在2.0版本中已经被更正。要提醒的一点是如果用 highlighter.net2.0版本,必须要使用 Lucene的2.0以上版本。
哪位兄弟如果有highlighter.net2.0版本的源码,能否方便分享一下,先谢过了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述