Lucene,内存中字符串的相关性/得分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene,内存中字符串的相关性/得分相关的知识,希望对你有一定的参考价值。
我正在构建一个监视HN的机器人,以寻找我感兴趣的主题。
我想分析一个内存中的字符串,并确定它是否包含我感兴趣的一些关键字。
我希望它能够考虑Lucene在执行标准查询时所做的事情(词干,停止词,标准化标点符号等)。
我可以构建一个内存中的索引,并使用常规方法进行查询,但有没有办法可以使用Lucene的内部来避免构建不必要的索引?
如果我可以获得相关性值(0.0-1.0),而不仅仅是真/假值,则可以获得奖励积分。
伪代码:
public static decimal IsRelevant(string keywords, string input)
{
// Does the "input" variable look like it contains "keywords"?
}
IsRelevant("books", "I just bought a book, and I like it."); // matching!
IsRelevant("book", "I just bought many books!"); // matching!
答案
我使用内存搜索索引创建了一个解决方案。这不是理想的,但它完成了任务。
public static float RelevanceScore(string keyword, string input)
{
var directory = new RAMDirectory();
var analyzer = new EnglishAnalyzer(LuceneVersion.LUCENE_48);
using (var writer = new IndexWriter(directory, new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer)))
{
var doc = new Document();
doc.Add(new Field("input", input, Field.Store.YES, Field.Index.ANALYZED));
writer.AddDocument(doc);
writer.Commit();
}
using (var reader = IndexReader.Open(directory))
{
var searcher = new IndexSearcher(reader);
var parser = new QueryParser(LuceneVersion.LUCENE_48, "input", analyzer);
var query = parser.Parse(keyword);
var result = searcher.Search(query, null, 10);
if (result.ScoreDocs.Length == 0)
{
return 0;
}
var doc = result.ScoreDocs.Single();
return doc.Score;
}
}
以上是关于Lucene,内存中字符串的相关性/得分的主要内容,如果未能解决你的问题,请参考以下文章