本文整理汇总了C#中Lucene.Net.Search.Explanation.GetDetails方法的典型用法代码示例。如果您正苦于以下问题:C# Explanation.GetDetails方法的具体用法?C# Explanation.GetDetails怎么用?C# Explanation.GetDetails使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Lucene.Net.Search.Explanation
的用法示例。
在下文中一共展示了Explanation.GetDetails方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AddNode
private void AddNode(TreeNode tn, Explanation e)
{
TreeNode node = new TreeNode(e.GetValue().ToString("G4") + " " + e.GetDescription());
if (null == tn)
{
treeExplain.Nodes.Add(node);
}
else
{
tn.Nodes.Add(node);
}
Explanation[] kids = e.GetDetails();
if (kids != null && kids.Length > 0)
{
for (int i = 0; i < kids.Length; i++)
{
AddNode(node, kids[i]);
}
}
}
示例2: verifyExplanation
/*
* Assert that an explanation has the expected score, and optionally that its
* sub-details max/sum/factor match to that score.
*
* @param q String representation of the query for assertion messages
* @param doc Document ID for assertion messages
* @param score Real score value of doc with query q
* @param deep indicates whether a deep comparison of sub-Explanation details should be executed
* @param expl The Explanation to match against score
*/
public static void verifyExplanation(String q,
int doc,
float score,
bool deep,
Explanation expl)
{
float value = expl.Value;
assertEquals(q + ": score(doc=" + doc + ")=" + score +
" != explanationScore=" + value + " Explanation: " + expl,
score, value, explainToleranceDelta(score, value));
if (!deep) return;
var detail = expl.GetDetails();
// TODO: can we improve this entire method? its really geared to work only with TF/IDF
if (expl.Description.EndsWith("computed from:"))
{
return; // something more complicated.
}
if (detail != null)
{
if (detail.Length == 1)
{
// simple containment, unless its a freq of: (which lets a query explain how the freq is calculated),
// just verify contained expl has same score
if (!expl.Description.EndsWith("with freq of:"))
verifyExplanation(q, doc, score, deep, detail[0]);
}
else
{
// explanation must either:
// - end with one of: "product of:", "sum of:", "max of:", or
// - have "max plus <x> times others" (where <x> is float).
float x = 0;
String descr = expl.Description.ToLowerInvariant();
bool productOf = descr.EndsWith("product of:");
bool sumOf = descr.EndsWith("sum of:");
bool maxOf = descr.EndsWith("max of:");
bool maxTimesOthers = false;
if (!(productOf || sumOf || maxOf))
{
// maybe 'max plus x times others'
int k1 = descr.IndexOf("max plus ");
if (k1 >= 0)
{
k1 += "max plus ".Length;
int k2 = descr.IndexOf(" ", k1);
try
{
x = float.Parse(descr.Substring(k1, k2).Trim());
if (descr.Substring(k2).Trim().Equals("times others of:"))
{
maxTimesOthers = true;
}
}
catch (FormatException e)
{
}
}
}
// TODO: this is a TERRIBLE assertion!!!!
assertTrue(
q + ": multi valued explanation description=\"" + descr
+ "\" must be 'max of plus x times others' or end with 'product of'"
+ " or 'sum of:' or 'max of:' - " + expl,
productOf || sumOf || maxOf || maxTimesOthers);
float sum = 0;
float product = 1;
float max = 0;
for (int i = 0; i < detail.Length; i++)
{
float dval = detail[i].Value;
verifyExplanation(q, doc, dval, deep, detail[i]);
product *= dval;
sum += dval;
max = Math.Max(max, dval);
}
float combined = 0;
if (productOf)
{
combined = product;
}
else if (sumOf)
{
combined = sum;
}
else if (maxOf)
{
combined = max;
}
//.........这里部分代码省略.........
示例3: VerifyExplanation
/// <summary> Assert that an explanation has the expected score, and optionally that its
/// sub-details max/sum/factor match to that score.
///
/// </summary>
/// <param name="q">String representation of the query for assertion messages
/// </param>
/// <param name="doc">Document ID for assertion messages
/// </param>
/// <param name="score">Real score value of doc with query q
/// </param>
/// <param name="deep">indicates whether a deep comparison of sub-Explanation details should be executed
/// </param>
/// <param name="expl">The Explanation to match against score
/// </param>
public static void VerifyExplanation(System.String q, int doc, float score, bool deep, Explanation expl)
{
float value_Renamed = expl.GetValue();
Assert.AreEqual(score, value_Renamed, EXPLAIN_SCORE_TOLERANCE_DELTA, q + ": score(doc=" + doc + ")=" + score + " != explanationScore=" + value_Renamed + " Explanation: " + expl);
if (!deep)
return ;
Explanation[] detail = expl.GetDetails();
if (detail != null)
{
if (detail.Length == 1)
{
// simple containment, no matter what the description says,
// just verify contained expl has same score
VerifyExplanation(q, doc, score, deep, detail[0]);
}
else
{
// explanation must either:
// - end with one of: "product of:", "sum of:", "max of:", or
// - have "max plus <x> times others" (where <x> is float).
float x = 0;
System.String descr = expl.GetDescription().ToLower();
bool productOf = descr.EndsWith("product of:");
bool sumOf = descr.EndsWith("sum of:");
bool maxOf = descr.EndsWith("max of:");
bool maxTimesOthers = false;
if (!(productOf || sumOf || maxOf))
{
// maybe 'max plus x times others'
int k1 = descr.IndexOf("max plus ");
if (k1 >= 0)
{
k1 += "max plus ".Length;
int k2 = descr.IndexOf(" ", k1);
try
{
x = SupportClass.Single.Parse(descr.Substring(k1, (k2) - (k1)).Trim());
if (descr.Substring(k2).Trim().Equals("times others of:"))
{
maxTimesOthers = true;
}
}
catch (System.FormatException)
{
}
}
}
Assert.IsTrue(productOf || sumOf || maxOf || maxTimesOthers, q + ": multi valued explanation description=\"" + descr + "\" must be 'max of plus x times others' or end with 'product of'" + " or 'sum of:' or 'max of:' - " + expl);
float sum = 0;
float product = 1;
float max = 0;
for (int i = 0; i < detail.Length; i++)
{
float dval = detail[i].GetValue();
VerifyExplanation(q, doc, dval, deep, detail[i]);
product *= dval;
sum += dval;
max = System.Math.Max(max, dval);
}
float combined = 0;
if (productOf)
{
combined = product;
}
else if (sumOf)
{
combined = sum;
}
else if (maxOf)
{
combined = max;
}
else if (maxTimesOthers)
{
combined = max + x * (sum - max);
}
else
{
Assert.IsTrue(false, "should never get here!");
}
Assert.AreEqual(combined, value_Renamed, EXPLAIN_SCORE_TOLERANCE_DELTA, q + ": actual subDetails combined==" + combined + " != value=" + value_Renamed + " Explanation: " + expl);
}
}
}
示例4: Explain
public virtual Explanation Explain(IndexReader reader, int doc)
{
Explanation sumExpl = new Explanation();
sumExpl.SetDescription("sum of:");
int coord = 0;
int maxCoord = 0;
float sum = 0.0f;
for (int i = 0; i < weights.Count; i++)
{
BooleanClause c = (BooleanClause) Enclosing_Instance.clauses[i];
Weight w = (Weight) weights[i];
Explanation e = w.Explain(reader, doc);
if (!c.IsProhibited())
maxCoord++;
if (e.GetValue() > 0)
{
if (!c.IsProhibited())
{
sumExpl.AddDetail(e);
sum += e.GetValue();
coord++;
}
else
{
return new Explanation(0.0f, "match prohibited");
}
}
else if (c.IsRequired())
{
return new Explanation(0.0f, "match required");
}
}
sumExpl.SetValue(sum);
if (coord == 1)
// only one clause matched
sumExpl = sumExpl.GetDetails()[0]; // eliminate wrapper
float coordFactor = similarity.Coord(coord, maxCoord);
if (coordFactor == 1.0f)
// coord is no-op
return sumExpl;
// eliminate wrapper
else
{
Explanation result = new Explanation();
result.SetDescription("product of:");
result.AddDetail(sumExpl);
result.AddDetail(new Explanation(coordFactor, "coord(" + coord + "/" + maxCoord + ")"));
result.SetValue(sum * coordFactor);
return result;
}
}