2

我正在使用 GATE(基于 Java 的 NLP 框架)并希望找到与字典部分匹配的单词。例如,我有一个包含以下术语的疾病词典

Congestive cardiac failure
Congestive Heart Failure
Colon Cancer
      .
      . 
      .
Thousands of more terms

假设我有"Father had cardiac failure last year"这个字符串中的字符串,我想将“心脏衰竭”识别为部分匹配,因为它作为字典中某个术语的一部分出现。

我在 Python、JS 和 C# 中看到过一些关于类似主题的讨论,但我不确定在这种情况下有什么帮助。我想知道我是否可以在这里使用 Aho-Corrasick。

4

3 回答 3

1

UIMA 概念映射器注释器插件包含与您正在寻找的功能类似的功能。你可以考虑:

于 2012-01-10T11:45:23.283 回答
1

也许你应该使用Lucene。将字典的每一行视为一个文档,将文本中的每个句子视为一个查询。

于 2012-01-06T11:19:05.423 回答
1

出现的一个问题是您希望在搜索中包含哪些子字符串。如果您包含所有子字符串,那么“Heart”也将是匹配项,但这并不是真正的疾病。也许所有右对齐(单词)子字符串(可能长度> 1)都是可以接受的。

因此,您可以做的一件事是使用您想要包含的子字符串来训练 Aho-Corrasick 模式匹配器。要保留子字符串来自哪个字典术语的信息,您可能需要稍微修改算法(如果保留该信息很重要)或构建另一个数据结构以在之后查找它。

在任何情况下,我都会在训练/匹配之前将疾病列表和要搜索的文档转换为小写。如果有拼写错误的可能性 - 还有关于模糊 aho-corasick 自动机的论文。

于 2012-01-06T12:30:59.537 回答