You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从地点slug数组中提取语句中包含的目标slug?

问题:从文本中匹配对应地点Slug

我有一组地点Slug,通过字符串分割转为数组:

$areas = 'garki-i,garki-ii,yaba,wuse-i,asokoro,maitama,jabi,jahi,dutse,gwarinpa,central-business-district,kubwa,lugbe,kaura,gudu,banana-island,new-karu,old-karu,kugbo,eko-atlantic,nyanya,mararaba,madalla,kuje,wuse-ii,utako,oulfa,kimunyu,ibara,cfc,joska,kabati,juja';
$a_arr = explode(',', $areas);

另有一段包含部分地点的文本:

$tweet = "I live in Eko Atlantic and Yaba and I also work at Banana Island";

需要从这段文本中提取出存在于上述Slug数组中的地点,但当前代码仅能匹配到['yaba'],期望结果为["eko-atlantic", "yaba", "banana-island"]。当前使用的代码如下:

$t_arr = explode(" ", strtolower($tweet));
$location = [];

for ($i = 0; $i < count($t_arr); $i++) {
  for ($j = 0; $j < count($a_arr); $j++) {
    if ($t_arr[$i] == $a_arr[$j]) {
      array_push($location, $a_arr[$j]);
    }
  }
}

$output = ["eko-atlantic", "yaba", "banana-island"];

问题原因

原代码的核心问题在于按空格分割文本为单个单词,而像Eko Atlantic对应Slug里的eko-atlantic、Banana Island对应banana-island这类多词组合,分割后单个单词无法与带连字符的Slug直接匹配,因此只能命中单个单词的Slug(如yaba)。

解决方案

方法一:利用正则表达式匹配

将Slug转换为空格分隔的格式,生成正则规则匹配文本中的完整地点,再转换回Slug格式:

// 把Slug转换为空格分隔的格式,同时转义正则特殊字符
$patterns = array_map(function($slug) {
    return preg_quote(str_replace('-', ' ', $slug), '/');
}, $a_arr);

// 构建匹配整个单词的正则表达式(不区分大小写)
$regex = '/\b(' . implode('|', $patterns) . ')\b/i';

// 从文本中匹配所有符合条件的地点
preg_match_all($regex, $tweet, $matches);

// 将匹配到的文本转换为Slug格式,并去重
$location = array_unique(array_map(function($match) {
    return strtolower(str_replace(' ', '-', $match));
}, $matches[0]));

print_r($location);

输出结果:

Array
(
    [0] => eko-atlantic
    [1] => yaba
    [2] => banana-island
)

方法二:遍历Slug数组匹配文本

遍历所有Slug,将其转换为空格分隔的格式后,检查是否存在于文本中:

$lowerTweet = strtolower($tweet);
$location = [];

foreach ($a_arr as $slug) {
    // 转换Slug为空格分隔的格式
    $locationText = str_replace('-', ' ', $slug);
    // 用单词边界匹配,避免部分匹配(比如避免匹配到包含该片段的其他词)
    if (preg_match("/\b$locationText\b/", $lowerTweet)) {
        $location[] = $slug;
    }
}

print_r($location);

此方法同样能得到期望的结果。

内容的提问来源于stack exchange,提问作者Dominion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:56:01