Romip-base project

Инструментарий для проведения экспериментов по ad hoc дорожкам поиска семинара РОМИП

Дата последнего обновления:
22.08.2007 15:00

Инструкции

Содержание:

  1. Файлы и папки
  2. Инструкции по запуску
  3. Параметры для запуска
  4. Создания собственного класса

Файлы и папки

Инструкции по запуску

Для запуска необходимо, находясь корневой в директории (содержащей файл romip_base.jar), выполнить команду вида:
java -Xmx1024m 
-jar romip_base.jar 
-w romip_base.wf.<название класса взвешивающей функции> 
-d <имя базы данных> 
-y <год запросов> 
<параметры для данного класса> 
<параметры общего характера>

Пример последовательности команд:
java -Xmx1024m -jar romip_base.jar -w romip_base.wf.TfIdfNivc -d romip_legal -y 2004
java -Xmx1024m -jar romip_base.jar -w romip_base.wf.PairIdfSumNormed -d romip_legal -y 2004 -pdid 3 -pdiq 5
java -Xmx1024m -jar romip_base.jar -w romip_base.wf.MinWindow -d romip_legal -y 2004
java -Xmx1024m -jar romip_base.jar -w romip_base.wf.MashupThree -d romip_legal -y 2004 -pdid 3 -pdiq 5 -pa 0.9 -pb 0.1 -pc 0.3 --drop-table
java -Xmx1024m -jar romip_base.jar -w romip_base.wf.MashupThree -d romip_legal -y 2004 -pdid 3 -pdiq 5 -pa 0.9 -pb 0.15 -pc 0.3 --drop-table
java -Xmx1024m -jar romip_base.jar -w romip_base.wf.MashupThree -d romip_legal -y 2004 -pdid 3 -pdiq 5 -pa 0.9 -pb 0.1 -pc 0.2 --drop-table
java -Xmx1024m -jar romip_base.jar -w romip_base.wf.MashupThree -d romip_legal -y 2004 -pdid 3 -pdiq 5 -pa 0.9 -pb 0.2 -pc 0.2 --drop-table

Такой набор команд фактически сделает следующее:
  1. Вычислит веса документов для коллекции romip_legal и запросов 2004 года согласно формуле, описанной в классе romip_base.wf.TfIdfNivc, и поместит их в таблицу TfIdfNivc
  2. Вычислит веса документов для коллекции romip_legal и запросов 2004 года согласно формуле, описанной в классе romip_base.wf.PairIdfSumNormed с параметрами diq=5, did=3, и поместит их в таблицу PairIdfSumNormed_5_3
  3. Вычислит веса документов для коллекции romip_legal и запросов 2004 года согласно формуле, описанной в классе romip_base.wf.MinWindow, и поместит их в таблицу MinWindow
  4. Используя посчитанные веса из 3 предыдущих запусков, будут сделаны еще 4 запуска для алгоритма заданного в классе romip_base.wf.MashupThree с соответствующими значениями параметров a, b, c. Новые временные таблицы будут удалены после того как будет вычисленны и выгружены значения метрик.
  5. В папке /output/romip_legal/2004/ появится 7 файлов со значениями метрик для каждого из запусков

Параметры для запуска

Ниже перечислены все возможные параметры для запуска. Первая часть: java -Xmx1024m -jar romip_base.jar остается неизменной

Создание собственного класса

Пример создания нового класса для реализации своего алгоритма. Пример содержится в исходных кодах: /src/romip_base/wf/example.java
package romip_base.wf;

import java.lang.Math;
import romip_base.*;

/* Класс должен быть наследован от класса Prototype */
public class example extends Prototype {
    /* Здесь идет объявление необходимого количества массивов, в которых будут находиться веса согласно некоторыми "весовым компонентам" */
    private double[] wTfIdfNivc = new double[Document.DOCS_COUNT];
    private double[] wPairIdfSumNormed = new double[Document.DOCS_COUNT];
    private double[] wMinWindow = new double[Document.DOCS_COUNT];
    
    /* При помощи данной функции необходимо указать, каким образом нужно заполнить объявленные выше массивы для запроса queries[queryNum] */
    protected void prepareForCalculations(int queryNum) {
        /* Функция класса Prototype, заполняющая массив wMinWindow согласно соответствующему алгоритму 
           Алгоритм описан в функции prepareMinWindow и непосредственно производит выборку из базы данных и необходимые подсчеты */
        prepareMinWindow(queryNum, wMinWindow);
        
       /* prepareCheapArray - не производит никаких вычислений, просто выбирает из соотв таблице (второй агрумент) веса для каждой пары документ-запрос*/
        prepareCheapArray(queryNum, "weights_tfidfnivc", wTfIdfNivc);
        
        /* Можно ставить некоторые условия, чтобы не делать много разных классов и не проводить лишние вычисления */
        if (b > 0) {
            prepareCheapArray(queryNum, "weights_pairidfsumnormed_"+distanceInQuery+"_"+distanceInDocument, wPairIdfSumNormed);
        }       
    }
    
    /* Простая функция для очистки массивов после обработки очередного запроса */
    protected void cleanWeightArrays() {
        /* Необходимо выполнить по разу для каждого объявленного массива */
        cleanArray(wTfIdfNivc);
        cleanArray(wPairIdfSumNormed);
        cleanArray(wMinWindow);
    }
    
    /* Собственно функция, вычисляющая вес для данной пары документ-запрос, основываясь на подсчитанных значениях в массивах
       В простейшем случае, когда есть всего один массив, веса в котором честно вычисляются, возвращает array[documentNum] */
    protected double getWeight(int documentNum, int queryNum) {
        double near;
        if (wMinWindow[documentNum] > 0) {
            near = 1.0/java.lang.Math.log(wMinWindow[documentNum]+4-queries[queryNum].length);
        }
        else {
            near = 0;
        }
        
        /* Используется линейная комбинация с параметрами a, b, c, задающимися при запуске из командной строки */
        return a*wTfIdfNivc[documentNum]+b*wPairIdfSumNormed[documentNum]+c*near;
    }
    
    /* Функция генерации уникального названия для таблицы, в которой будут храниться веса 
       Возвращаемое значение может состоять только из латинских букв, цифр и символов подчеркивания */
    public String getTableName() {
        String tmp = "weights_"+tableName+"__"+a+"__"+b+"__"+c+"__"+distanceInQuery+"_"+distanceInDocument;
        return tmp.replaceAll("\\.", "_");
    }
}
Hosted by uCoz