我有一个列入白名单的单词列表kitchen chair table
:
给定一个文本,我想知道其中有哪些列入白名单的单词。
什么是实现这一目标的好方法?我的意思是,易于理解,具有良好的性能?
我有一个列入白名单的单词列表kitchen chair table
:
给定一个文本,我想知道其中有哪些列入白名单的单词。
什么是实现这一目标的好方法?我的意思是,易于理解,具有良好的性能?
不是一个非常明确的问题,但这样的事情可能对你有用:
$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
)
为此,您应该使用带有单词边界的正则表达式。如果您不这样做并且仅依赖字符串位置,则诸如“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
。
//list of words
$myArray = array('kitchen', 'chair', 'table');
foreach($myArray as $word){
if(stristr($textBody, $word) !== false){
// word's in there
}
}
您可以使用 php explode函数用空格展开单词列表。然后它会返回一个数组。输入文本也会做同样的事情。这样,您将拥有两个 Array。
之后,您可以使用array_intersect函数,该函数将返回两个数组中的常用词。
$array = explode(' ',$wordlist);
$result = array_intersect($array, $inputarray);
$result 将包含所有常用词。
您是否需要知道这些单词在字符串中出现的频率或它们的确切位置?如果没有,我建议您将列表转换为带有“explode(' ', $list)”的数组。然后遍历该数组并使用 strpos 进行搜索。
如果您愿意,我可以提供示例代码:)
如果您需要位置和所有出现,则必须使用正则表达式。