【发布时间】:2011-12-15 23:18:39
【问题描述】:
问题 我有一份公司名称/股票代码列表,并希望在某些文本中识别它们。
public interface AutoTaggingService () {
public List<Tags> getTags(String fullText);
}
在最简单的实现中,可以遍历所有公司名称并进行精确匹配,但这既慢(公司列表很大),也不能很好地应对拼写变化。
可能的解决方案 我能想到的一种方法是将公司名称/股票代码列表提供给 Lucene/Solr 索引,并使用全文作为查询。此查询的结果将是与全文匹配的文档(公司)列表,具有相关性分数。可以定义一个阈值,因此只有得分高的公司才会作为标签返回。可以定义自定义词干分析器和公司名称的同义词列表以提高准确性。
怀疑 过去使用Lucene/Solr时,搜索索引中的文档包含比较长的文本(例如文章集合),查询会比较短。对于我现在要做的事情,情况正好相反。这会影响索引或相关性,使这种方法不可靠吗?
问题
- 我的解决方案是解决此问题的好方法吗?
- 我可以使用classifier 并使用公司列表作为训练数据来实现这一目标吗?
- 有关如何高效且准确地完成此任务的任何其他建议。
【问题讨论】:
-
不要推迟使用 SOLR 来完成此类任务。在最近的 3.5 公告中,他们将 SOLR 描述为“转变为 NoSQL 数据存储”。
-
可以使用 Solr,但有很多选择。搜索“命名实体提取”。这就是你要问的正式名称
-
感谢@Geert-Jan。根据您的建议,我使用 Lingpipe 进行命名实体提取取得了一些成功
-
确实是“基于字典的近似分块”,正如他们所说的那样......
标签: java solr lucene full-text-search