PHP dizesinde ifade oluşumunu belirlemek için algoritması ile yardımcı

4 Cevap

Ben gibi ifadeler bir dizi (en fazla 2 kelime) var

$words = array('barack obama', 'chicago', 'united states');

ve sonra ben gibi bir dizesi vardır:

$sentence = "Barack Obama is from Chicago. Barack Obama's favorite food it pizza.";

Ben string $ cümlede dizi $ deyişle kelime olaylar sayısını dönecekti etkili bir algoritma oluşturmak / bulmak istiyorum. Bu durumda olacaktır:

'barack obama' => 2
'chicago' => 0

Bunu nasıl inşa edebilir?

4 Cevap

Hakkında dokümanlar okumak substr_count. $ Kelime üzerinde bir döngü içinde kullanın.

 $res = array();
 foreach($words as $word){
    $res[$word] = substr_count($sentence,$word);
 }

Bu entity extraction Doğal Dil İşleme olarak bilinir. Bu örnekte basit görünebilir ama oldukça karmaşık büyüyebilir. Ciddiye kullanarak olacak eğer böyle NLTK, OpenNLP ve Lucene gibi bunu araçlarında bakarak düşünmelisiniz.

Böyle bir şey yapacağını.

$res = array();
foreach($words as $word){
  $res[$word] = preg_match_all("/{$word}/i", $sentence);
}

Sizin kelime düzenli ifade semboller ve onları kaçmak yok emin olmak gerekir düzenli ifade kullanarak beri note:, ayrıca str_pos dayalı bir çözüm daha iyi performans olabilir bu nedenle analiz zorunda cümlenin sayısına bağlıdır ve söz konusu kelime sayısı.

Ofri çözeltisi @ kullanarak

$res = array();
foreach($words as $word){
  $res[$word] = substr_count($sentence,$word);
}

Burada başka bir regex uygulaması bulunuyor:

$words = array('barack obama', 'chicago', 'united states');
$sentence = "Barack Obama is from Chicago. Barack Obama's favorite food it pizza. He is president of the United States";
$re= sprintf('/(%s)/i', implode('|',  $words));
if (preg_match_all($re, $sentence, $m))
 print_r(array_count_values($m[0]));

Uzatmak kolay - sadece ne istersen $words ve $sentence güncelleyin.