String cümlenin başlangıcını bulabilirsiniz

4 Cevap php

I want to display the results of a searchquery in a website with a title and a short description. The short description should be a small part of the page which holds the searchterm. What i want to do is: 1 strip tags in page 2 find first position of seachterm 3 from that position, going back find the beginning (if there is one) of that sentence. 4 Start at the found position in step 3 and display ie 200 characters from there

Ben adım 3 ile biraz yardıma ihtiyacım var. Ben ilk sermaye veya nokta bulur bir regex gerektiğini düşünüyorum ...

4 Cevap

Hatta bu sonuçta başarısız olacaktır. Cümle verilen arama terimi "ofis" ise, kullanmak hemen her kriter cümle olarak size "Smith'in ofisi" verecek, "Biz Dr Smith'in ofisine gittim".

Ben bunu yapacağını yolu ben sayfasını ayrıştırma, bir ...

  1. Ile başlayan tüm şeyler üzerine atlamak '<'

  2. Eğer bir "." Karşılaştığınızda veya [AZ], başka bulana kadar bir tampon içine koyarak başlar "."

  3. Tamponlu dize arama anahtar kelime varsa, sizin dize yeter! Else. belleğe alma başlar "." Karşılaştığınız ve tekrarlayın.

EDIT: James Curran işaret ettiği gibi, bu strateji bazı durumlarda başarısız ... Yani heres çözüm olacaktır:

Ne yapabilirsiniz, (etiketleri sonra) sayfanın başından itibaren karakter X sayısı başlamaktır

and then search for your keyword, buffering 2 previous words. When you find it, do something like this: {X} ... {prev-2} {next-2}

Örnek: This planet has - or rather had - a problem, which was this: most of the people living on it were unhappy for pretty much of the time. Many solutions were suggested for this problem, but most of these were largely concerned with the movement of small green pieces of paper, which was odd because on the whole it wasn't the small green pieces of paper that were unhappy.

Aranacak Kelimeler: "önerdi"

Sonuç: This planet has - or rather had - a problem ... Many solutions were suggested for this problem...

Için adım 3: Eğer, geriye doğru arama ilk pozisyonunu almak istiyorum nerede biter altdizesine tersine Eğer '.' ve arama dizesini pozisyonda bu değeri subtrack.

$offset = stripos( strrev(substr($string, $searchlocation)), '.');
$startloc = $searchlocation - $offset;
$finalstring = substr($string, $startloc, 200);

Yani 1 ile kapalı olabilir, ama ben bu işi düşünüyorum. Bunu yapmak için kısa bir yol olması gerektiği gibi görünüyor.

Bunun yerine cümleler bulmaya çalışırken, ben bir deyişle gerekir arama terimi etrafında bağlamda miktarı düşünmek istiyorum düşünüyorum. Daha sonra (veya başına) geriye kelimelerin bu sayının bazı fraksiyon gidip bağlamda kalanını seçmek için kelimelerin kalan sayı iletin. Bu şekilde, sadece, boşluklarla tüm külliyatını bölünmüş (belki de noktalama için subterms ve hesabını bulmak için bir bulanık eşleşme kullanarak) teriminin ilk görüldüğü yerde bulmak ve yukarıdaki algoritma uygulanır. Olmayan ilk seçilen terim vb, noktalama işaretleri bitmiyor varsa bile elips tanıtan hakkında yaratıcı olabilir