1

頭字語でいっぱいのテキスト ファイルを使用して、キーワードのリストを証明および自動修正する方法を見つけようとしています。たとえば、テキストボックスに次のようなリストがあるとします。

 nec 1080p television
 nec hdtv television
 nec lcd tv
 etc.

私のテキストファイルには、次のようなものがあります。

 LCD
 TV
 NEC
 HDTV
 etc.

頭字語のテキストファイルをテキストボックスのテキスト (それぞれ数百行の長さになる可能性があります) と比較し、テキストボックス内の大文字以外のテキストを修正するための最も速くて効率的な方法は何でしょうか? 何か案は?

4

2 に答える 2

1
textBox.Lines = ReplaceWithAcronyms(textBox.Lines, File.ReadAllLines(acronymsPath)).ToArray();

private static IEnumerable<string> ReplaceWithAcronyms(IEnumerable<string> lines, IEnumerable<string> acronyms)
{
    foreach (string line in lines)
    {
        yield return string.Join(" ", 
            line.Split(' ').Select(word => ReplaceWithAcronym(word, acronyms)));
    }
}

private static string ReplaceWithAcronym(string word, IEnumerable<string> acronyms)
{
    string acronym = acronyms.FirstOrDefault(ac => ac == word.ToUpperInvariant());
    if (acronym == null)
    {
        return word;
    }

    return acronym;
}

ReplaceWithAcronyms は、テキスト ボックスの行と、各行が 1 つの頭字語であるファイルの行を取得します。次に、各行を単語に分割し、各単語を ReplaceWithAcronym に渡します。単語が頭字語の 1 つである場合は、それ以外の場合は単語を変更せずに返します。単語は、string.Join を使用して「分割されていません」。結果は配列に変換され、テキスト ボックスの行に割り当てられます。

数百行でどれだけ速いかは確認していません。パフォーマンスを向上させるために、頭字語に HashSet を使用できます。数百行が実際に問題になるとは思いません。パフォーマンスを改善しようとする前に、試してみます。多分それはもう十分です。

于 2013-02-12T21:08:54.340 に答える
0

これは、私が最終的にそれを機能させるために使用したものです。Pescolino のソリューションを使用して、次のように呼び出しました。

sortBox1 = ReplaceWithAcronyms(sortBox1, File.ReadAllLines(@"I:\acronyms.txt")).ToList();
于 2013-02-13T02:13:52.733 に答える