2012-06-19 67 views
-1

我有一個列入白名單的單詞列表:kitchen chair table;PHP - 從文本列表中提取單詞

給出一個文本,我想知道哪些白名單詞在裏面。

會是什麼方式來達到這個目的?我的意思是,容易理解,表現良好?

+0

你在找特定的單詞還是單詞? –

+2

'array_unique(explode(「」,$ words))''會給你一個包含所有不同單詞的數組 –

+0

@Mr D:特定單詞 - 我已經編譯了白名單 – dan

回答

2

爲了達到這個目的,你應該使用帶有單詞邊界的正則表達式。如果沒有,只是依靠路線的位置,如「熱」的話會像裏面的話匹配「欺騙」

$word_list = "kitchen chair table tables"; 
$words = explode(' ', $word_list); 

$text = 'There is a table in the kitchen'; 

foreach($words as $word) { 
    if(preg_match('/\b' . $word . '\b/', $text)) { 
     echo "$word is in the text\n"; 
    } 
} 

此輸出:

kitchen is in the text 
table is in the text 

注意,這將不匹配table如果$text只有tables在裏面。

1
//list of words 
$myArray = array('kitchen', 'chair', 'table'); 

foreach($myArray as $word){ 
    if(stristr($textBody, $word) !== false){ 
    // word's in there 
    } 
} 
+0

$ textBody將是「任何文本」部分 – Don

+1

nickb的回答比較好 – Don

1

您可以使用php explode函數來分解帶有空格的單詞表。然後它會返回一個數組。同樣的事情將與輸入文字完成。這樣,你將有兩個數組。

之後,您可以使用array_intersect函數,該函數將返回這兩個數組中的常用詞。

$array = explode(' ',$wordlist); 
$result = array_intersect($array, $inputarray); 

$ result將包含所有常見單詞。

2

不是很清楚的問題,但這樣的事情可能會爲你工作:

$str = "kitchen chair table"; 
$search = "kitchen bathroom chair"; 
$arr1 = explode(' ', $str); 
$arr2 = explode(' ', $search); 
print_r(array_intersect($arr1, $arr2)); 

OUTPUT:

Array 
(
    [0] => kitchen 
    [1] => chair 
) 
1

你需要知道的那些話讓經常在字符串中或他們的確切位置? 如果不是,我建議你將你的列表轉換爲一個帶有「explode('',$ list)」的數組。 然後您遍歷該數組並使用strpos進行搜索。

我能提供的示例代碼,如果你想:)

如果你需要的位置,你將不得不使用正則表達式所有出現。