PHP preg_replace返回不同​​的值

时间:2017-01-10 04:42:09

标签: php regex preg-match

我有两个陈述。

1)我喜欢 Car。 2)我穿喜欢国王。

在两个陈述中,相似词的含义是不同的。所以我想写函数,如果我通过第一个语句它应该返回'a'和amp;我通过了第二个声明然后应该返回'b'。

    function chkStatement($stmt) {
      //function body
    }
    chkStatement('I like an apple');
chkStatement('I like Mango');
chkStatement('I fly in air like a bird');

由于

2 个答案:

答案 0 :(得分:0)

preg_replace这样的简单PHP函数不允许您根据使用单词的上下文返回不同的值。

您需要深入了解自然语言处理的广阔空间。祝你好运!

答案 1 :(得分:0)

Marc-Antoine是正确的,将like标识为动词的唯一方法是使用NLP

但是,如果我们对此进行了简化,您可以在单词I之前检查YouWeTheylike。你不会检查它是否实际上是一个动词,并且应该有很多例外。你可以使用这样的东西:

function chkStatement($stmt) {
    if (preg_match('/\b(?:(I|You|We|They)\s+)?like\b/i', $stmt, $matches)) {
        if (isset($matches[1])) return "a";
        return "b";
    } else {
        return false;
    }
}

echo chkStatement('I like an apple');
echo chkStatement('I like Mango');
echo chkStatement('I fly in air like a bird');
echo chkStatement('Something else');