我正在为我的一个项目试验apache Open NLP,我的要求是检测电子邮件内容中的名词并检查我们的客户数据库(这个数据库由个人名称,组织名称等组成,我的搜索引擎是Solr base )。
对于普通英语名词,默认训练模型正常工作(对于大多数情况而言),但是 其中一个棘手的要求是,我们的业务组织有OK,LET等缩写,因此在少数情况下我需要考虑OK,LET等作为名词。
举个例子 1)“发送一些物品到LET,请预计延迟付款” 2)“让我们去参加一个派对”
在#1中我想将LET视为名词,而在#2情况下,LET不是名词。
如果我能达到这个要求,我可以减少搜索引擎中的大量误报。
非常感谢任何帮助。
答案 0 :(得分:2)
创建特殊名词的字典,并执行基于字典的提取作为后处理步骤。基于字典的提取应该考虑小写和大写之间的区别,特别是对于那些作为首字母缩略词的条目。
在字典查找的实现方面:
只要有问题的实体是单一标记(或者只包含预定义的,每个标记最小数量为M的标记),将字典实现为HashSet<String>
,对文本进行标记并制作外观 - 每个令牌(以及最多M个令牌组)的哈希值应该可以正常工作
如果您正在处理非常长的实体,或者如果标记化是一个问题,那么使用搜索trie或有限状态机实现字典是明智的。
最后,与NLP一样,您需要查看结果的重要示例以确定任何进一步的问题。根据实体列表中的歧义程度,您可能需要通过在区分大小写的字典查找之上添加启发式或基于统计/ ML的决策机制来进一步优化检测方法。