Esempio n. 1
0
 private void poAutoruToolStripMenuItem_Click(object sender, EventArgs e)
 {
     try
     {
         OdbcConnection connection = new OdbcConnection();
         connection.ConnectionString = "DSN=PostgreSQL35W;UID=masterwordcounter;PWD=masterwordcounter";
         connection.Open();
         string         q           = "SELECT * FROM (SELECT sum(s.num_of_repeats) prosjek, avg(s.pct_of_occurence), s.word_text, t.author FROM stats s, texts t WHERE s.text_id = t.id AND t.author = 'Agatha Christie' AND type_of_stats = 2 GROUP BY s.word_text,t.author ORDER BY prosjek DESC) top_sve OFFSET 0 LIMIT 200";
         OdbcCommand    getAllTexts = new OdbcCommand(q, connection);
         OdbcDataReader odr         = getAllTexts.ExecuteReader();
         int            a           = 0;
         lista_stats_text.Clear();
         double ukupno = 0;
         while (odr.Read())
         {
             a++;
             Statistika s = new Statistika();
             s.Broj_ponavljanja = odr.GetInt32(0);
             s.Procenat_pojave_unutar_teksta = odr.GetDecimal(1) * 100;
             s.Id          = a;
             s.Rijec_tekst = odr.GetString(2);
             lista_stats_text.Add(s);
             ukupno += s.Broj_ponavljanja;
         }
         odr.Close();
         List <koordinate> pravi_rez    = new List <koordinate>();
         List <koordinate> ideal_rez    = new List <koordinate>();
         double            suma_razlike = 0;
         for (int i = 0; i < lista_stats_text.Count; i++)
         {
             if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[i].Broj_ponavljanja)))
             {
                 break;
             }
             if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1))))
             {
                 break;
             }
             koordinate k = new koordinate();
             k.X = Math.Log10(i + 1);
             k.Y = Math.Log10(lista_stats_text[i].Broj_ponavljanja);
             pravi_rez.Add(k);
             koordinate k1 = new koordinate();
             k1.X = Math.Log10(i + 1);
             k1.Y = Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1));
             ideal_rez.Add(k1);
         }
         try
         {
             for (int i = 0; i < pravi_rez.Count; i++)
             {
                 double a1 = Math.Round(Math.Pow((pravi_rez[i].X - ideal_rez[i].X), 2) + Math.Pow((pravi_rez[i].Y - ideal_rez[i].Y), 2), 4);
                 suma_razlike += a1;
                 suma_razlike  = Math.Round(suma_razlike, 4);
             }
         }
         catch (ArithmeticException ae)
         {
             MessageBox.Show(ae.Message);
         }
         double   MSE     = suma_razlike / pravi_rez.Count;
         double[] lista_x = new double[ideal_rez.Count];
         double[] lista_y = new double[ideal_rez.Count];
         int      j       = 0;
         foreach (koordinate k in pravi_rez)
         {
             lista_x[j] = k.X;
             lista_y[j] = k.Y;
             j++;
         }
         double[] f       = Fit.Polynomial(lista_x, lista_y, 2, MathNet.Numerics.LinearRegression.DirectRegressionMethod.NormalEquations);
         var      bestfit = Tuple.Create(0.0, 0.0);
         bestfit           = Fit.Line(lista_x, lista_y);
         l_text_stats.Text = "Date riječi u tabeli predstavljaju " + Math.Round((double)(podsuma / ukupno) * 100, 2) + "% od cijelog teksta. Ukupno posebnih riječi ima " + lista_stats_text.Count + " a cijeli tekst ima " + ukupno + " riječi.";
         l_nastavak.Text   = "Suma odstupanja od idealnog Zipfovog zakona je " + suma_razlike + ", MSE je " + Math.Round(MSE, 5) + ", RMSE je " + Math.Round(Math.Sqrt(MSE), 5) + ". Best-fit polinom za rezultate je y(x) = " + Math.Round(f[1], 2) + "X + " + Math.Round(f[2], 2) + "X ^ 2 + " + Math.Round(f[0], 2);
         if (c_analiza.SelectedIndex == 0)
         {
             MSENDPF = Math.Round(MSE, 5);
         }
         else
         {
             MSEGPDF = Math.Round(MSE, 5);
         }
         if (MSENDPF != 0.0 && MSEGPDF != 0.0)
         {
             StatistikaTekst st = new StatistikaTekst();
             st.Ime_teksta = c_tekst.SelectedItem.ToString();
             st.RMSE_G1    = MSEGPDF;
             st.RMSE_N1    = MSENDPF;
             double h = Math.Round(st.RMSE_N1 - st.RMSE_G1, 5);
             st.Pct_diff = Math.Round(h / st.RMSE_N1, 5);
             if (st.Pct_diff > 1)
             {
                 st.Pct_diff = st.Pct_diff - 1;
             }
             lista_PDF.Add(st);
             MSEGPDF = 0.0;
             MSENDPF = 0.0;
         }
     }
     catch (Exception es)
     {
         MessageBox.Show(es.Message);
     }
 }
        private void saveTextStatsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Tekst trenutni_tekst = (Tekst)(c_tekst.SelectedItem);
            try
            {
                OdbcConnection connection = new OdbcConnection();
                connection.ConnectionString = "DSN=PostgreSQL35W;UID=masterwordcounter;PWD=masterwordcounter";
                connection.Open();
                string q = "SELECT * FROM (SELECT sum(num_of_repeats) prosjek, avg(pct_of_occurence), word_text FROM stats WHERE text_id = ? AND type_of_stats = ? GROUP BY word_text ORDER BY prosjek DESC) top_sve";
                OdbcCommand getAllTexts = new OdbcCommand(q, connection);
                getAllTexts.Parameters.Add("@text_id", OdbcType.Int).Value = trenutni_tekst.Id;
                getAllTexts.Parameters.Add("@type_of_stats", OdbcType.Int).Value = c_analiza.SelectedIndex+1;
                OdbcDataReader odr = getAllTexts.ExecuteReader();
                int a = 0;
                lista_stats_text.Clear();
                double ukupno = 0;
                while (odr.Read())
                {
                    a++;
                    Statistika s = new Statistika();
                    s.Broj_ponavljanja = odr.GetInt32(0);
                    s.Procenat_pojave_unutar_teksta = odr.GetDecimal(1) * 100;
                    s.Id = a;
                    s.Rijec_tekst = odr.GetString(2);
                    lista_stats_text.Add(s);
                    ukupno += s.Broj_ponavljanja;
                }
                odr.Close();
                List<koordinate> pravi_rez = new List<koordinate>();
                List<koordinate> ideal_rez = new List<koordinate>();
                double suma_razlike = 0;
                for (int i = 0; i < lista_stats_text.Count; i++)
                {
                    if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[i].Broj_ponavljanja)))
                        break;
                    if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1))))
                        break;
                    koordinate k = new koordinate();
                    k.X = Math.Log10(i + 1);
                    k.Y = Math.Log10(lista_stats_text[i].Broj_ponavljanja);
                    pravi_rez.Add(k);
                    koordinate k1 = new koordinate();
                    k1.X = Math.Log10(i + 1);
                    k1.Y = Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1));
                    ideal_rez.Add(k1);
                }
                try {
                    for (int i = 0; i < pravi_rez.Count; i++)
                    {
                        double a1 = Math.Round(Math.Pow((pravi_rez[i].X - ideal_rez[i].X), 2) + Math.Pow((pravi_rez[i].Y - ideal_rez[i].Y), 2), 4);
                        suma_razlike += a1;
                        suma_razlike = Math.Round(suma_razlike, 4);
                    }

                }
                catch (ArithmeticException ae)
                {
                    MessageBox.Show(ae.Message);
                }
                double MSE = suma_razlike / pravi_rez.Count;
                double[] lista_x = new double[ideal_rez.Count];
                double[] lista_y = new double[ideal_rez.Count];
                int j = 0;
                foreach (koordinate k in pravi_rez)
                {
                    lista_x[j] = k.X;
                    lista_y[j] = k.Y;
                    j++;
                }
                double[] f = Fit.Polynomial(lista_x, lista_y, 2, MathNet.Numerics.LinearRegression.DirectRegressionMethod.NormalEquations);
                var bestfit = Tuple.Create(0.0,0.0);
                bestfit = Fit.Line(lista_x, lista_y);
                l_text_stats.Text = "Date riječi u tabeli predstavljaju "+ Math.Round((double)(podsuma/ukupno)*100,2)  +"% od cijelog teksta. Ukupno posebnih riječi ima "+lista_stats_text.Count + " a cijeli tekst ima " + ukupno+" riječi.";
                l_nastavak.Text = "Suma odstupanja od idealnog Zipfovog zakona je "+suma_razlike+", MSE je "+Math.Round(MSE,5)+", RMSE je "+Math.Round(Math.Sqrt(MSE),5)+". Best-fit polinom za rezultate je y(x) = "+Math.Round(f[1],2)+"X + "+Math.Round(f[2],2)+"X ^ 2 + "+Math.Round(f[0],2);
                if (c_analiza.SelectedIndex == 0) MSENDPF = Math.Round(MSE, 5);
                    else MSEGPDF = Math.Round(MSE, 5);
                if (MSENDPF != 0.0 && MSEGPDF != 0.0)
                {
                    StatistikaTekst st = new StatistikaTekst();
                    st.Ime_teksta = c_tekst.SelectedItem.ToString();
                    st.RMSE_G1 = MSEGPDF;
                    st.RMSE_N1 = MSENDPF;
                    double h = Math.Round(st.RMSE_N1 - st.RMSE_G1, 5);
                    st.Pct_diff = Math.Round(h / st.RMSE_N1, 5);
                    if (st.Pct_diff > 1) st.Pct_diff = st.Pct_diff - 1;
                    lista_PDF.Add(st);
                    MSEGPDF = 0.0;
                    MSENDPF = 0.0;
                }
            }
            catch (Exception es)
            {
                MessageBox.Show(es.Message);
            }
        }