【发布时间】:2020-04-15 06:37:09
【问题描述】:
我有一个 Word 文档的文本和一个字符串数组。目标是查找文档文本中这些字符串的所有匹配项。我尝试使用 Aho-Corasick 算法的 Aho-Corasick string matching in C# 实现,但默认实现不适合我。 文本的典型部分看起来像
“启动”是指贷款人以附件 A 的形式向银行发出的书面通知。
“启动通知”是指贷款人以附件 A 和启动的形式向银行发出的书面通知。
“工作日”是指银行开放进行一般业务和激活通知的每一天(周六和周日除外)。
关键字数组的样子
var keywords = new[] {"Activation", "Activation Notice"};
Aho-Corasick 算法的默认实现返回以下出现次数
激活 - 4
激活通知 - 2
对于“激活说明”,这是正确的结果。但是对于“激活”,正确的计数也应该是 2 因为我不需要考虑相邻关键字“激活通知”内部的出现。
这种情况有合适的算法吗?
【问题讨论】:
-
您的关键字是否可以重叠但不是子集?例如
{"Activation Notice", "Notice from Lender"}。如果是这样,你更喜欢哪一个? -
@mcskinner 关键字也可以重叠,子集是描述问题的特例
-
如果文本是
"Activation Notice from Lender",带有关键字{"Activation Notice", "Notice from Lender"},你会期望什么输出?现有方法将返回所有匹配项,每个匹配项 1 个。但也许你更喜欢更长的比赛?还是第一场比赛,然后按长度打破平局? -
@mcskinner。抱歉,我查看了几个文档,关键字没有重叠,只是我描述的子集。所以我需要针对子集的情况的解决方案
标签: c# algorithm string-search aho-corasick