在字典上的部分匹配

我正在使用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。

UIMA Concept Mapper注释器插件包含与您正在查找的function类似的function。 你可以考虑:

  • 包括在GATE内部使用UIMA: http ://gate.ac.uk/userguide/chap: uima
  • 使用插件的主要思想开发类似的组件

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

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

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

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