我试图在Lucene中进行实体提取(更像匹配).这是一个示例工作流程:
给定一些文本(来自URL)和列表人名,尝试从文本中提取人的名字.
Note:
Names of people are not completely
normalized. e.g. Some are Mr. X, Mrs.
Y and some are just John Doe, X and Y.
Other prefixes and suffixes to think
about are Jr., Sr., Dr., I, II …
etc. (dont let me get started with non
US names).
我正在使用Lucene MemoryIndex从每个Url(剥离html标签)创建文本的内存索引,并使用StandardAnalyzer查询所有名称的列表,一次一个(100k名称,还有其他方法可以做)这个?平均而言,我的平均文本大约需要8秒.
一个主要的问题是,使用0.01分作为基本分数来消除噪音,像“John Doe先生”这样的查询与“John Doe”相比,如果文本包含“John Doe”并且在很多情况都错过了0.01的门槛.
另一个问题是,如果我将所有名字正常化并开始删除Dr. Mrs. Mrs.等所有出现的事件,那么我就会开始错过像“约翰·爱德华二世博士”这样的好比赛,并最终得到很多垃圾比赛,例如“Mr约翰爱德华“.
我知道Lucene可能也不适合这项工作,但到目前为止它还没有被证明是太糟糕了.任何帮助赞赏.
最佳答案 NEE是一项NLP任务,不属于lucene.对于开源,您可以查看lingpipe和gate以及opennlp.有各种货币替代品.
GATE完全基于规则,并且难以用于高精度.你需要一个统计引擎; lingpipe有一个,但你必须提供训练数据.我不知道这个领域opennlp的内容.