【发布时间】:2020-07-24 23:24:10
【问题描述】:
我有一些来自 Vision API 的解析文本,我正在使用关键字对其进行过滤,如下所示:
if (finalTextRaw.find("File") != finalTextRaw.npos)
{
LogMsg("Found Menubar");
}
例如,如果在字符串finalTextRaw 中的任何位置找到关键字“文件”,则该函数被中断并打印一条日志消息。
这种方法非常可靠。但是我只是以这种方式制作了一堆 if-else-if 语句,效率低下,而且当我发现更多需要过滤的单词时,我宁愿效率更高一些。相反,我现在从配置文件中获取一个字符串,然后将该字符串解析为一个数组:
string filterWords = GetApp()->GetFilter();
std::replace(filterWords.begin(), filterWords.end(), ',', ' '); ///replace ',' with ' '
vector<int> array;
stringstream ss(filterWords);
int temp;
while (ss >> temp)
array.push_back(temp); ///create an array of filtered words
而且我希望只有一个if 语句用于根据数组检查该字符串,而不是其中许多语句用于根据我必须在代码中手动指定的每个关键字检查字符串。像这样的:
if (finalTextRaw.find(array) != finalTextRaw.npos)
{
LogMsg("Found filtered word");
}
当然,该语法不起作用,而且肯定比这更复杂,但希望您明白:如果我的数组中的任何单词出现在该字符串的任何位置,则应忽略该字符串并打印一条日志消息而是。
有什么想法可以设计出这样的功能吗?我猜这需要某种循环。
【问题讨论】:
-
你知道过滤器的字数吗?在原始文本中?