Compare.php
<?php
namespace Tlf\Tester\Test;
class Idk extends \Tlf\Tester {
public function testIdk(){
//input data
$phrases = <<<TXT
Robin likes fish
Robin doesn't like spring onion
Willie loves fish
Abigail likes amethyst
Sebastian likes fish
Willie likes amethyst
Willie likes tulip
Willie likes cats
Pierre is open 9am-9pm
TXT;
$synonyms = [
'loves'=>[], // likes is NOT a synonym for loves
'likes'=>['loves'] // but loves is for likes
];
//questions:
// Who likes fish?
// Who doesn't like fish?
// What does Willie like?
$lines = explode("\n", $phrases);
$target = [
['actor'=>'Robin', 'verb'=>'likes', 'object'=>'fish'],
['actor'=>'Robin', 'verb'=>'doesn\'t like', 'object'=>'spring onion'],
];
foreach ($target as $index=>$row){
$this->compare($row,
$this->parse_sentence2(trim($lines[$index]))
);
}
}
public function parse_sentence2(string $sentence){
$verbs = [
'likes'=>['loves'],
'doesn\'t like'=>[],
'loves'=>[],
'is open'=>[],
];
foreach ($verbs as $v=>$synonyms){
if (!strpos($sentence, $v))continue;
$split = explode($v, $sentence);
$parsed = [
'actor'=>trim($split[0]),
'verb'=>$v,
'object'=>trim($split[1])
];
return $parsed;
}
}
public function parse_sentence(string $sentence){
$split = explode(' ', $sentence);
$parsed = [
'actor'=>$split[0],
'verb'=>$split[1],
'object'=>implode(' ',array_slice($split,2))
];
return $parsed;
}
public function testParseSentence(){
$sentence = 'Robin likes fish';
$target = [
'actor'=>'Robin',
'verb'=>'likes',
'object'=>'fish'
];
$parsed = $this->parse_sentence($sentence);
$this->compare($target,$parsed);
echo 'beep';
}
}