【发布时间】:2014-08-16 06:50:20
【问题描述】:
我正在编写包含综合文本预处理的代码,包括停用词删除、词干提取、样板信息删除/替换(网址、电子邮件、数字、金额、标签等)、构建倒排索引、LCA等等。这不足为奇 - 删除停用词是瓶颈,也是该过程中最昂贵的部分。
我现在拥有的很简单:
我在静态数组static const std::wstring stopwords [] 中存储了大约 500 个停用词。
然后对于每个文档 (std::vector<wstring>):
for each ( auto term in stopwords)
{
doc.erase( std::remove( doc.begin(), doc.end(), term), doc.end() );
}
有什么建议可以提高这段代码的性能吗?
【问题讨论】:
-
使用
remove_if和 lambda 一次检查所有单词 -
quantdev,“一次检查所有单词”是什么意思?您能否扩展和/或提供示例和/或解释为什么它会更快?谢谢
-
downvoter 可以解释一下吗?在我看来这是一个合理的问题!
-
@user2028058 这意味着将您的停用词存储在一个有效的可搜索容器中,然后枚举 document (不是停用词),以及文档中的每个单词,如果它在停用词容器中,将其删除。这就是
std::remove_if的目的。阅读 Gabe 的回答,了解为什么这样做会更有效率。
标签: c++ text vector stop-words