RSS
 

База данных для паука, часть 3

08 Ноя

Суть любой поисковой системы стоит в хранении, а потом в ранжировании получившейся информации. Вследствие этого необходимо разобраться в написании

простой MYSQL базы . Начнём с того , что постараемся просто реализовать некотрую простую базу содержащую  5 таблиц.

  1. Первая таблица будет содержать список проиндексированных URL. (urllist)
  2. Вторая список слов, по которым мы и будем производишь ранжирование. (wordlist)
  3. Третья будет содержать соответсвенно список мест вхождения слов в документы. А именно (wordlocation). Эта часть наиболее полезна для определения плагиата и дублей и на основании этой информации возможно построить контрольные суммы, которые приведут к последующим методам определения первоисточников публикуемых статей.
  4. В таблице (link) находятся индетификаторы, описывающие ссылаемость одного URL на другой. Это в последствии поможет в опредлении доли , передаваемого индекса цитирования либо ранжируемости от донора к  конечному URL акцептора.
  5. (linkwords ) содержит текст соответсвующей ссылки. Это поможет в дальнейшем для определения тематичности ссылки. Вот так яндекс наши ГС и банит за нетематические ссылки.

Создавать базу данных мы будем средствами самого питона , но перед тем как перейти не посредственно к этому пункту. Разберёмся вообще сначала с принципами устройства самих баз данных.
Следующий код на питоне позволяет разобраться с азами.
Загрузили модуль базы данных. Подключаемся к конечной базе данных.

from pysqlite2 import dbapi2 as sqlite
con = sqlite.connect('users.db')

Создать кусрор для ввода комманд на языке самого MYSQL. Затем указать модель базы данных . А именно
указать ключ, по которому можно получить данные.

cur = con.cursor()
cur.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, url VARCHAR(100), description VARCHAR(30))')
con.commit()

Вставить непосредственно заначения. Пример тестовый, поэтому выбираем наиболее произвольные данные.

cur.execute('INSERT INTO users (id,url, description) VALUES(NULL, "http://lifeisfine.ru", "Блог о индексации и ПС")')
 
cur.execute('INSERT INTO users (id,url, description) VALUES(NULL, "http://lifeisfine.ru/wp-admin", "Введите пароль")')
 
cur.execute('INSERT INTO users (id,url, description) VALUES(NULL, "http://lifeisfine.ru/soft", "Софт")')
con.commit()

Напечатать содержание базы данных .

print cur.lastrowid
cur.execute('SELECT * FROM users')
print cur.fetchall()

Ну вот в целом можно считать,что с общими принципами баз данных разобрались. Теперь можно переходить непосредственно к написанию кода отвечающего за создание базы данных самого паука. А именно непосредственно пяти таблиц.Следующий участок кода позволяет создать то, что нам нужно.

  def createindextables(self): 
 
    self.con.execute('create table urllist(url)')
 
    self.con.execute('create table wordlist(word)')
 
    self.con.execute('create table wordlocation(urlid,wordid,location)')
 
    self.con.execute('create table link(fromid integer,toid integer)')
 
    self.con.execute('create table linkwords(wordid,linkid)')

Ну вот создали таблицы. А тепеть перейдём к созданию непосредственно связей посредством индексов. Они в свою очередь приводят к непосредственному ускорению индексации. Что как будет показано ниже приводит к повышению скорости индексации. А это очень полезно , когда число обрабатываемых документов особенно велико.

    self.con.execute('create index wordidx on wordlist(word)')
 
    self.con.execute('create index urlidx on urllist(url)')
 
    self.con.execute('create index wordurlidx on wordlocation(wordid)')
 
    self.con.execute('create index urltoidx on link(toid)')
 
    self.con.execute('create index urlfromidx on link(fromid)')
 
    self.dbcommit()

Для создания непосредственно базы данных, не обходимо ввести следующую последовательность комманд в интерпретаторе. А это в свою очередь, особенно эффективно. Например не тоскать с собой отдельный скрипт, который будет заниматься непосредственно этим делом.Этот код следует добавить в исходный класс spider файла .

searchengine.py.
И в результате, чтобы создать базу данных по нашего паука надо будет просто ввести последовательность комманд
, которые вызовут соответсвующую составляющую класса. А именно

spider=searchengine.spider("indexdatabse.db")
spider.createindextables()

Кроме того, следует просто добавить следующие строчки в файл searchengine.py. Они отвечают за создание
и инициализацию базы данных соответсвенно

def __init__(self,dbname):
         self.con=sqlite.connect(dbname)

При написание кода деструктора следует закрыть базу данных.
Этот метод позволяет в ряде случаев избежать утечки памяти.
А в случае тысяч документов это просто необходимо.
Очень важно всегда уделять должное внимание деструкторам классов.

def __del__(self):
          self.con.close()
def dbcommit(self):
           self.con.commit()

Ну вот и пожалуй всё на этот момент о базе данных для поискового паука. В целом дальше
буду освещать ещё дополнительно о необходимых утилитах, которые необходимо будет установить.

Google Bookmarks Reddit Technorati Yahoo My Web БобрДобр.ru Memori.ru МоёМесто.ru
 
5 коммент.

Опубликовано в рубрике Индексация

 

Прокомментировать

 
 
  1. lifephysic

    10.11.2010 - 01:04

    Просто проверка на возможность добавить комментарий

     
  2. newhacker1

    10.11.2010 - 01:15

    Родной ты мой, убей нафиг свой akismet, или добавь форму регистрации. Пусть люди комменты добавлять смогут. Писать ты кстати лучше стал. А самое главное – регулярнее. Только вот своей неумелостью запарываешь блог, у которого ссылки с wikipedia.

    Руки прикрути себе. Голова то есть вроде. 8) 8)

     
  3. lifephysic

    10.11.2010 - 01:21

    Вот добавил форму регистрации.
    А руки есть. Просто времени мало. .
    Аспир берёт своё.

     
  4. newhacker1

    10.11.2010 - 01:26

    Нафига на твоём блоге про спорт написано. Притом ещё так криво. Убери весь мусор. Морду свою вставь.
    Ссылку на своё творчество из принципа не даю.
    Доры так сказать. Давай пиши . Стиль улучшай. 8) 8) 8)

     
  5. lifephysic

    20.11.2010 - 14:29

    Вообще – это мой блог, если тебе не нравятся мои разделы, или отсутствие моей фотографии – это твоё личное дело. 8) 8) 8)

    В любом случае продемонстрируй свои шедевры,
    комменты твои удалять не буду.

    Вот для памятки решил ещё записать:
    Установка QtSql модуля базы данных для Ubuntu Linux для питона.

    sudo apt-get install python-qt4-sql libqt4-sql-psql

    Очень может пригодиться если базу данных для паука создавать не под облегчённую sqlite,
    а с большим функционалом. Например контроля данных , контроля ошибок записи.

     
 
Система Orphus

Enter your email address:

Delivered by FeedBurner

.