Модель HITS.
В рамках моделі HITS передбачається, що важливість сторінки залежить від запиту, тому що в різних тематичних спільнотах - різні авторитети. Якщо припустити, що інформація по темі може розподілитися приблизно порівну між сторінками з хорошим інформаційним наповненням по темі, званими «авторитетами» (authority), і сторінками, що нагадують каталоги, з безліччю посилань на інші сторінки, присвячені даній темі, званими «концентраторами» (hub), то пошук документів по заданій темі на базі гіперпосилань (Hyperlink-Induced Topic Search) намагається виявити гарні концентратори й авторитети. Алгоритм итеративно обчислює показник концентрації і авторитетності для кожного вузла, а потім впорядковує вузли відповідно до цих показників. Вузли, що мають високі показники авторитетності повинні бути хорошими авторитетами, а вузли з високими показниками концентрації повинні бути хорошими концентраторами. Алгоритм виходить з того, що документ, який посилається на велику кількість інших документів, - хороший концентратор, а документ, на який вказує безліч інших документів, - хороший авторитет. Рекурсивно документ, який вказує на велику кількість хороших авторитетів, - ще кращий концентратор, а документ, на який посилається безліч хороших концентраторів, - ще кращий авторитет. Тому HITS обчислюється локально для кожного запиту. Прикладом пошукової системи, що використовує HITS є Teoma (http://www.teoma.com).
Індекс цитування.
Індекс цитування (ІЦ) - показник пошукової системи, обчислюваний на основі числа посилань на даний ресурс з інших ресурсів мережі Інтернет. У простій різновиди ІЦ враховується тільки кількість посилань на ресурс. ІЦ оцінює популярність того або іншого ресурсу, тобто деяке абсолютне значення важливості сайту. Кожна пошукова система використовує свої алгоритми для підрахунку власного ІЦ, як правило, ці значення ніде не публікуються.
Спочатку (до появи оптимізаторів сайтів) ІЦ більш-менш реально відображає популярність відповідного ресурсу в Інтернеті.
Першою великою пошуковою системою, яка почала активно використовувати ІЦ, стала Google (Технологія PageRank).
2. Лістинг програми
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;
namespace HITS
{
public partial class Form1: Form
{
bool[] isdisplayed = {true,true,true,true,true,true,true,true};
string[] sites = { "www.nau.edu.ua",
"www.pautina-nau.net",
"vivanau.net/news/nau_137/svyatkumo-den-nezalezhnosti-razom",
"vkontakte.ru/vivanaunet",
"vivanau.net",
"www.ingame.com.ua",
"www.bigmir.net",
"studcity.nau.edu.ua"
};
bool[,] matrix = new bool[8,8];
List<LinkItem> list = new List<LinkItem>();
public Form1()
{
InitializeComponent();
foreach (string a in sites)
{
listBox1.Items.Add(a);
}
MakeInitMatrix();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void MakeInitMatrix()
{
int i = 0;
foreach(string site in sites)
{
int j = 0;
StreamReader sr = new StreamReader(site.Replace('/', '_') + ".html");
string file = sr.ReadToEnd();
List<LinkItem> b = LinkFinder.Find(file);
foreach (LinkItem c in b)
{
if ((sites.Contains(c.ToString())) ||
(sites.Contains((string)c.ToString().Replace("www.",""))) ||
(sites.Contains("www." + c.ToString())))
{
if(i!=j)
matrix[j, i] = true;
j++;
}
}
i++;
}
}
private void CalculateHitsAndIndex()
{
List<LinkItem> lst = new List<LinkItem>();
foreach (string site in sites)
{
LinkItem li = new LinkItem();
li.Text = site;
li.auth = 1;
li.hub = 1;
li.citindex = 0;
lst.Add(li);
}
for (int i = 0; i < 8; i++)
{
for (int j = 0;j< lst.Count;j++)
{
if (!isdisplayed[j])
continue;
LinkItem li = lst[j];
li.auth = 0;
for (int k = 0; k < 8; k++)
if ((matrix[k, j]) && (isdisplayed[k]))
li.auth += lst[k].hub;
lst.RemoveAt(j);
lst.Insert(j, li);
}
for (int j = 0; j < lst.Count; j++)
{
if (!isdisplayed[j])
continue;
LinkItem li = lst[j];
li.hub = 0;
for (int k = 0; k < 8; k++)
if ((matrix[j, k])&&(isdisplayed[k]))
li.hub += lst[k].auth;
lst.RemoveAt(j);
lst.Insert(j, li);
}
}
for(int i = 0; i< lst.Count;i++)
for(int j = 0;j<lst.Count;j++)
if ((matrix[j, i])&&(isdisplayed[i])&&(isdisplayed[j]))
{
LinkItem li = lst[i];
lst.RemoveAt(i);
li.citindex++;
lst.Insert(i,li);
}
list = lst;
}
private void button1_Click(object sender, EventArgs e)
{
DisplayResults();
}
private void DisplayResults()
{
listBox1.Items.Clear();
string query = textBox1.Text;
int i = 0;
foreach (string site in sites)
{
StreamReader sr = new StreamReader(site.Replace('/', '_') + ".html");
Match m = Regex.Match(sr.ReadToEnd(), query);
if (m.Success)
isdisplayed[i] = true;
else
isdisplayed[i] = false;
i++;
}
CalculateHitsAndIndex();
List<LinkItem>lst = new List<LinkItem>();
foreach (LinkItem site in list)
lst.Add(site);
int j = 0;
while (lst.Count > j)
{
int max = 0;
i = 0;
foreach (LinkItem site in lst)
{
if (isdisplayed[i])
{
if (radioButton1.Checked)
if (site.auth > lst[max].auth)
max = i;
if (radioButton2.Checked)
if (site.hub > lst[max].hub)
max = i;
if (radioButton3.Checked)
if (site.citindex > lst[max].citindex)
max = i;
i++;
}
}
if (isdisplayed[max])
{
listBox1.Items.Add(lst[max].ToString());
lst.RemoveAt(max);
for (int k = max; k < 7; k++)
isdisplayed[k] = isdisplayed[k + 1];
isdisplayed[7] = false;
j--;
}
j++;
}
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
DisplayResults();
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
DisplayResults();
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
DisplayResults();
}
}
}
using System.Collections.Generic;
using System.Text.RegularExpressions;
public struct LinkItem
{
public int hub;
public int auth;
public int citindex;
public string Text;
public override string ToString()
{
return Text;
}
}
static class LinkFinder
{
public static List<LinkItem> Find(string file)
{
List<LinkItem> list = new List<LinkItem>();
.
MatchCollection m1 = Regex.Matches(file, @"<a.*href\s*=\s*[""'](?<url>[^""^']+[.]*)[""'].*</a>");
foreach (Match m in m1)
{
string value = m.Groups[1].Value;
LinkItem i = new LinkItem();
Match m2 = Regex.Match(value, @"href=\""(.*?)\""",
RegexOptions.IgnoreCase);
string t = Regex.Replace(value, @"\s*<.*?>\s*", "",
RegexOptions.IgnoreCase);
t = t.Replace("http://", "");
if (t.EndsWith("/"))
t = t.Substring(0, t.Length - 1);
i.Text = t;
list.Add(i);
}
return list;
}
}
3. Результати роботи.
На вхід були подані наступні сайти:
1) "www.nau.edu.ua",
2) "www.pautina-nau.net",
3) "vivanau.net/news/nau_137/svyatkumo-den-nezalezhnosti-razom",
4) "vkontakte.ru/vivanaunet",
5) "vivanau.net",
6) "www.ingame.com.ua",
7) "www.bigmir.net",
8) "studcity.nau.edu.ua"
Був проведений пошук слова «nau». Результати виконання можна побачити на рисунках:



4. Висновки.
Результати сортування по авторству та індексу цитування однакові, тому що по суті обидва являють собою кількість посилань на дану сторінку з інших сторінок. Список кращих посередників відрізняється, тому що цей показник розраховується за кількістю посилань з даної сторінки на інші.






