[英]Punctuation Problems
該程序讀取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);
}
}
問題在於,如果存在標點符號,程序將不會翻譯單詞。 我意識到我使用的字符集意味着標點符號不是問題,但在打印時也不允許我保留它。 有沒有一種方法可以忽略最后一個字符,而不是刪除它,而仍然保留它作為輸出? 我試圖將其寫入新變量,但我也找不到任何方法...
這似乎過於復雜。 您可以使用正則表達式和反向引用執行相同的操作。
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");
}
}
我一起修改了此正則表達式,因此可能不正確,但這是基本思想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.