массивы — препроцесс текста при медленном процессе анализа текста

я делаю текстовую препроцесс по текстовому анализу с большой базой данных, я хочу сделать камуфляжные данные из всей статьи базы данных в массив, но это займет много времени.

$multiMem   = memory_get_usage();
$xstart = microtime(TRUE);
$word = "";
$sql = mysql_query("SELECT * FROM tbl_content");
while($data = mysql_fetch_assoc($sql)){
$word = $word."".$data['article'];
}

$preprocess = new preprocess($word);
$word= $preprocess->preprocess($word);
print_r($kata);

$xfinish = microtime(TRUE);

вот мой класс препроцесс

class preprocess {

var $teks;

function preprocess($teks){
/*start process segmentation*/
$teks = trim($teks);

//menghapus tanda baca
$teks = str_replace("'", "", $teks);
$teks = str_replace("-", "", $teks);
$teks = str_replace(")", "", $teks);
$teks = str_replace("(", "", $teks);
$teks = str_replace("=", "", $teks);
$teks = str_replace(".", "", $teks);
$teks = str_replace(",", "", $teks);
$teks = str_replace(":", "", $teks);
$teks = str_replace(";", "", $teks);
$teks = str_replace("!", "", $teks);
$teks = str_replace("?", "", $teks);

//remove HTML tags
$teks = strip_tags($teks);
$teks = preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $teks);
/*end proses segmentation*/

/*start case folding*/
$teks = strtolower($teks);

$teks = preg_replace('/[0-9]+/', '', $teks);
/*end case folding*/

/*start of tokenizing*/
$teks = explode(" ", $teks);

/*end of tokenizing*/

/*start of filtering*/
//stopword
$file = file_get_contents('stopword.txt', FILE_USE_INCLUDE_PATH);
$stopword = explode("\n", $file);

//remove stopword
$teks = preg_replace('/\b('.implode('|',$stopword).')\b/','',$teks);

/*end of filtering*/

/*start of stemming*/
require_once('stemming.php');
foreach($teks as $t => $value){
$teks[$t] = stemming($value);
}
/*end of stemming*/

$teks = array_filter($teks);
$teks = array_values($teks);

return $teks;
}
}

Кто-нибудь есть идеи, чтобы сделать быстрый процесс на моей программе? Пожалуйста, помогите
спасибо за продвижение

0

Решение

Есть пара вещей, которые могут быть улучшены …

  1. После создания $word Вы можете освободить результат запроса $sql и data

    $word = '';
    $sql = mysql_query("SELECT * FROM tbl_content");
    while($data = mysql_fetch_assoc($sql)){
    $word = $word . $data['article'];
    }
    mysql_free_result($sql);
    unset($sql, $data);
    
  2. Этот блок:

    $teks = str_replace("'", "", $teks);
    $teks = str_replace("-", "", $teks);
    $teks = str_replace(")", "", $teks);
    $teks = str_replace("(", "", $teks);
    $teks = str_replace("=", "", $teks);
    $teks = str_replace(".", "", $teks);
    $teks = str_replace(",", "", $teks);
    $teks = str_replace(":", "", $teks);
    $teks = str_replace(";", "", $teks);
    $teks = str_replace("!", "", $teks);
    $teks = str_replace("?", "", $teks);
    

можно написать так:

    $teks = str_replace(array('(','-',')',',','.','=',';','!','?'), '', $teks);
  1. так как вы позже в коде заменяете числа регулярным выражением, вы можете добавить числа в верхнем str_replace позвонить или добавить верхние символы к preg_replace

    $teks = str_replace(array('0','1','2','3','4','5','6','7','8','9','(','-',')',',','.','=',';','!','?'), '', $teks);
    

    ИЛИ ЖЕ

    $teks = preg_replace('/[0-9,\(\)\-\=\.\,\;\!\?]+/', '', $teks);
    
  2. $teks = strip_tags($teks); должно быть достаточно. Если это не так, используйте только preg_replace после, так как он делает то же самое.

  3. использование file insted of file_get_contentsfollowed by theвзрыватьсяsince theфайлreturns an array directly. Also there is no need to explode the $teks

       $stopword = file('stopword.txt');
    array_walk($stopword, function(&$item1){
    $item1 = '/\b' . $item1 . '\b/';
    });
    $teks = preg_replace($stopword, '', $teks);
    
  4. Как правило, не используйте "" так как процессор будет пытаться оценить контент, и это займет больше времени.

  5. Если stopword.txt список не меняется, лучше и быстрее иметь его в коде в виде массива напрямую, чем обращаться к файловой системе для его чтения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]