I’m trying to create a boolean interpreter (similar to using eval) but can’t do that.
For example, if I have some text like:
"this is some text"
and I have a boolean expression
(text OR keyword) AND (some OR keyword2)
booleanEval(text, phrase)
> true
Below are some test cases with the expected outcome.
I’m trying to avoid writing the entire function from scratch. Is there a clean way to do this?
const testCases = [
{ text: "keyword1 is present but keyword4 is not here", boolExpr: "(keyword1 OR keyword2) AND (keyword3 OR keyword4)", expected: false },
{ text: "keyword1 and keyword3 are both present", boolExpr: "(keyword1 OR keyword2) AND (keyword3 OR keyword4)", expected: true },
{ text: "keyword1 and keyword3 are present, but keyword5 is also here", boolExpr: "(keyword1 OR keyword2) AND (keyword3 OR keyword4) AND NOT (keyword5 OR keyword6)", expected: false },
{ text: "keyword1 and keyword3 are present, without keyword5", boolExpr: "(keyword1 OR keyword2) AND (keyword3 OR keyword4) AND NOT (keyword5 OR keyword6)", expected: true },
{ text: 'The "phrase 1" and "phrase 2" are present', boolExpr: '("phrase 1" OR keyword1) AND ("phrase 2" OR keyword2) AND NOT ("phrase 3" OR keyword3)', expected: true },
{ text: 'The "phrase 1" is here but not "phrase 2"', boolExpr: '("phrase 1" OR keyword1) AND ("phrase 2" OR keyword2) AND NOT ("phrase 3" OR keyword3)', expected: false },
{ text: 'The "phrase 1" and "phrase 2" are here, but also "phrase 3"', boolExpr: '("phrase 1" OR keyword1) AND ("phrase 2" OR keyword2) AND NOT ("phrase 3" OR keyword3)', expected: false },
{ text: 'keyword1, keyword3 and keyword6 are all here', boolExpr: "(keyword1 OR keyword2) AND (keyword3 OR keyword4) AND NOT (keyword5 OR keyword6)", expected: false },
];
Unfortunately I can’t use eval() 🙁
any thoughts?