字典上的java部分匹配
我正在使用GATE(基于Java的NLP框架),希望找到与字典部分匹配的单词。 例如,我有一本包含以下术语的疾病词典
Congestive cardiac failure
Congestive Heart Failure
Colon Cancer
.
.
.
Thousands of more terms
让我们假设我有一个字符串"Father had cardiac failure last year"
,从这个字符串中,我想将“心衰”标识为部分匹配,因为它是作为字典中一个术语的一部分出现的
我在Python、JS和C#中看到过一些关于类似主题的讨论,但我不确定在这种情况下有什么帮助。 我想知道我能不能利用这里的阿霍·科拉西克
# 1 楼答案
UIMA Concept Mapper annotator addon包含一个类似于您所看到的功能。你可以考虑:
# 2 楼答案
出现的一个问题是要在搜索中包含哪些子字符串。如果你包括了所有的子串,那么“心脏”也将是一个匹配项,但这并不是一个真正的疾病。 可能所有正确对齐的(字)子字符串(可能长度大于1)都是可以接受的
因此,您可以做的一件事是使用您想要包含的子字符串来训练Aho Corrasick模式匹配器。要保留子字符串来自哪个词典术语的信息,您可能需要稍微修改算法(如果保留该信息很重要),或者构建另一个数据结构以在以后查找它
在任何情况下,我都会在训练/匹配之前将疾病列表和要搜索的文档转换为小写。如果有可能拼写错误,也有关于模糊aho-corasick自动机的论文
# 3 楼答案
也许你应该用Lucene。将词典的每一行视为文档,将文本中的每一句视为查询