2014-03-12 7 views
0

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

В принципе, ключевые слова состоят из 3 или более слов, но не превышены в 10 словах. Будет выглядеть, если ключевые слова существуют в статьях, тогда он вернет только ключевые слова, найденные в статье.

Если предположить, что у нас есть статья:

$articles = "Maybe it’s less true than it used to be that people are made of 
     place--that the same elements that form coal and clay and bogs and ice form 
     faces, voices and characters. I wrote my first collection of short stories, 
     The Bostons, in homage to this book, hoping, as did Joyce’s young Stephen 
     Dedalus, to encounter for the millionth time the reality of experience and to 
     forge in the smithy of my soul the uncreated conscience of some island-dwellers 
     I knew." 

Ключевые слова:

$keywords = "less true than, people are made, smithy of my soul, uncreated 
      conscience, this is a test string" 

из положить мус быть:

"less true than, people are made, smithy of my soul, uncreated conscience" 

Я уже программировать его с помощью

$articles = mb_split(' +', $articles); 
    foreach ($articles as $key => $word) 
$articles [$key] = trim($word); 

    //Search for keywords  
    $keywords = str_replace(' ', '', $keywords); 
    $keywords = mb_split('[ ,]+', mb_strtolower($keywords, 'utf-8')); 

    $result = implode(',', array_intersect($keywords, $articles); 

, но он работает только за одно ключевое слово. Я не знаю, как это сделать по нескольким ключевым словам.

+0

Значит, ваши ключевые слова могут состоять из нескольких слов? Например, одно «ключевое слово» в вашем примере «менее верно, чем», правильно? – Nico

+0

Вы слышали о регулярном выражении и preg_match? –

ответ

0

strpos() - это то, что вам нужно. Это работает -

$res = Array(); 
foreach(explode(", ",$keywords) as $keyword){ 
    if(strpos($articles, $keyword)){ 
     $res[] = $keyword; 
    } 
} 
$matched = implode($res,", "); 
var_dump($matched); 
/** OUTPUT **/ 
string 'less true than, people are made, smithy of my soul, uncreated conscience' (length=72) 
0

Regular Expressions может вам помочь. Это работает, как вы можете видеть here. Возможно, проблема заключалась в перерыве в строке ключевых слов?

$articles = "Maybe it’s less true than it used to be that people are made of 
    place--that the same elements that form coal and clay and bogs and ice form 
    faces, voices and characters. I wrote my first collection of short stories, 
    The Bostons, in homage to this book, hoping, as did Joyce’s young Stephen 
    Dedalus, to encounter for the millionth time the reality of experience and to 
    forge in the smithy of my soul the uncreated conscience of some island-dwellers 
    I knew."; 

$keywords = "less true than, people are made, smithy of my soul, uncreated conscience, this is a test string"; 

$keywordsArray = explode(', ',$keywords); 

$pattern = '/'.implode('|',$keywordsArray).'/'; 
preg_match_all($pattern,$articles,$matches); 

var_dump($matches); 
0
$matches = array_unique(
    preg_match_all(
     '/'.implode('|', explode(', ', $keywords).'/', 
     $articles 
    ) 
); 
0

$ статьи = «Может быть, это менее верно, чем это имело обыкновение быть, что люди сделаны из места - одни и те же элементы, которые образуют уголь и глину и болота и формы льда Лица, голоса и персонажи. Я написал свою первую сборник рассказов, The Bostons, в честь этой книги, надеясь, как и молодой Джойс, Стивен Dedalus, столкнувшись в миллионный момент с реальностью опыта и до кузница в кузнице моя душа - несотворенная совесть некоторых островных жителей. Я знал. ;

$ ключевые слова = "менее правдивые, чем люди созданы, кузница моей души, несотворенная совесть, это тестовая строка";

$ keyword = explode (',', $ keywords);

Еогеасп ($ ключевое слово как $ ключ => $ значение) {

if(strpos($articles,$value)) { 

     $finalstring .= $value.','; 
} 
} 

эхо $ finalstring;

Смежные вопросы