在Visual C#中匹配字符串中的字符
发布时间:2020-12-16 01:51:47 所属栏目:百科 来源:网络整理
导读:我正在研究视觉C# 计算单词错误率 我有一个文本框用于参考,这是正确的信号 而一个假设是错误的. 为了计算WER,我需要计算: 替换:已经改变的词,这是我的第一个问题 插入:插入句子中的单词 已删除:已从原始句子中删除的单词 对于EX: 参考:这是一个不良贷
我正在研究视觉C#
计算单词错误率 我有一个文本框用于参考,这是正确的信号 而一个假设是错误的. 为了计算WER,我需要计算: 对于EX: 参考:这是一个不良贷款计划. 它:替代 我尝试了dasblinkenlight提出的算法(非常感谢你的方式) int x= Compute(buffer[j],buffer_ref[i]); 指数数组的边界之外. 这是我的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { string [] hyp = new string[20]; string [] refrence = new string[20]; string [] Anser= new string[20]; string[] buffer = new string[20]; string[] buffer_ref = new string[20]; int count = 0; // number of words string ref2=" " ; string hyp2 = " "; string Anser2 = " "; string buffer2 = " "; int corecct_c=0; int corecct_d = 0; int corecct_i = 0; //==================================================================== public Form1() { InitializeComponent(); for (int i = 0; i <= 19; ++i) { hyp[i] = null; buffer[i] = null; } } private void textBox2_TextChanged(object sender,EventArgs e) { refrence = this.textBox2.Text.Split(' '); buffer_ref = this.textBox2.Text.Split(' '); } private void textBox1_TextChanged(object sender,EventArgs e) { hyp = this.textBox1.Text.Split(' '); buffer = this.textBox1.Text.Split(' '); //hyp = this.textBox1.Text; // fname1.Add(this.textBox1.Text); } public void correct(string[] R) { for (int i = 0; (i <= 19) && (R[i] != "."); ++i) { if (buffer[i] == refrence[i]) { buffer[i] = "0"; buffer_ref[i] = "0"; corecct_c = corecct_c + 1; Anser[i] = "C"; } } } // function that compute 2 strings public static int Compute(string s,string t) { int n = s.Length; int m = t.Length; int[,] d = new int[n + 1,m + 1]; // Step 1 if (n == 0) { return m; } if (m == 0) { return n; } // Step 2 for (int i = 0; i <= n; d[i,0] = i++) { } for (int j = 0; j <= m; d[0,j] = j++) { } // Step 3 for (int i = 1; i <= n; i++) { //Step 4 for (int j = 1; j <= m; j++) { // Step 5 int cost = (t[j - 1] == s[i - 1]) ? 0 : 1; // Step 6 d[i,j] = Math.Min( Math.Min(d[i - 1,j] + 1,d[i,j - 1] + 1),d[i - 1,j - 1] + cost); } } // Step 7 return d[n,m]; } public void sub(){ for (int j = 0;j<=19;j++) { if (buffer[j].IndexOf("0") != -1) { for (int i = 0; i <= 19; i++) { if (buffer_ref[j].IndexOf("0") != -1) { int x= Compute(buffer[j],buffer_ref[i]); if (x > 3) { buffer[j] = "0"; Anser[j] = "S"; } }//end if } }//end if }//end for }// end fun private void button1_Click(object sender,EventArgs e) { correct(refrence); sub(); for (int i = 0; (i <= 19) && (refrence[i] != "."); ++i) { //loop intialize ref2 = ref2 + " " + refrence[i]; hyp2 = hyp2 + " " + hyp[i]; Anser2 = Anser2 + " " + Anser[i]; buffer2 = buffer2 + " " + buffer[i]; count++; } listBox1.Items.Add(" Refrence :" + ref2); listBox1.Items.Add(" HYp :" + hyp2); listBox1.Items.Add(" Anser:" + Anser2); listBox1.Items.Add(" buffer:" + buffer2); listBox1.Items.Add(count); } private void Form1_Load(object sender,EventArgs e) { } private void label1_Click(object sender,EventArgs e) { } private void button2_Click(object sender,EventArgs e) { } private void label2_Click(object sender,EventArgs e) { } private void listBox1_SelectedIndexChanged(object sender,EventArgs e) { } } } 你能帮我吗 ? 解决方法
有一种内置的方法来测试两条线是否相同,但是没有内置的方法来判断两条线是否相似.您需要实现一种测量字符串相似性的算法,例如
Levenshtein Distance – 一种非常常见的
Edit Distance算法.具有较小编辑距离的行可以根据您的要求特定的阈值声明为相似.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |