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
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("\\.", "_");
}
}