2017-01-10 1 views
0

두 문장이 있습니다.PHP preg_replace가 다른 값을 반환합니다.

1) I 과 같은 자동차입니다. 2) 나는 왕과 같은 천을 입는다.

두 문장 모두에서 같은 단어의 의미가 다릅니다. 그래서 함수를 작성하고 싶습니다. 첫 번째 명령문을 전달하면 'a'가 반환됩니다. & 두 번째 명령문을 통과하면 'b'가 반환됩니다. preg_replace 같은

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

감사

+0

1) 첫 번째 문장을 전달하면 무슨 뜻입니까? 문장을 구분하는 것은 무엇입니까? –

+0

이 문장처럼 = ** 나는 자동차 ** –

+0

을 좋아할 때마다 별도의 문자열을 보낼 것입니다. 그러면 chkStatement가 메서드 호출의 발생을 어떻게 계산합니까? 우선, 당신은 여기에 정규식이 필요하지 않습니다 ... 당신은 문자열에 like 또는 not ...가 포함되어 있는지를 볼 수 있습니다. 둘째, 메소드가 호출 된 횟수를 세는 전역 변수가 필요합니다 ... –

답변

0

간단한 PHP 함수는 단어가 사용되는 상황에 따라 다른 값을 반환 할 수 없습니다.

자연 언어 처리의 광대 한 우주를 조사하고 싶을 것입니다. 행운을 빕니다!

+0

더 자세히 설명해 주실 수 있습니까? 또는 어떤 예를 든다. –

+0

1) 새처럼, 나는 날고 싶어. 2) 나는 차를 좋아한다. 당신은 1)을 위해 무엇을 돌려 주며 당신은 2)를 위해 무엇을 돌려 주나요? 두 가지 모두, 같은 위치가 동일하지만 컨텍스트가 아닙니다 ... 이제 어떻게 자연어 처리가 필요하기 때문에 컨텍스트를 감지합니까? –

+0

@Maverick_Mrt이 문제를 해결해 주셔서 감사합니다. –

0

Marc-Antoine이 맞으면 like을 동사로 식별하는 유일한 방법은 NLP입니다. 우리가이 충분히 단순화 경우

그러나, 당신은 I, You, We, 또는 They에 대한 단어 like 전에 확인할 수 있습니다. 실제로 동사인지 확인하지 않고 많은 예외가 있어야합니다. 다음과 같이 사용할 수 있습니다.

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'); 
관련 문제