在字典上的部分匹配

时间:2012-01-06 10:06:44

标签: java dictionary nlp gate

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

UIMA Concept Mapper annotator addon包含与您正在寻找的功能类似的功能。你可以考虑: