我正在为贝叶斯过滤器编写代码。对于一个特定的单词,我想检查单词是否在停用词列表中,我从停用单词列表中填写我的电脑上的文件。 因为我必须为许多单词执行此操作,所以我不想一次又一次地从我的电脑中读取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;
}
我认为通过使用静态变量可以解决问题,但事实并非如此。请帮助。
答案 0 :(得分: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;
}
这将起作用,因为空数组被认为是假的。