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 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); } }