private void button5_Click(object sender, EventArgs e)
        {
            Statistika s = new Statistika();
            int tip = 0;
            if (Gramatika) tip = 2;
            else tip = 1;
            OdbcConnection connection = new OdbcConnection();
            connection.ConnectionString = "DSN=PostgreSQL35W;UID=masterwordcounter;PWD=masterwordcounter";
            connection.Open();
            int Rank = 0;
            int ukupno_rijeci = 0;
            foreach(Rijec r in lista_rijeci)
            {
                ukupno_rijeci += r.Ponavljanje;
            }
            if (!Gramatika)
            {
                foreach (Rijec r in lista_rijeci)
                {
                    Rank++;
                    s.Rijec_id = r.Id;
                    s.Tekst_id = tekst.Id;
                    s.Broj_ponavljanja = r.Ponavljanje;
                    s.Tip_statistike = tip;
                    s.Rank_unutar_teksta = Rank;
                    s.Procenat_pojave_unutar_teksta = Decimal.Round((Decimal)r.Ponavljanje / ukupno_rijeci, 3);
                    string q = "INSERT INTO stats (word_id,word_text,text_id,type_of_stats,num_of_repeats,rank_in_text,pct_of_occurence) VALUES (?,?,?,?,?,?,?);";
                    OdbcCommand insertStat = new OdbcCommand(q, connection);
                    insertStat.Parameters.Add("@word_id", OdbcType.Numeric).Value = 5445;
                    insertStat.Parameters.Add("@word_text", OdbcType.Char).Value = r.Tekst;
                    insertStat.Parameters.Add("@text_id", OdbcType.Numeric).Value = s.Tekst_id;
                    insertStat.Parameters.Add("@type_of_stats", OdbcType.Numeric).Value = s.Tip_statistike;
                    insertStat.Parameters.Add("@num_of_repeats", OdbcType.Numeric).Value = s.Broj_ponavljanja;
                    insertStat.Parameters.Add("@rank_in_text", OdbcType.Numeric).Value = s.Rank_unutar_teksta;
                    insertStat.Parameters.Add("@pct_of_occurence", OdbcType.Real).Value = s.Procenat_pojave_unutar_teksta;
                    insertStat.ExecuteNonQuery();

                }
            }
            else
            {
                foreach (Rijec r in lista_rijeci_poslije_gramatike)
                {
                    Rank++;
                    s.Rijec_id = r.Id;
                    s.Tekst_id = tekst.Id;
                    s.Broj_ponavljanja = r.Ponavljanje;
                    s.Tip_statistike = tip;
                    s.Rank_unutar_teksta = Rank;
                    s.Procenat_pojave_unutar_teksta = Decimal.Round((Decimal)r.Ponavljanje / ukupno_rijeci, 3);
                    string q = "INSERT INTO stats (word_id,word_text,text_id,type_of_stats,num_of_repeats,rank_in_text,pct_of_occurence) VALUES (?,?,?,?,?,?,?);";
                    OdbcCommand insertStat = new OdbcCommand(q, connection);
                    insertStat.Parameters.Add("@word_id", OdbcType.Numeric).Value = 5445;
                    insertStat.Parameters.Add("@word_text", OdbcType.Char).Value = r.Tekst;
                    insertStat.Parameters.Add("@text_id", OdbcType.Numeric).Value = s.Tekst_id;
                    insertStat.Parameters.Add("@type_of_stats", OdbcType.Numeric).Value = s.Tip_statistike;
                    insertStat.Parameters.Add("@num_of_repeats", OdbcType.Numeric).Value = s.Broj_ponavljanja;
                    insertStat.Parameters.Add("@rank_in_text", OdbcType.Numeric).Value = s.Rank_unutar_teksta;
                    insertStat.Parameters.Add("@pct_of_occurence", OdbcType.Real).Value = s.Procenat_pojave_unutar_teksta;
                    insertStat.ExecuteNonQuery();

                }
            }
            MessageBox.Show("Unešena statistika!");
        }
