0

我正在为贝叶斯滤波器编写代码。对于一个特定的词,我想检查这个词是否在停用词列表中,我从我电脑上的一个文件的停用词列表中填充。因为我必须对很多单词执行此操作,所以我不想一次又一次地从我的电脑中读取 StopWord 文件。

我想做这样的事情

function isStopWord( $word ){

       if(!isset($stopWordDict))
       {
           $stopWords = array();
           $handle = fopen("StopWords.txt", "r");
           if( $handle )
           {
               while( ( $buffer = fgets( $handle ) ) != false )
               {
                   $stopWords[] = trim( $buffer );
               }
           }
           echo "StopWord opened";
           static $stopWordDict = array();
           foreach( $stopWords  as $stopWord )
               $stopWordDict[$stopWord] = 1;
       }

      if( array_key_exists( $word, $stopWordDict ) )
           return true;
      else
          return false;
  }

我认为通过使用静态变量可以解决问题,但事实并非如此。请帮忙。

4

1 回答 1

0

将静态声明放在函数的开头:

function isStopWord( $word ){
   static $stopWordDict = array();
   if(!$stopWordDict)
   {
       $stopWords = file("StopWords.txt");
       echo "StopWord opened";
       foreach( $stopWords  as $stopWord ) {          
           $stopWordDict[trim($stopWord)] = 1;
       }
   }

  if( array_key_exists( $word, $stopWordDict ) )
       return true;
  else
      return false;
}

这将起作用,因为空数组被认为是虚假的。

于 2013-08-16T23:58:50.223 回答