⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 refiner.cs

📁 用C#编写的一个款搜索engine的源代码!摘自<Visual c#2005 程序设计>
💻 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 + -