static public void GenerateIndependentResult()
 {
     foreach (Sentence sentence in Variable.Sentences)
     {
         sentence.IndependentResult = new Result();
     }
     foreach (Label label in Variable.LabelArray)
     {
         //Variable.OutputFile.WriteLine("Start: " + Variable.LabelToString[label]);
         IList <double> Pdatas = new List <double>();
         Initialize(label);
         for (int time = 1; time <= Variable.ConvergeTimeThreshold; ++time)
         {
             //计算Pk
             NoGroupIDSVariable.Pj = CoreFunction.CalculatePj(NoGroupIDSVariable.Sij, time);
             //计算π
             NoGroupIDSVariable.PAkjl = CoreFunction.CalculatePAkjl(new Label[] { label }, NoGroupIDSVariable.Sij, time, -1);
             //计算Sij
             //if (CoreFunction.CalculatePdataAndSij(new Label[] { label }, ref NoGroupIDSVariable.Sij, NoGroupIDSVariable.Pj, NoGroupIDSVariable.Pajl, NoGroupIDSVariable.Mcj, ref NoGroupIDSVariable.Pdata, -1, Pdatas,
             //    new Dictionary<Tuple<Labelset, Labelset>, double>(), new Dictionary<Tuple<Character, Character>, IDictionary<Tuple<Labelset, Labelset>, double>>()))
             //{
             //    ObtainLabelResult(label);
             //    break;
             //}
         }
     }
     OutputResult();
 }
Exemple #2
0
 static public void RunPeTM(PorSForJointje PorS, Smoothing SmoothingBE, BnOrNot bnOrNot)
 {
     double[] accuracyOfPersonalityForEachGroup = new double[GroupVariable.AnnotatorGroups.Length];
     for (int groupIndex = 0; groupIndex < GroupVariable.AnnotatorGroups.Length; ++groupIndex)
     {
         IDictionary <Annotator, IDictionary <Character, IDictionary <Will, double> > > okcx = PersonalityFunction.CalculateOkcx(groupIndex);//模拟人对角色个性的标注,计算一次就不变了
         Mce  mce  = InitializeMce(groupIndex);
         Sije sije = null;
         if (bnOrNot == BnOrNot.Yes)
         {
             sije = InitializeSijeWithBN(mce, groupIndex);
         }
         else
         {
             sije = InitializeSije(mce, groupIndex); //old new
         }
         Pje            pje    = null;               //p(t|e)
         Pdata          pdata  = null;
         IList <double> Pdatas = new List <double>();
         for (int convergeTime = 1; convergeTime <= Variable.ConvergeTimeThreshold; ++convergeTime)
         {
             mce = CalculateMce(sije, groupIndex);
             PAkjl pakjl = CoreFunction.CalculatePAkjl(Variable.LabelArray, sije.ToSij, convergeTime, groupIndex);
             BEkef bekef = PersonalityFunction.CalculateBExy(mce, okcx, SmoothingBE, convergeTime, groupIndex);
             if (PorS == PorSForJointje.P)
             {
                 pje = CalculatePje(sije, convergeTime);
             }
             if (CalculatePdataAndSije(ref sije, pakjl, bekef, pje, mce, okcx, ref pdata, Pdatas, groupIndex))//old/new
             {
                 break;
             }
         }
         IDictionary <Sentence, IDictionary <Will, double> > sic = ObtainBinaryResult(sije, mce, groupIndex);
         WriteBinaryResultFile(sic, mce, groupIndex);
         PersonalityFunction.WriteMVResultFile(mce, groupIndex);
         accuracyOfPersonalityForEachGroup[groupIndex] = PersonalityPaperFunction.AccuracyOfPersonalityForEachGroup(PersonalityVariable.TruePersonality, mce.EstimatedPersonality);
     }
     Function.ConsoleWriteLine("Accuracy Of PeTM: " + PersonalityPaperFunction.AccuracyOfPersonality(accuracyOfPersonalityForEachGroup));
 }
 static public void RunTDDS()
 {
     for (int groupIndex = 0; groupIndex < GroupVariable.AnnotatorGroups.Length; ++groupIndex)
     {
         Initialize(groupIndex);
         IList <double> Pdatas = new List <double>();
         for (int time = 1; time <= Variable.ConvergeTimeThreshold; ++time)
         {
             //计算Pk
             //计算Pk,mcj(consistent:角色c有j标签的概率)
             ChoiceFunction.PriorPj(ref TDDSVariable.Pj, ref TDDSVariable.Mcj, TDDSVariable.Sij, time);
             //计算π
             TDDSVariable.PAkjl = CoreFunction.CalculatePAkjl(Variable.LabelArray, TDDSVariable.Sij, time, groupIndex);
             //计算Sij
             //if (CoreFunction.CalculatePdataAndSij(Variable.LabelArray, ref TDDSVariable.Sij, TDDSVariable.Pj, TDDSVariable.Pajl, TDDSVariable.Mcj, ref TDDSVariable.Pdata, groupIndex, Pdatas,
             //    TDDSVariable.ConditionalPj, TDDSVariable.ConditionalMcj))
             //break;
         }
         DDSFunction.ObtainBinaryResult(TDDSVariable.Sij, "TDDS", groupIndex);
         DDSFunction.ObtainNumericResult(TDDSVariable.Sij, "TDDS", groupIndex);
         Function.WriteBinaryResultFile("TDDS", groupIndex);
     }
 }