我实现了一个试图检测语料库中停用词的类。当然,所述课程中的一种方法是idf()
:
public function idf(){
// 1) In how many articles does each term appear
$tokensFreq = $this->computeTokensFreq();
// 2) Applies the IDF formula (array format : $term => $idf)
$tokensIDF = $this->computeIDF($tokensFreq);
// 3) Sort array so that 'stopwords' (smaller idfs) appear at the top
arsort($tokensIDF);
return $tokensIDF;
}
问题是,这个功能很慢:需要超过5分钟来完成相对较小的4 006令牌数组。
起初,我认为我错误地实现了算法(我甚至用array_key_exists
替换了所有isset
)。但经过进一步检查后发现,arsort
电话占据了执行时间的大部分时间。
为了帮助减轻负载,我在SORT_NUMERIC
函数中添加了arsort
标志,但是徒劳无功。
首先,排序这样一个数组是否占用了所有时间是否正常? 其次,最重要的是,我能做些什么才能让事情变得更顺畅?