Re: Генерация индексов для проекта lindocs.
Сейчас, пусть функция prn, не просто печатает аргументы передаваемые ей,
а создает из них строку, которая будет использоваться в качестве ключа в
объекте-словаре (ассоциативный массив). Заодним, сменим название этой
функции.
Почему будет использоваться объект-словарь? Если мы хотим в дальнейшем
сосчитать количество материалов, в которых участвуют оба ключевых слова,
то при каждой сформированной паре ключевых слов, пришлось бы искать -
упоминалась эта пара уже до этого или нет. А в случае использования
конкатенации пары слов в качестве ключа в ассоциативном массиве, можно
воспользоваться стандартными средствами поиска.
def count_pair(a, b):
c_keys = [a, b]
c_keys.sort()
s_key = string.join(c_keys,':')
Сначала в функции создается список, содержащий два ключевых слова.
c_keys.sort() - стандартный метод для объектов-списков, сортирующий
элементы списка.
string.join(c_keys,':') - функция модуля string, производящая
конкатенацию элементов списка в одну строку, в качестве разделителя
между элементами в строке будет выступать ":". Для работоспособности
данного кода в начало скрипта, в секции, где указываются импортируемые
модули, необходимо указать, что импортируется модуль string:
import string
Ключ для словаря сформирован, теперь необходимо реализовать работу с
самим словарем. В начале скрипта создадим пустой объект-словарь:
dc_graph = {}
Теперь допишем функцию count_pair. Если записи с данным ключом еще не
было в словаре, то создадим ее, а если уже была такая запись, то
увеличим значение-счетчик, которое говорит, в скольких материалах была
такая пара ключевых слов.
def count_pair(a, b):
c_keys = [a, b]
c_keys.sort()
s_key = string.join(c_keys,':')
if dc_graph.has_key(s_key):
c = dc_graph[s_key]
else:
c = 0
dc_graph[s_key] = c+1
dc_graph.has_key(s_key) - проверяем имеется ли строка s_key среди ключей
словаря
c = dc_graph[s_key] - получаем значение-счетчик соответствующее ключу
s_key
dc_graph[s_key] = c+1 - присваиваем новое значение записи с ключом
s_key, если такой записи не было, то она создается. Вообще-то, она в
любом случае создается заново, просто в случае, если запись с таким
ключом уже была, то она удаляется (это особенности реализации работы со
словарями в Python)
Если присмотреться к тому, что в итоге получится в объекте-словаре, то
можно увидеть граф: ключи словаря описывают ребра графа, а значения
- вес ребер графа.