private bool ComputeValue(AbstractQuantifierSetting setting, out double value) { TwoDimensionalContingencyTable tableA = new TwoDimensionalContingencyTable(setting.firstContingencyTableRows); tableA.StartColumnBound = ColumnFrom; tableA.StartRowBound = RowFrom; tableA.EndColumnBound = ColumnTo; tableA.EndRowBound = RowTo; TwoDimensionalContingencyTable tableB = new TwoDimensionalContingencyTable(setting.secondContingencyTableRows); tableB.StartColumnBound = ColumnFrom; tableB.StartRowBound = RowFrom; tableB.EndColumnBound = ColumnTo; tableB.EndRowBound = RowTo; if (ContingencyTable.IsOperationModeOverQuantifierValues(OperationMode)) { double valueA; bool resultA = tableA.AnyValue(Relation, Treshold, Units, setting.allObjectsCount, out valueA); double valueB; bool resultB = tableB.AnyValue(Relation, Treshold, Units, setting.allObjectsCount, out valueB); value = TwoDimensionalContingencyTable.Combine(valueA, valueB, OperationMode); if (resultA && resultB) return true; else return false; } else { TwoDimensionalContingencyTable combinedTable = ContingencyTable.Combine<TwoDimensionalContingencyTable>(tableA, tableB, OperationMode); return combinedTable.AnyValue(Relation, Treshold, Units, setting.allObjectsCount, out value); } }
/// <summary> /// Gets the validity of the quantifier. /// </summary> /// <param name="setting">The setting.</param> /// <param name="__current">The __current.</param> /// <returns></returns> public override bool Validity(AbstractQuantifierSetting setting, Ice.Current __current) { TwoDimensionalContingencyTable table = new TwoDimensionalContingencyTable(setting.firstContingencyTableRows); table.StartColumnBound = ColumnFrom; table.StartRowBound = RowFrom; table.EndColumnBound = ColumnTo; table.EndRowBound = RowTo; double result; return table.AnyValue(Relation, Treshold, Units, setting.allObjectsCount, out result); }
/// <summary> /// Gets the value of the quantifier above specified <c>setting</c>. /// </summary> /// <param name="setting">The setting.</param> /// <param name="__current">The __current.</param> /// <returns></returns> public override double Value(AbstractQuantifierSetting setting, Ice.Current __current) { TwoDimensionalContingencyTable table = new TwoDimensionalContingencyTable(setting.firstContingencyTableRows); table.StartColumnBound = ColumnFrom; table.StartRowBound = RowFrom; table.EndColumnBound = ColumnTo; table.EndRowBound = RowTo; return ContingencyTable.Value<TwoDimensionalContingencyTable>( valueFunctionDelegate, table, Units, setting.allObjectsCount); }
/// <summary> /// SumOfMaximumsOfRows (sometimes also FunctionSumOfRows) /// </summary> /// <remarks>See [032 Zadání pro KL-Miner.doc] chapter 4.1.1.</remarks> public static double SumOfRowMaximumsValue(TwoDimensionalContingencyTable table) { long sumOfRowMax = 0; long rowMax; long sum = 0; int firstColumnIndex = table.FirstColumnIndex; int lastColumnIndex = table.LastColumnIndex; for (int rowIndex = table.FirstRowIndex; rowIndex <= table.LastRowIndex; rowIndex++) { rowMax = long.MinValue; for (int columnIndex = firstColumnIndex; columnIndex <= lastColumnIndex; columnIndex++) { sum += table.Table[rowIndex, columnIndex]; rowMax = Math.Max(rowMax, table.Table[rowIndex, columnIndex]); } sumOfRowMax += rowMax; } return sumOfRowMax / ((double)table.Denominator * sum); }
/// <summary> /// MI*(C,R) = MI(C,R) / min{ H(C), H(R) } /// </summary> /// <remarks>See [055 Náměty pro další vývoj KL-Miner.doc] or [080 Náměty pro další vývoj KL-Miner II.doc].</remarks> public static double MutualInformationNormalizedValue(TwoDimensionalContingencyTable table) { double marginalColumnEntropy = table.MarginalColumnEntropy; double marginalRowEntropy = table.MarginalRowEntropy; return marginalColumnEntropy + marginalRowEntropy - table.JointEntropy / Math.Min(marginalColumnEntropy, marginalRowEntropy); }
/// <summary> /// See [053 Definice KL-kvantifikátorů.pdf] chapter 5.4. /// </summary> public static double KendalValue(TwoDimensionalContingencyTable table) { double denominator = table.Denominator; double p, q, sum, sumOfSecondPowerOfRowSums, sumOfSecondPowerOfColumnSums; p = q = sum = sumOfSecondPowerOfRowSums = sumOfSecondPowerOfColumnSums = 0; int firstRowIndex = table.FirstRowIndex; int lastRowIndex = table.LastRowIndex; int firstColumnIndex = table.FirstColumnIndex; int lastColumnIndex = table.LastColumnIndex; long[] columnSums = new long[lastColumnIndex - firstColumnIndex + 1]; columnSums.Initialize(); #region Initialize qTmp (Q table, P table can be computed from qTmp) // initializes Q table (qTmp) (P table can be computed from Q table) long[,] qTmp = new long[lastRowIndex + 1, lastColumnIndex + 1]; qTmp.Initialize(); //Sum(i>=k,j<=l)Nij where // .. k is row index, // .. l is column index and // .. Nij is number in contingecy table on ij position for (int rowIndex = lastRowIndex; rowIndex >= firstRowIndex; rowIndex--) { for (int columnIndex = firstColumnIndex; columnIndex <= lastColumnIndex; columnIndex++) { if (columnIndex > firstColumnIndex) { // gets left rectangle long leftRectangle = qTmp[rowIndex, columnIndex - 1]; // gets lower rectangle long lowerRectangle = 0; // gets left lower rectangle long leftLowerRectangle = 0; if (rowIndex < lastRowIndex) { lowerRectangle = qTmp[rowIndex + 1, columnIndex]; leftLowerRectangle = qTmp[rowIndex + 1, columnIndex - 1]; } qTmp[rowIndex, columnIndex] = leftRectangle + lowerRectangle - leftLowerRectangle + table.Table[rowIndex, columnIndex]; } else // i.e. (columnIndex == firstColumnIndex) { if (rowIndex < lastRowIndex) qTmp[rowIndex, columnIndex] = qTmp[rowIndex + 1, columnIndex] + table.Table[rowIndex, columnIndex]; else // i.e.(rowIndex == lastRowIndex) qTmp[rowIndex, columnIndex] = table.Table[rowIndex, columnIndex]; } } } #endregion for (int rowIndex = firstRowIndex; rowIndex <= lastRowIndex; rowIndex++) { double rowSum = 0; for (int columnIndex = firstColumnIndex; columnIndex <= lastColumnIndex; columnIndex++) { long item = table.Table[rowIndex, columnIndex]; rowSum += item; columnSums[columnIndex] += item; if (rowIndex < lastRowIndex) { //qSum = Sum(i>k,j<l)Nij where k is row index, l is column index and Nij is number in contingecy table on ij position long qSum = (columnIndex > firstColumnIndex) ? qTmp[rowIndex + 1, columnIndex - 1] : 0; q += item * qSum; //pSum = Sum(i>k,j>l)Nij where k is row index, l is column index and Nij is number in contingecy table on ij position long pSum = qTmp[rowIndex + 1, lastColumnIndex] - qTmp[rowIndex + 1, columnIndex]; p += item * pSum; } } sumOfSecondPowerOfRowSums += Math.Pow(rowSum, 2); sum += rowSum; } for (int columnIndex = firstColumnIndex; columnIndex <= lastColumnIndex; columnIndex++) { sumOfSecondPowerOfColumnSums += Math.Pow(columnSums[columnIndex], 2); } double secondPowerOfSum = Math.Pow(sum, 2); double resultDenominator = Math.Sqrt( (secondPowerOfSum - sumOfSecondPowerOfRowSums) * (secondPowerOfSum - sumOfSecondPowerOfColumnSums) ); double resultNumerator = 2 * (p - q); double result = (resultNumerator / resultDenominator) / Math.Pow(denominator, 2); return result; }
/// <summary> /// Information dependence of R on C /// ID(R|C) = 1 - ( H(R|C) / H(R) ) = 1 - ( ( H(C,R) - H(C) ) / H(R)) /// </summary> /// <remarks>See [055 Náměty pro další vývoj KL-Miner.doc] or [080 Náměty pro další vývoj KL-Miner II.doc].</remarks> public static double InformationDependenceRCValue(TwoDimensionalContingencyTable table) { return 1 - (ConditionalRCEntropyValue(table) / table.MarginalRowEntropy); }
/// <summary> /// H(R|C) = H(C,R) - H(C) /// </summary> /// <remarks>See [055 Náměty pro další vývoj KL-Miner.doc] or [080 Náměty pro další vývoj KL-Miner II.doc].</remarks> public static double ConditionalRCEntropyValue(TwoDimensionalContingencyTable table) { return table.JointEntropy - table.MarginalColumnEntropy; }
/// <summary> /// Gets the chi-square value of the specified <c>table</c>. /// See [053 Definice KL-kvantifikátorů.pdf] chapter 3.1. /// See [055 Náměty pro další vývoj KL-Miner.doc] chapeter 2 /// See [dmw3.pdf] /// </summary> /// <param name="table">The table.</param> /// <returns>Chi-square</returns> public static double ChiSquare(TwoDimensionalContingencyTable table) { //TODO Implement this (KL ChiSquare) return 0; }
/// <summary> /// Returns XML string with all occurences of Active element "KL hypothesis". /// </summary> /// <param name="index">index of data source in FEplugin data sources table</param> /// <returns>XML string</returns> public static string getList(int index) { string resultString = ""; // result XML string // loading DTD to resultString try { resultString = XMLHelper.loadDTD(); } catch (Exception e) { #if (LADENI) MessageBox.Show("error while loading DTD: " + e.Message); #endif return resultString; } // root element resultString += "<active_list>"; string PropName = "Hypotheses"; // name of property which contain a list of hypotheses // searching all boxes KL-uloh IBoxModule[] TaskBoxes = BoxesHelper.ListBoxesWithID(CFEsourcesTab.Sources[index] as CFEsource, "LISpMinerTasks.KLTask"); // processing of each box - searching all KL-hypotheses string ErrStr = ""; // error report string matrix_name = "unknown"; // analyzed data matrix name string db_name="unknown"; // analyzed database name string task_name = "unknown"; // task name - given with user name of box FFTTast #region Loop - processing of each KL-Task from array TaskBoxes foreach (IBoxModule box in TaskBoxes) { try { // searching data source name (database) IBoxModule[] db_names = BoxesHelper.ListAncestBoxesWithID(box, "DataMiningCommon.Database"); if (db_names.GetLength(0) != 1) // searched more than one data source or neither one throw new System.Exception("found " + db_names.GetLength(0).ToString() + " databases"); db_name = (db_names[0].GetPropertyOther("DatabaseName") as StringT).stringValue; // searching data matrix name IBoxModule[] matrix_names = BoxesHelper.ListAncestBoxesWithID(box, "DataMiningCommon.DataMatrix"); if (matrix_names.GetLength(0) != 1) // searched more than one data source or neither one throw new System.Exception("found " + matrix_names.GetLength(0).ToString() + " data matrixes"); matrix_name = (matrix_names[0].GetPropertyOther("Name") as StringT).stringValue; // searching task name task_name = box.UserName; // searching the list of all hypotheses in this task HypothesesT HypT = box.GetPropertyOther(PropName) as HypothesesT; HypothesisStruct[] HypList = HypT.hypothesesValue.Clone() as HypothesisStruct[]; // records for storing the results Rec_hyp_KL rHyp = new Rec_hyp_KL(); // KL hypothesis Rec_ti_attribute rAnt = new Rec_ti_attribute(); // Antecedent (Row attributes) Rec_ti_attribute rSuc = new Rec_ti_attribute(); // Succedent (Column attributes) Rec_ti_cedent rCon = new Rec_ti_cedent(); // condition #region Loop - processing of each hypotheses jedne krabicky KLTask // Loop over all hypotheses for (int i = 0; i < HypList.GetLength(0); i++) { #region element hyp_KL rHyp.id = "hypKL" + box.ProjectIdentifier.ToString() + "_" + i.ToString(); rHyp.db_name = db_name; rHyp.matrix_name = matrix_name; rHyp.task_name = task_name; rHyp.row_attributes = "r_attr" + rHyp.id; rHyp.column_attributes = "c_attr" + rHyp.id; rHyp.condition = "con" + rHyp.id; TwoDimensionalContingencyTable CT = new TwoDimensionalContingencyTable(HypList[i].quantifierSetting.firstContingencyTableRows); // Contingency Table rHyp.Tab = HypList[i].quantifierSetting.firstContingencyTableRows; // values of quantifiers - first set try { rHyp.sum = CT.SumOfValues.ToString(); rHyp.min = CT.MinValue.ToString(); rHyp.max = CT.MaxValue.ToString(); rHyp.chi_sq = TwoDimensionalContingencyTable.ChiSquare(CT).ToString(); rHyp.fnc_s = TwoDimensionalContingencyTable.SumOfRowMaximumsValue(CT).ToString(); rHyp.fnc_r = TwoDimensionalContingencyTable.MinOfRowMaximumsValue(CT).ToString(); rHyp.h_c = CT.MarginalColumnEntropy.ToString(); rHyp.h_r = CT.MarginalRowEntropy.ToString(); rHyp.h_c_r = TwoDimensionalContingencyTable.ConditionalCREntropyValue(CT).ToString(); rHyp.mi = CT.MutualInformation.ToString(); //rHyp.aic = CT.???; TODO rHyp.kend = TwoDimensionalContingencyTable.KendalValue(CT).ToString(); } catch (System.Exception e) // There are some errors in Ferda quantifier values! { ErrStr += "Box ProjectIdentifier=" + box.ProjectIdentifier.ToString() + ": chyba pri vypoctu kvantifikatoru: " + e.Message + "\n"; } #endregion #region element ti_attribute Row attributes (Antecedent) rAnt.id = rHyp.row_attributes; rAnt.type = "Row attributes"; rAnt.quant = ""; // deleting previous value // category List<Rec_ti_category> Cat_a = new List<Rec_ti_category>(); foreach (LiteralStruct lit in HypList[i].literals) { if (lit.cedentType == CedentEnum.Antecedent) { rAnt.quant += lit.literalName; foreach (string s in lit.categoriesNames) { Rec_ti_category C = new Rec_ti_category(); C.value = s; Cat_a.Add(C); } // ??? k cemu je polozka LitralStruct.categoriesValues ? } } #endregion #region element ti_attribute Column attributes (Succedent) rSuc.id = rHyp.column_attributes; rSuc.type = "Column attributes"; rSuc.quant = ""; // deleting previous value // category List<Rec_ti_category> Cat_s = new List<Rec_ti_category>(); foreach (LiteralStruct lit in HypList[i].literals) { if (lit.cedentType == CedentEnum.Succedent) { rSuc.quant += lit.literalName; foreach (string s in lit.categoriesNames) { Rec_ti_category C = new Rec_ti_category(); C.value = s; Cat_s.Add(C); } // ??? k cemu je polozka LitralStruct.categoriesValues ? } } #endregion #region element ti_cedent (Condition) rCon.id = "con" + rHyp.id; rCon.type = "Condition"; // literals int litCounter = 0; // counter of literals of this hypotheses List<Rec_ti_literal> Lit_c = new List<Rec_ti_literal>(); foreach (BooleanLiteralStruct lit in HypList[i].booleanLiterals) { if (lit.cedentType == CedentEnum.Condition) { Rec_ti_literal l = new Rec_ti_literal(); l.id = "tiLit" + rHyp.id + "_" + litCounter.ToString(); litCounter++; if (lit.negation) l.quant = "¬"; l.quant += lit.literalName; int counter = 0; foreach (string s in lit.categoriesNames) { if (counter > 0) l.value += ","; l.value += s; counter++; } Lit_c.Add(l); } } #endregion #region Generating of one hypotheses to XML string string oneHypString = ""; // generating hypotheses to XML oneHypString += rHyp.ToXML(); // generating Row attributes (Antecedent) to XML oneHypString += rAnt.ToXML(Cat_a); // generating Column attributes (Succedent) to XML oneHypString += rSuc.ToXML(Cat_s); // generating Condition to XML oneHypString += rCon.ToXML(Lit_c); resultString += oneHypString; #endregion } #endregion } catch (System.Exception e) { ErrStr += "Box ProjectIdentifier=" + box.ProjectIdentifier.ToString() + ": " + e.Message + "\n"; } } #endregion // root element resultString += "</active_list>"; #if (LADENI) // generating of error message: if (!String.IsNullOrEmpty(ErrStr)) // LADICI MessageBox.Show("Pri nacitani KL hypotheses doslo k chybam:\n" + ErrStr, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); // LADICI - Kody - storing output to file "XMLsd4fthypExample.xml" in directory XMLHelper.saveXMLexample(resultString, "../XML/XMLKLhypExample.xml"); #endif return resultString; }
/// <summary> /// Returns XML string with all occurences of Active element "SD-KL hypothesis". /// </summary> /// <param name="index">index of data source in FEplugin data sources table</param> /// <returns>XML string</returns> public static string getList(int index) { string resultString = ""; // result XML string // loading DTD to resultString try { resultString = XMLHelper.loadDTD(); } catch (Exception e) { #if (LADENI) MessageBox.Show("error while loading DTD: " + e.Message); #endif return resultString; } // root element resultString += "<active_list>"; string PropName = "Hypotheses"; // name of property which contain a list of hypotheses // searching all boxes SD-KL-tasks IBoxModule[] TaskBoxes = BoxesHelper.ListBoxesWithID(CFEsourcesTab.Sources[index] as CFEsource, "LISpMinerTasks.SDKLTask"); // processing of each box - searching all KL-hypotheses string ErrStr = ""; // error report string matrix_name = "unknown"; // analyzed data matrix name string db_name="unknown"; // analyzed database name string task_name = "unknown"; // task name - given with user name of box FFTTast // creatind delegates for functions of quantifiers // "sum of values" ContingencyTable.QuantifierValue<TwoDimensionalContingencyTable> sum_delegat = new ContingencyTable.QuantifierValue<TwoDimensionalContingencyTable>(TwoDimensionalContingencyTable.GetSumOfValues); // "min value" ContingencyTable.QuantifierValue<TwoDimensionalContingencyTable> min_delegat = new ContingencyTable.QuantifierValue<TwoDimensionalContingencyTable>(TwoDimensionalContingencyTable.GetMinValue); // "max value" ContingencyTable.QuantifierValue<TwoDimensionalContingencyTable> max_delegat = new ContingencyTable.QuantifierValue<TwoDimensionalContingencyTable>(TwoDimensionalContingencyTable.GetMaxValue); #region Loop - processing of each KL-Task from array TaskBoxes foreach (IBoxModule box in TaskBoxes) { try { // searching data source name (database) IBoxModule[] db_names = BoxesHelper.ListAncestBoxesWithID(box, "DataMiningCommon.Database"); if (db_names.GetLength(0) != 1) // searched more than one data source or neither one throw new System.Exception("found " + db_names.GetLength(0).ToString() + " databases"); db_name = (db_names[0].GetPropertyOther("DatabaseName") as StringT).stringValue; // searching data matrix name IBoxModule[] matrix_names = BoxesHelper.ListAncestBoxesWithID(box, "DataMiningCommon.DataMatrix"); if (matrix_names.GetLength(0) != 1) // searched more than one data source or neither one throw new System.Exception("found " + matrix_names.GetLength(0).ToString() + " data matrixes"); matrix_name = (matrix_names[0].GetPropertyOther("Name") as StringT).stringValue; // searching task name task_name = box.UserName; // searching the list of all hypotheses in this task HypothesesT HypT = box.GetPropertyOther(PropName) as HypothesesT; HypothesisStruct[] HypList = HypT.hypothesesValue.Clone() as HypothesisStruct[]; // records for storing the results Rec_hyp_SDKL rHyp = new Rec_hyp_SDKL(); // SD-KL hypothesis Rec_ti_attribute rAnt = new Rec_ti_attribute(); // Antecedent (Row attributes) Rec_ti_attribute rSuc = new Rec_ti_attribute(); // Succedent (Column attributes) Rec_ti_cedent rCon = new Rec_ti_cedent(); // condition Rec_ti_cedent rSet1 = new Rec_ti_cedent(); // set 1 Rec_ti_cedent rSet2 = new Rec_ti_cedent(); // set 2 #region Loop - processing of each hypotheses jedne krabicky SDKLTask // Loop over all hypotheses for (int i = 0; i < HypList.GetLength(0); i++) { #region element hyp_SDKL rHyp.id = "hypSDKL" + box.ProjectIdentifier.ToString() + "_" + i.ToString(); rHyp.db_name = db_name; rHyp.matrix_name = matrix_name; rHyp.task_name = task_name; rHyp.row_attributes = "r_attr" + rHyp.id; rHyp.column_attributes = "c_attr" + rHyp.id; rHyp.condition = "con" + rHyp.id; rHyp.set1 = "set1" + rHyp.id; rHyp.set2 = "set2" + rHyp.id; TwoDimensionalContingencyTable CT1 = new TwoDimensionalContingencyTable(HypList[i].quantifierSetting.firstContingencyTableRows); // Contingency Table 1 TwoDimensionalContingencyTable CT2 = new TwoDimensionalContingencyTable(HypList[i].quantifierSetting.secondContingencyTableRows); // Contingency Table 2 rHyp.Tab1 = HypList[i].quantifierSetting.firstContingencyTableRows; rHyp.Tab2 = HypList[i].quantifierSetting.secondContingencyTableRows; // values of quantifiers - set1 try { rHyp.sum1 = CT1.SumOfValues.ToString(); rHyp.min1 = CT1.MinValue.ToString(); rHyp.max1 = CT1.MaxValue.ToString(); rHyp.chi_sq1 = TwoDimensionalContingencyTable.ChiSquare(CT1).ToString(); rHyp.fnc_s1 = TwoDimensionalContingencyTable.SumOfRowMaximumsValue(CT1).ToString(); rHyp.fnc_r1 = TwoDimensionalContingencyTable.MinOfRowMaximumsValue(CT1).ToString(); rHyp.h_c1 = CT1.MarginalColumnEntropy.ToString(); rHyp.h_r1 = CT1.MarginalRowEntropy.ToString(); rHyp.h_c_r1 = TwoDimensionalContingencyTable.ConditionalCREntropyValue(CT1).ToString(); rHyp.mi1 = CT1.MutualInformation.ToString(); //rHyp.aic = CT.???; TODO rHyp.kend1 = TwoDimensionalContingencyTable.KendalValue(CT1).ToString(); } catch (System.Exception e) // TODO: Ferda ma chyby ve vypoctech -> opravit! { ErrStr += "Box ProjectIdentifier=" + box.ProjectIdentifier.ToString() + ": chyba pri vypoctu quantifier: " + e.Message + "\n"; } // values of quantifiers - set2 try { rHyp.sum2 = CT2.SumOfValues.ToString(); rHyp.min2 = CT2.MinValue.ToString(); rHyp.max2 = CT2.MaxValue.ToString(); rHyp.chi_sq2 = TwoDimensionalContingencyTable.ChiSquare(CT2).ToString(); rHyp.fnc_s2 = TwoDimensionalContingencyTable.SumOfRowMaximumsValue(CT2).ToString(); rHyp.fnc_r2 = TwoDimensionalContingencyTable.MinOfRowMaximumsValue(CT2).ToString(); rHyp.h_c2 = CT2.MarginalColumnEntropy.ToString(); rHyp.h_r2 = CT2.MarginalRowEntropy.ToString(); rHyp.h_c_r2 = TwoDimensionalContingencyTable.ConditionalCREntropyValue(CT2).ToString(); rHyp.mi2 = CT2.MutualInformation.ToString(); //rHyp.aic = CT.???; TODO rHyp.kend2 = TwoDimensionalContingencyTable.KendalValue(CT2).ToString(); } catch (System.Exception e) // Ferda ma chyby ve vypoctech! { ErrStr += "Box ProjectIdentifier=" + box.ProjectIdentifier.ToString() + ": chyba pri vypoctu quantifier: " + e.Message + "\n"; } // values of quantifiers - diffrent of set1 a set2 try { rHyp.da_sum = TwoDimensionalContingencyTable.Value<TwoDimensionalContingencyTable>(sum_delegat, CT1, CT2, OperationModeEnum.DifferencesOfAbsoluteFrequencies).ToString(); rHyp.da_min = TwoDimensionalContingencyTable.Value<TwoDimensionalContingencyTable>(min_delegat, CT1, CT2, OperationModeEnum.DifferencesOfAbsoluteFrequencies).ToString(); rHyp.da_max = TwoDimensionalContingencyTable.Value<TwoDimensionalContingencyTable>(max_delegat, CT1, CT2, OperationModeEnum.DifferencesOfAbsoluteFrequencies).ToString(); rHyp.dr_sum = TwoDimensionalContingencyTable.Value<TwoDimensionalContingencyTable>(sum_delegat, CT1, CT2, OperationModeEnum.DifferencesOfRelativeFrequencies).ToString(); rHyp.dr_min = TwoDimensionalContingencyTable.Value<TwoDimensionalContingencyTable>(min_delegat, CT1, CT2, OperationModeEnum.DifferencesOfRelativeFrequencies).ToString(); rHyp.dr_max = TwoDimensionalContingencyTable.Value<TwoDimensionalContingencyTable>(max_delegat, CT1, CT2, OperationModeEnum.DifferencesOfRelativeFrequencies).ToString(); } catch (System.Exception e) // Ferda ma chyby ve vypoctech! { ErrStr += "Box ProjectIdentifier=" + box.ProjectIdentifier.ToString() + ": chyba pri vypoctu quantifier: " + e.Message + "\n"; } #endregion #region element ti_attribute Row attributes (Antecedent) rAnt.id = rHyp.row_attributes; rAnt.type = "Row attributes"; rAnt.quant = ""; // deleting previous value // category List<Rec_ti_category> Cat_a = new List<Rec_ti_category>(); foreach (LiteralStruct lit in HypList[i].literals) { if (lit.cedentType == CedentEnum.Antecedent) { rAnt.quant += lit.literalName; foreach (string s in lit.categoriesNames) { Rec_ti_category C = new Rec_ti_category(); C.value = s; Cat_a.Add(C); } } } #endregion #region element ti_attribute Column attributes (Succedent) rSuc.id = rHyp.column_attributes; rSuc.type = "Column attributes"; rSuc.quant = ""; // deleting previous value // category List<Rec_ti_category> Cat_s = new List<Rec_ti_category>(); foreach (LiteralStruct lit in HypList[i].literals) { if (lit.cedentType == CedentEnum.Succedent) { rSuc.quant += lit.literalName; foreach (string s in lit.categoriesNames) { Rec_ti_category C = new Rec_ti_category(); C.value = s; Cat_s.Add(C); } } } #endregion #region element ti_cedent (Condition) rCon.id = "con" + rHyp.id; rCon.type = "Condition"; // literals int litCounter = 0; // counter of literals of this hypothesis List<Rec_ti_literal> Lit_c = new List<Rec_ti_literal>(); foreach (BooleanLiteralStruct lit in HypList[i].booleanLiterals) { if (lit.cedentType == CedentEnum.Condition) { Rec_ti_literal l = new Rec_ti_literal(); l.id = "tiLit" + rHyp.id + "_" + litCounter.ToString(); litCounter++; if (lit.negation) l.quant = "¬"; l.quant += lit.literalName; int counter = 0; foreach (string s in lit.categoriesNames) { if (counter > 0) l.value += ","; l.value += s; counter++; } Lit_c.Add(l); } } #endregion #region element ti_cedent (Set1) rSet1.id = rHyp.set1; rSet1.type = "First Set"; // literals List<Rec_ti_literal> Lit_s1 = new List<Rec_ti_literal>(); foreach (BooleanLiteralStruct lit in HypList[i].booleanLiterals) { if (lit.cedentType == CedentEnum.FirstSet) { Rec_ti_literal l = new Rec_ti_literal(); l.id = "tiLit" + rHyp.id + "_" + litCounter.ToString(); litCounter++; if (lit.negation) l.quant = "¬"; l.quant += lit.literalName; int counter = 0; foreach (string s in lit.categoriesNames) { if (counter > 0) l.value += ","; l.value += s; counter++; } Lit_s1.Add(l); } } #endregion #region element ti_cedent (Set2) rSet2.id = rHyp.set2; rSet2.type = "Second Set"; // literals List<Rec_ti_literal> Lit_s2 = new List<Rec_ti_literal>(); foreach (BooleanLiteralStruct lit in HypList[i].booleanLiterals) { if (lit.cedentType == CedentEnum.SecondSet) { Rec_ti_literal l = new Rec_ti_literal(); l.id = "tiLit" + rHyp.id + "_" + litCounter.ToString(); litCounter++; if (lit.negation) l.quant = "¬"; l.quant += lit.literalName; int counter = 0; foreach (string s in lit.categoriesNames) { if (counter > 0) l.value += ","; l.value += s; counter++; } Lit_s2.Add(l); } } #endregion #region Generating of one hypothesis to XML string string oneHypString = ""; // generating hypotheses to XML oneHypString += rHyp.ToXML(); // generating Row attributes (Antecedent) to XML oneHypString += rAnt.ToXML(Cat_a); // generating Column attributes (Succedent) to XML oneHypString += rSuc.ToXML(Cat_s); // generating Condition to XML oneHypString += rCon.ToXML(Lit_c); // generating Set1 to XML oneHypString += rSet1.ToXML(Lit_s1); // generating Set2 to XML oneHypString += rSet2.ToXML(Lit_s2); resultString += oneHypString; #endregion } #endregion } catch (System.Exception e) { ErrStr += "Box ProjectIdentifier=" + box.ProjectIdentifier.ToString() + ": " + e.Message + "\n"; } } #endregion // root element resultString += "</active_list>"; #if (LADENI) // generating of error message: if (!String.IsNullOrEmpty(ErrStr)) // LADICI MessageBox.Show("Pri nacitani SD-KL hypotheses doslo k chybam:\n" + ErrStr, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); // LADICI - Kody - storing output to file "XMLsd4fthypExample.xml" in directory XMLHelper.saveXMLexample(resultString, "../XML/XMLsdKLhypExample.xml"); #endif return resultString; }