📄 refiner.cs
字号:
using System;
using System.IO;
using System.Collections;
using System.Threading;
using System.Text;
using SECompare.Kernel;
using SECompare.Structure;
namespace SECompare.Kernel
{
/// <summary>
/// Class Refiner is used to refine search results from search engines.
/// Because results and ranks varies from time to time when a crawler is running,
/// even after a very small interval.
/// We have to refine results in order to make the results more smart and evaluation more accurate.
/// </summary>
public class Refiner:ThreadStatus
{
public Refiner()
{
this.threadStart = new ThreadStart(Run);
}
private void Run()
{
try
{
//Get all Crawled sample files
String folder = (new Config.Config()).SamplingedQueryRoot;
String[] files = Directory.GetFiles(folder);
//get all selected engines
String[] engines = this.mEngineSetting.SelectedEngines;
//for each category file
for(int i=0;i<files.Length;i++)
{
FileInfo file = new FileInfo(files[i]);
String category = file.Name;
//************Progress Status Report***********
this.mProcessingFile = category;
this.mFilePercentage = (float)i/files.Length;
//*********************************************
//read query samples
CrawlSample sample = new CrawlSample();
sample.Load(category,file.FullName);
//get query strings
String[] queries = sample.GetQueries();
//for each query
for(int j=0;j<queries.Length;j++)
{
String query = queries[j];
//************Progress Status Report***********
this.mEntryPercentage = (float)j/queries.Length;
this.mProcessingEntry = query;
//*********************************************
//For each selected engines
foreach(String engine in engines)
this.Refine(query,engine);
}
}
}
catch(ThreadInterruptedException)
{
}
finally
{
this.mIsFinished = true;
}
}
/// <summary>
/// Refine results of given query and engine.
/// </summary>
/// <param name="Query">Query Words</param>
/// <param name="Engine">Engine Name</param>
private void Refine(String Query,String Engine)
{
int i;
//Construct Results List
ArrayList results = new ArrayList();
int MaxRank = Structure.EngineSetting.GetMaxRank( Structure.EngineSetting.GetEnum( Engine ) );
//Traverse all results
int rank = 1;
for(;rank<=MaxRank;rank++)
{
QueryRecord r = QueryRecord.Load(Query,Engine,rank);
if(r==null)
continue;
//Check if r is contained in list
i = 0;
foreach(QueryRecord record in results)
{
if( record.URL.Equals(r.URL) )
break;
else
i++;
}
//If it is not found, add to results list. Else delete.
if(i==results.Count)
results.Add(r);
else
r.Delete();
}
//Delete overflowed results
for(;rank<=1100;rank++)
{
QueryRecord.Delete(Query,Engine,rank.ToString());
}
//Save refined results with new ranks.
i = 1;
foreach(QueryRecord r in results)
{
r.SaveAsNewRank(i);
i++;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -