/* ----------------------------------------------------------------------- *//** * * @file viterbi.sql_in * @brief concatenate a set of input values into arrays to feed into viterbi c * function and create a human readable view of the output * @date February 2012 * * *//* ----------------------------------------------------------------------- */ m4_include(`SQLCommon.m4') /** * @brief This function creates the specified result_tbl containing top1 labels for the sequence. * @param segment_tbl Name of table containing all the testing sentences. * @param label_tbl Name of table containing all the labels in the label space. * @param result_tbl Name of table storing the best label sequence and the conditional probability. */ CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.vcrf_top1_table( segment_tbl TEXT, label_tbl TEXT, resulttbl_raw TEXT, result_tbl TEXT ) returns TEXT AS $$ PythonFunction(crf, viterbi, vcrf_top1_table) $$ LANGUAGE plpythonu strict m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `MODIFIES SQL DATA', `'); /** * @brief This function implements the Viterbi algorithm which takes the sentence to be label as input and return the top1 labeling for that sentence * @param marray Name of arrays containing m factors * @param rarray Name of arrays containing r factors * @param nlabel Total number of labels in the label space * @returns the top1 label sequence, the last two elements in the array is used to calculate the top1 probability */ CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.vcrf_top1_label(mArray DOUBLE PRECISION[], rArray DOUBLE PRECISION[], nlabel int) returns int[] as 'MODULE_PATHNAME' language c strict; /** * @brief This function prepares the inputs for the c function 'vcrf_top1_label' and invoke the c function. * @param segment_tbl Name of table containing all the testing sentences. * @param factor_mtbl Name of table containing all the m factors. * @param factor_rtbl Name of table containing all the r factors. * @param label_tbl Name of table containing all the labels in the label space. * @param result_tbl Name of table to store the output * @returns the top1 label sequence, the last two elements in the array is used to calculate the top1 probability */ CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.vcrf_label( segment_tbl TEXT, factor_mtbl TEXT, factor_rtbl TEXT, label_tbl TEXT, result_tbl TEXT ) RETURNS TEXT AS $$ PythonFunction(crf, viterbi, vcrf_label) $$ LANGUAGE plpythonu m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `MODIFIES SQL DATA', `');