Exemple #2
0
 private void calculateStats(String type_of_text_amount, int type_of_stats)
 {
     try {
         if (type_of_text_amount.Equals("Svi tekstovi"))
         {
             int broj_rez = (int)(numericUpDown1.Value);
             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 GROUP BY word_text ORDER BY prosjek DESC) top_sve LIMIT ? OFFSET 0";
                 OdbcCommand getAllTexts = new OdbcCommand(q, connection);
                 getAllTexts.Parameters.Add("@OFFSET", OdbcType.Int).Value = broj_rez;
                 OdbcDataReader odr = getAllTexts.ExecuteReader();
                 int            a   = 0;
                 lista_stats.Clear();
                 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.Add(s);
                 }
                 dataGridView1.DataSource = null;
                 dataGridView1.DataSource = lista_stats;
                 connection.Close();
                 dataGridView1.Columns["Rijec_id"].Visible           = false;
                 dataGridView1.Columns["Tekst_id"].Visible           = false;
                 dataGridView1.Columns["Tip_statistike"].Visible     = false;
                 dataGridView1.Columns["Rank_unutar_teksta"].Visible = false;
                 chart1.Series["Rijec"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                 {
                     chart1.Series["Rijec"].Points.AddXY(i + 1, lista_stats[i].Broj_ponavljanja);
                 }
                 chart1.ChartAreas[0].AxisX.Maximum = broj_rez;
                 chart1.ChartAreas[0].AxisX.Minimum = 0;
                 chart1.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(lista_stats[0].Broj_ponavljanja);
                 chart1.ChartAreas[0].AxisY.Minimum = 0;
                 chart2.Series["Rijec"].Points.Clear();
                 chart2.Series["LinearPlot"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                 {
                     chart2.Series["Rijec"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[i].Broj_ponavljanja));
                     chart2.Series["LinearPlot"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[0].Broj_ponavljanja / (i + 1)));
                 }
                 chart2.ChartAreas[0].AxisX.Maximum = Math.Log10(broj_rez);
                 chart2.ChartAreas[0].AxisX.Minimum = 0;
                 chart2.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(Math.Log10(lista_stats[0].Broj_ponavljanja));
                 chart2.ChartAreas[0].AxisY.Minimum = Math.Log10(lista_stats[lista_stats.Count - 1].Broj_ponavljanja);
                 odr.Close();
             }
             catch (Exception es)
             {
                 MessageBox.Show(es.Message);
             }
         }
         if (type_of_text_amount.Equals("Pojedinačan tekst"))
         {
             Tekst trenutni_tekst = (Tekst)(c_tekst.SelectedItem);
             int   broj_rez       = (int)(numericUpDown1.Value);
             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 LIMIT ? OFFSET 0";
                 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 = type_of_stats;
                 getAllTexts.Parameters.Add("@OFFSET", OdbcType.Int).Value        = broj_rez;
                 OdbcDataReader odr = getAllTexts.ExecuteReader();
                 int            a   = 0;
                 podsuma = 0;
                 lista_stats.Clear();
                 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.Add(s);
                     podsuma += s.Broj_ponavljanja;
                 }
                 dataGridView1.DataSource = null;
                 dataGridView1.DataSource = lista_stats;
                 connection.Close();
                 dataGridView1.Columns["Rijec_id"].Visible           = false;
                 dataGridView1.Columns["Tekst_id"].Visible           = false;
                 dataGridView1.Columns["Tip_statistike"].Visible     = false;
                 dataGridView1.Columns["Rank_unutar_teksta"].Visible = false;
                 odr.Close();
                 chart1.Series["Rijec"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                 {
                     chart1.Series["Rijec"].Points.AddXY(i + 1, lista_stats[i].Broj_ponavljanja);
                 }
                 chart1.ChartAreas[0].AxisX.Maximum = broj_rez;
                 chart1.ChartAreas[0].AxisX.Minimum = 0;
                 chart1.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(lista_stats[0].Broj_ponavljanja);
                 chart1.ChartAreas[0].AxisY.Minimum = 0;
                 chart2.Series["Rijec"].Points.Clear();
                 chart2.Series["LinearPlot"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                 {
                     chart2.Series["Rijec"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[i].Broj_ponavljanja));
                     chart2.Series["LinearPlot"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[0].Broj_ponavljanja / (i + 1)));
                 }
                 chart2.ChartAreas[0].AxisX.Maximum = Math.Log10(broj_rez);
                 chart2.ChartAreas[0].AxisX.Minimum = 0;
                 chart2.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(Math.Log10(lista_stats[0].Broj_ponavljanja));
                 chart2.ChartAreas[0].AxisY.Minimum = Math.Log10(lista_stats[lista_stats.Count - 1].Broj_ponavljanja);
             }
             catch (Exception es)
             {
                 MessageBox.Show(es.Message);
             }
         }
         saveTextStatsToolStripMenuItem.PerformClick();
     }
     catch (Exception es2)
     {
         MessageBox.Show(es2.Message);
     }
 }
