我试图弄清楚如何使用一个充满首字母缩略词的文本文件来证明和自动更正关键字列表。例如,我的文本框中可能有一个如下所示的列表:
nec 1080p television
nec hdtv television
nec lcd tv
etc.
在我的文本文件中,我会有这样的东西:
LCD
TV
NEC
HDTV
etc.
将首字母缩写词文本文件与文本框文本(每个文本可能有 100 行长)进行比较并更正文本框中任何非大写文本的最快和最有效的方法是什么?有任何想法吗?
我试图弄清楚如何使用一个充满首字母缩略词的文本文件来证明和自动更正关键字列表。例如,我的文本框中可能有一个如下所示的列表:
nec 1080p television
nec hdtv television
nec lcd tv
etc.
在我的文本文件中,我会有这样的东西:
LCD
TV
NEC
HDTV
etc.
将首字母缩写词文本文件与文本框文本(每个文本可能有 100 行长)进行比较并更正文本框中任何非大写文本的最快和最有效的方法是什么?有任何想法吗?
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 获取文本框的行和文件的行,其中每一行都是一个首字母缩写词。然后它将每一行拆分为单词并将每个单词传递给 ReplaceWithAcronym。如果单词是首字母缩略词之一,它将返回,否则将返回单词不变。通过使用 string.Join,单词是“未拆分的”。结果被转换为一个数组,然后分配回文本框行。
我没有检查数百行的速度有多快。为了提高性能,您可以使用 HashSet 作为首字母缩写词。我不认为几百行真的是个问题。在尝试提高性能之前,我会尝试一下。也许已经足够好了。
这就是我用来最终让它工作的东西。我使用了 Pescolino 的解决方案,然后调用它:
sortBox1 = ReplaceWithAcronyms(sortBox1, File.ReadAllLines(@"I:\acronyms.txt")).ToList();