-1

我有一个列入白名单的单词列表kitchen chair table

给定一个文本,我想知道其中有哪些列入白名单的单词。

什么是实现这一目标的好方法?我的意思是,易于理解,具有良好的性能?

4

5 回答 5

2

不是一个非常明确的问题,但这样的事情可能对你有用:

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

输出:

Array
(
    [0] => kitchen
    [1] => chair
)
于 2012-06-19T16:57:10.237 回答
2

为此,您应该使用带有单词边界的正则表达式。如果您不这样做并且仅依赖字符串位置,则诸如“heat”之类的单词将在诸如“cheat”之类的单词中匹配

$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

于 2012-06-19T16:57:50.670 回答
1
//list of words
$myArray = array('kitchen', 'chair', 'table');

foreach($myArray as $word){
    if(stristr($textBody, $word) !== false){
    // word's in there
    }
}
于 2012-06-19T16:55:08.430 回答
1

您可以使用 php explode函数用空格展开单词列表。然后它会返回一个数组。输入文本也会做同样的事情。这样,您将拥有两个 Array。

之后,您可以使用array_intersect函数,该函数将返回两个数组中的常用词。

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

$result 将包含所有常用词。

于 2012-06-19T16:55:25.010 回答
1

您是否需要知道这些单词在字符串中出现的频率或它们的确切位置?如果没有,我建议您将列表转换为带有“explode(' ', $list)”的数组。然后遍历该数组并使用 strpos 进行搜索。

如果您愿意,我可以提供示例代码:)

如果您需要位置和所有出现,则必须使用正则表达式。

于 2012-06-19T16:57:45.820 回答