Exemple #3
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 button5_Click(object sender, EventArgs e)
        {
            Statistika s   = new Statistika();
            int        tip = 0;

            if (Gramatika)
            {
                tip = 2;
            }
            else
            {
                tip = 1;
            }
            OdbcConnection connection = new OdbcConnection();

            connection.ConnectionString = "DSN=PostgreSQL35W;UID=masterwordcounter;PWD=masterwordcounter";
            connection.Open();
            int Rank          = 0;
            int ukupno_rijeci = 0;

            foreach (Rijec r in lista_rijeci)
            {
                ukupno_rijeci += r.Ponavljanje;
            }
            if (!Gramatika)
            {
                foreach (Rijec r in lista_rijeci)
                {
                    Rank++;
                    s.Rijec_id                      = r.Id;
                    s.Tekst_id                      = tekst.Id;
                    s.Broj_ponavljanja              = r.Ponavljanje;
                    s.Tip_statistike                = tip;
                    s.Rank_unutar_teksta            = Rank;
                    s.Procenat_pojave_unutar_teksta = Decimal.Round((Decimal)r.Ponavljanje / ukupno_rijeci, 3);
                    string      q          = "INSERT INTO stats (word_id,word_text,text_id,type_of_stats,num_of_repeats,rank_in_text,pct_of_occurence) VALUES (?,?,?,?,?,?,?);";
                    OdbcCommand insertStat = new OdbcCommand(q, connection);
                    insertStat.Parameters.Add("@word_id", OdbcType.Numeric).Value        = 5445;
                    insertStat.Parameters.Add("@word_text", OdbcType.Char).Value         = r.Tekst;
                    insertStat.Parameters.Add("@text_id", OdbcType.Numeric).Value        = s.Tekst_id;
                    insertStat.Parameters.Add("@type_of_stats", OdbcType.Numeric).Value  = s.Tip_statistike;
                    insertStat.Parameters.Add("@num_of_repeats", OdbcType.Numeric).Value = s.Broj_ponavljanja;
                    insertStat.Parameters.Add("@rank_in_text", OdbcType.Numeric).Value   = s.Rank_unutar_teksta;
                    insertStat.Parameters.Add("@pct_of_occurence", OdbcType.Real).Value  = s.Procenat_pojave_unutar_teksta;
                    insertStat.ExecuteNonQuery();
                }
            }
            else
            {
                foreach (Rijec r in lista_rijeci_poslije_gramatike)
                {
                    Rank++;
                    s.Rijec_id                      = r.Id;
                    s.Tekst_id                      = tekst.Id;
                    s.Broj_ponavljanja              = r.Ponavljanje;
                    s.Tip_statistike                = tip;
                    s.Rank_unutar_teksta            = Rank;
                    s.Procenat_pojave_unutar_teksta = Decimal.Round((Decimal)r.Ponavljanje / ukupno_rijeci, 3);
                    string      q          = "INSERT INTO stats (word_id,word_text,text_id,type_of_stats,num_of_repeats,rank_in_text,pct_of_occurence) VALUES (?,?,?,?,?,?,?);";
                    OdbcCommand insertStat = new OdbcCommand(q, connection);
                    insertStat.Parameters.Add("@word_id", OdbcType.Numeric).Value        = 5445;
                    insertStat.Parameters.Add("@word_text", OdbcType.Char).Value         = r.Tekst;
                    insertStat.Parameters.Add("@text_id", OdbcType.Numeric).Value        = s.Tekst_id;
                    insertStat.Parameters.Add("@type_of_stats", OdbcType.Numeric).Value  = s.Tip_statistike;
                    insertStat.Parameters.Add("@num_of_repeats", OdbcType.Numeric).Value = s.Broj_ponavljanja;
                    insertStat.Parameters.Add("@rank_in_text", OdbcType.Numeric).Value   = s.Rank_unutar_teksta;
                    insertStat.Parameters.Add("@pct_of_occurence", OdbcType.Real).Value  = s.Procenat_pojave_unutar_teksta;
                    insertStat.ExecuteNonQuery();
                }
            }
            MessageBox.Show("Unešena statistika!");
        }
 private void calculateStats(String type_of_text_amount, int type_of_stats)
 {
     try {
         if (type_of_text_amount.Equals("Svi tekstovi"))
         {
             int broj_rez = (int)(numericUpDown1.Value);
             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 GROUP BY word_text ORDER BY prosjek DESC) top_sve LIMIT ? OFFSET 0";
                 OdbcCommand getAllTexts = new OdbcCommand(q, connection);
                 getAllTexts.Parameters.Add("@OFFSET", OdbcType.Int).Value = broj_rez;
                 OdbcDataReader odr = getAllTexts.ExecuteReader();
                 int a = 0;
                 lista_stats.Clear();
                 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.Add(s);
                 }
                 dataGridView1.DataSource = null;
                 dataGridView1.DataSource = lista_stats;
                 connection.Close();
                 dataGridView1.Columns["Rijec_id"].Visible = false;
                 dataGridView1.Columns["Tekst_id"].Visible = false;
                 dataGridView1.Columns["Tip_statistike"].Visible = false;
                 dataGridView1.Columns["Rank_unutar_teksta"].Visible = false;
                 chart1.Series["Rijec"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                     chart1.Series["Rijec"].Points.AddXY(i + 1, lista_stats[i].Broj_ponavljanja);
                 chart1.ChartAreas[0].AxisX.Maximum = broj_rez;
                 chart1.ChartAreas[0].AxisX.Minimum = 0;
                 chart1.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(lista_stats[0].Broj_ponavljanja);
                 chart1.ChartAreas[0].AxisY.Minimum = 0;
                 chart2.Series["Rijec"].Points.Clear();
                 chart2.Series["LinearPlot"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                 {
                     chart2.Series["Rijec"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[i].Broj_ponavljanja));
                     chart2.Series["LinearPlot"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[0].Broj_ponavljanja / (i + 1)));
                 }
                 chart2.ChartAreas[0].AxisX.Maximum = Math.Log10(broj_rez);
                 chart2.ChartAreas[0].AxisX.Minimum = 0;
                 chart2.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(Math.Log10(lista_stats[0].Broj_ponavljanja));
                 chart2.ChartAreas[0].AxisY.Minimum = Math.Log10(lista_stats[lista_stats.Count - 1].Broj_ponavljanja);
                 odr.Close();
             }
             catch (Exception es)
             {
                 MessageBox.Show(es.Message);
             }
         }
         if (type_of_text_amount.Equals("Pojedinačan tekst"))
         {
             Tekst trenutni_tekst = (Tekst)(c_tekst.SelectedItem);
             int broj_rez = (int)(numericUpDown1.Value);
             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 LIMIT ? OFFSET 0";
                 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 = type_of_stats;
                 getAllTexts.Parameters.Add("@OFFSET", OdbcType.Int).Value = broj_rez;
                 OdbcDataReader odr = getAllTexts.ExecuteReader();
                 int a = 0;
                 podsuma = 0;
                 lista_stats.Clear();
                 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.Add(s);
                     podsuma += s.Broj_ponavljanja;
                 }
                 dataGridView1.DataSource = null;
                 dataGridView1.DataSource = lista_stats;
                 connection.Close();
                 dataGridView1.Columns["Rijec_id"].Visible = false;
                 dataGridView1.Columns["Tekst_id"].Visible = false;
                 dataGridView1.Columns["Tip_statistike"].Visible = false;
                 dataGridView1.Columns["Rank_unutar_teksta"].Visible = false;
                 odr.Close();
                 chart1.Series["Rijec"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                     chart1.Series["Rijec"].Points.AddXY(i + 1, lista_stats[i].Broj_ponavljanja);
                 chart1.ChartAreas[0].AxisX.Maximum = broj_rez;
                 chart1.ChartAreas[0].AxisX.Minimum = 0;
                 chart1.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(lista_stats[0].Broj_ponavljanja);
                 chart1.ChartAreas[0].AxisY.Minimum = 0;
                 chart2.Series["Rijec"].Points.Clear();
                 chart2.Series["LinearPlot"].Points.Clear();
                 for (int i = 0; i < lista_stats.Count; i++)
                 {
                     chart2.Series["Rijec"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[i].Broj_ponavljanja));
                     chart2.Series["LinearPlot"].Points.AddXY(Math.Log10(i + 1), Math.Log10(lista_stats[0].Broj_ponavljanja / (i + 1)));
                 }
                 chart2.ChartAreas[0].AxisX.Maximum = Math.Log10(broj_rez);
                 chart2.ChartAreas[0].AxisX.Minimum = 0;
                 chart2.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(Math.Log10(lista_stats[0].Broj_ponavljanja));
                 chart2.ChartAreas[0].AxisY.Minimum = Math.Log10(lista_stats[lista_stats.Count - 1].Broj_ponavljanja);
             }
             catch (Exception es)
             {
                 MessageBox.Show(es.Message);
             }
         }
         saveTextStatsToolStripMenuItem.PerformClick();
     }
     catch(Exception es2)
     {
         MessageBox.Show(es2.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);
            }
        }