这是一个读取CSV文件的程序,将值添加到字典类中,然后分析文本框中的字符串以查看是否有任何单词与字典条目匹配。它将缩写(LOL,ROFL等)替换为真实的单词。它通过将输入的文本分成单个单词来匹配字符串。
public void btnanalyze_Click(object sender, EventArgs e)
{
var abbrev = new Dictionary<string, string>();
using (StreamReader reader = new StreamReader("C:/Users/Jordan Moffat/Desktop/coursework/textwords0.csv"))
{
string line;
string[] row;
while ((line = reader.ReadLine()) != null)
{
row = line.Split(',');
abbrev.Add(row[0], row[1]);
Console.WriteLine(abbrev);
}
}
string twitterinput;
twitterinput = "";
// string output;
twitterinput = txtInput.Text;
char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
string text = twitterinput;
string[] words = twitterinput.Split(delimiterChars);
string merge;
foreach (string s in words)
{
if (abbrev.ContainsKey(s))
{
string value = abbrev[s];
merge = string.Join(" ", value);
}
if (!abbrev.ContainsKey(s))
{
string not = s;
merge = string.Join(" ", not);
}
MessageBox.Show(merge);
}
}
问题是,如果有标点符号,程序将不会翻译该单词。我意识到我使用的字符集意味着标点符号不是问题,但也不允许我在打印时保留它。有没有办法我可以忽略最后一个字符,而不是删除它,并仍然保留输出?我试图把它写成一个新变量,但我找不到办法做到这一点......
答案 0 :(得分:0)
这看起来过于复杂。你可以用正则表达式和反向引用做同样的事情。
foreach(var line in yourReader)
{
var dict = new Dictionary<string,string>(); // your replacement dictionaries
foreach(var kvp in dict)
{
System.Text.RegularExpressions.Regex.Replace(line,"(\s|,|\.|:|\\t)" + kvp.Key + "(\s|,|\.|:|\\t)","\0" + kvp.Value + "\1");
}
}
我一起攻击了这个正则表达式,所以它可能不对,但这是基本的想法。