0

これは、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);
    }
}

問題は、句読点があるとプログラムが単語を翻訳しないことです。私が使用していた文字セットは、句読点が問題ではないことを意味していることに気付きましたが、印刷時に句読点を保持することもできませんでした. 最後の文字を削除するのではなく、無視して出力用に保持する方法はありますか? 私はそれを新しい変数に書き込もうとしていましたが、それを行う方法も見つかりません...

4

1 に答える 1

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

この正規表現を一緒にハックしたので、正しくないかもしれませんが、それが基本的な考え方です。

于 2012-04-30T13:04:36.407 に答える