实体提取/识别与免费工具同时喂Lucene指数
我目前正在研究从文本(网上很多文章)中提取人名,位置,技术词汇和类别的选项,然后将这些文本导入到Lucene / ElasticSearch索引中。 附加信息将作为元数据添加,并应提高search精度。
例如,当有人询问“wicket”时,他应该能够决定他是指板球运动还是Apache项目。 我试图自己实现这一点,迄今取得了微小的成功。 现在我发现了很多工具,但是我不确定它们是否适合这个任务,哪些与Lucene集成,或者实体提取的精度是否足够高。
- Dbpedia聚光灯 , 演示看起来非常有前途
- OpenNLP需要培训 。 使用哪些训练数据?
- OpenNLP工具
- Stanbol
- NLTK
- balie
- UIMA
- GATE – > 示例代码
- Apache Mahout
- 斯坦福CRF-NER
- 毛伊岛,索引
- 槌
- 伊利诺伊州命名实体标记不开源,但免费
- 维基百科数据
我的问题:
- 有没有人有上述的一些列出的工具和精度/召回经验? 或者如果有需要的培训数据+可用。
- 是否有文章或教程,我可以开始实体提取(NER)每个工具?
- 他们如何可以与Lucene集成?
以下是与该主题相关的一些问题:
- algorithm是否存在帮助检测英语句子的“主要话题”?
- 用于Java的命名实体识别库
- 用Java命名实体识别
您在“检票”示例中遇到的问题称为实体消歧 ,而不是实体提取/识别(NER)。 NER可以是有用的,但只有当类别足够具体时才是有用的。 大多数NER系统没有足够的粒度来区分运动项目和软件项目(两种types都不属于通常认可的types:人员,组织,地点)。
为了消除歧义,您需要知道哪些实体正被消歧。 DBpedia是一个典型的select,由于其广泛的覆盖面。 看我的答案如何使用DBPedia从内容中提取标签/关键字? 在那里我提供了更多的解释,并提到了消除歧义的几种工具,包括:
- Zemanta的
- 茂宜岛索引
- Dbpedia聚光灯
-
Extractiv(我的公司)
这些工具通常使用像REST这样的独立于语言的API,我不知道他们直接提供Lucene支持,但是我希望我的回答对于您正在尝试解决的问题有所帮助。
您可以使用OpenNLP提取人员,地点和组织的名称,而无需进行培训。 您只需使用可从此处下载的预先存在的模型: http : //opennlp.sourceforge.net/models-1.5/
有关如何使用这些模型之一的示例,请参阅: http : //opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind
Rosoka是一个商业产品,提供了衡量文档重要性的“显着性”的计算。 显着性是基于语言的使用而不是频率。 使用显着性值可以确定整个文档的主要主题。 输出是你select的XML或JSON,这使得它非常容易与Lucene一起使用。 它是用java编写的。 有一个Amazon Cloud版本可在https://aws.amazon.com/marketplace/pp/B00E6FGJZ0上find 。 试用的成本是0.99美元/小时。 Rosoka Cloud版本没有Rosoka完整版本提供的所有Java APIfunction。 是的,两个版本都是基于语言的使用来进行实体和词汇的消歧。
消除歧义,无论是人还是软件,都要求有足够的上下文信息来确定差异。 上下文可以包含在文档中,在语料库约束内,或者在用户的上下文内。 前者更具体,后者具有更大的潜在含糊性。 即将关键词“wicket”input到Googlesearch中,可以指板球,Apache软件或星球大战Ewokangular色(即实体)。 一般“击剑者由击球员守卫”这句话在句子中有上下文的线索把它解释为一个对象。 “Wicket Wystri Warrick是一名男性Ewok侦察员”应该将“Wicket”作为“Wicket Wystri Warrick”的实体名称进行解释。 “欢迎来到Apache Wicket”具有“Wicket”是地名等的一部分的上下文线索。
最近我一直在摆弄斯坦福咖啡。 他们已经发布了不less版本http://nlp.stanford.edu/software/CRF-NER.shtml
好的是你可以训练你自己的分类器。 你应该按照有关如何训练自己的NER准则的链接。 http://nlp.stanford.edu/software/crf-faq.shtml#a不幸的是,在我的情况下,命名实体不能从文档中有效提取。; 大部分实体都未被发现。
以防万一你觉得它有用。