2008-10-10 24 views
1

我想用一個標題和簡短說明一個網站,以顯示SEARCHQUERY的結果。簡短描述應該是包含searchterm的頁面的一小部分。我想要做的是:在 第2頁 1條標籤找到那個位置seachterm 3的第一位置,回去找開頭(如果有的話)的那句話。 4開始在步驟3中找到位置並從那裏找到句子的開頭的字符串

顯示即200個字符我需要第3步一些幫助,我想我需要的是找到的第一個資本或點的正則表達式...

回答

2

的這樣,我會做到這一點的是,我將會解析網頁...

  1. 跳過所有的事情開始「<」

  2. 當你遇到一個「」或[A-Z],開始將其放入緩衝區,直到找到另一個「。」。

  3. 如果緩衝串有搜索關鍵詞,這就是你的字符串!其他。在「。」開始緩衝。你遇到並重復。

編輯:正如詹姆斯·柯倫指出,這種策略會失敗在某些情況下...因此,繼承人的解決方案:

你可以做什麼,是從頁開始啓動字符的X個(標籤後)

然後搜索關鍵字,緩衝前面2個字。當你找到它, 做這樣的事情:{X} ... {分組-2} {下2}

舉例:這個星球上有 - 或者更確切地說,有 - 個問題,這是這個:絕大多數生活在其上的人都很不高興。很多方案都提出了這個問題,但其中大部分在很大程度上關係的綠色小紙片,這是奇怪的運動,因爲就整體而言是不小的綠色紙片是很不高興。

搜索關鍵詞: 「建議」

結果:這個星球 - 或者更確切地說,有 - 個問題......很多方案都建議對於這個問題...

5

即使這最終會失敗。鑑於一句「我們去了史密斯博士的辦公室」,如果你的搜索詞是「辦公室」,實際上你使用任何標準會給你「史密斯的辦公室」爲你的句子。

+0

我發佈了一個稍微改變的策略......你能看到那個bug中的任何錯誤。 – Mostlyharmless 2008-10-10 14:31:07

1

對於第3步:如果您顛倒了您想要向後搜索的結束位置的子字符串,請獲取第一個「。」的位置。並從搜索字符串的位置減去該值。

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

這可能是1,但我認爲它會完成工作。似乎應該有一個更短的方式來做到這一點。

+0

James Curran的答案也適用於此,史密斯博士的辦公室仍然會失敗。 – acrosman 2008-10-10 14:22:20

1

我認爲,不是試圖找到句子,而是考慮我需要的單詞的搜索詞的上下文數量。然後向後倒退該單詞數量的一部分(或開始),然後轉發剩餘單詞數量以選擇其他上下文。通過這種方式,您可以將整個語料庫分割爲空格,找到詞語的第一次出現(可能使用模糊匹配查找子標記並計算標點符號),然後應用上述算法。如果第一個未選定的術語沒有以標點符號結尾,那麼你甚至可以創造性地引入省略號等等。

相關問題