Я предлагаю обработать ваш массив ключевых слов, как хэш-таблицу. Строчный текст статьи, взорваться пробелами, затем прокручивать каждое слово разнесенного массива. Если слово существует в вашей хеш-таблице, подталкивайте его к новому массиву, отслеживая количество раз, когда оно было замечено.
Я провел быстрый тест, сравнивающий регулярное выражение с хэш-таблицами в этом сценарии. Чтобы запустить его с регулярным выражением 1000 раз, потребовалось 17 секунд. Чтобы запустить его с хэш-таблицей 1000 раз, потребовалось 0,4 секунды. Это должен быть процесс O (n + m).
$keywords = array("computer", "dog", "sandwich");
$article = "This is a test using your computer when your dog is being a dog";
$arr = explode(" ", strtolower($article));
$tracker = array();
foreach($arr as $word){
if(in_array($word, $keywords)){
if(isset($tracker[$word]))
$tracker[$word]++;
else
$tracker[$word] = 1;
}
}
в $ массив трекер выведет: «компьютер» => 1, «собака» => 2. Вы можете сделать процесс, чтобы решить, какие теги использовать. Или, если вас не волнует количество раз, когда появляется ключевое слово, вы можете пропустить часть трекера и добавить теги по мере появления ключевых слов.
РЕДАКТИРОВАТЬ: Ключевое слово array может потребоваться преобразовать массив индексов, чтобы обеспечить быстрый поиск. Я не уверен, как работает in_array(), но если он ищет, то это не так быстро, как должно быть. Перевернутый массив индекса будет выглядеть
array("computer" => 1, "dog" => 1, "sandwich" => 1); // "1" can be any value
Тогда вы могли бы сделать Исеть ($ ключевые слова [$ слово]), чтобы проверить, если слово соответствует ключевому слову, вместо in_array(), который должен дать вам O (1) , Тем не менее, кто-то еще сможет мне это разъяснить.
за быстрый ответ. Он отлично работает, когда нет тэгов xhtml. Но у меня есть теги xhtml в статье. Есть ли способ обход этого. –
Хм, тогда регулярное выражение не может быть полностью предотвращено. Вы можете применить strip_tags() к строке статьи перед тем, как опустить ее. Это должно заботиться обо всех тегах XHTML. Однако может быть небольшое влияние на скорость. – Nick
Это почти то же самое, что я использовал с помощью array_count_values () и str_word_count() .. :) @JoshR Вам нужно также снять теги XHTML? Потому что вы этого не говорили. – redShadow