我应该在 Python 中使用哪种解析器来将文本与布尔条件匹配
What kind of parser should I use in Python to match a text against a boolean condition
假设我有一段文字是
John likes apple, banana and grapes
我有一个类似于
的布尔表达式
((banana & apple) & (!orange)) || (peach)
这基本上意味着文本应该((包含单词 "banana" 和单词 "apple")和(不应包含 "orange"))或(包含单词 "peach").
将上面的布尔逻辑应用到我们需要得到结果为True的文本中(因为它确实包含banana和apple并且不包含orange这个词。
在 Python 中实现此类布尔规则的简单方法是什么?是否有一个框架可以接受一大块文本和一个表达式并对其进行评估?表达式可以根据框架的要求写成
到目前为止,我正在使用一个简单的代码来解析 Python 文本,该代码将跟踪括号等,效率不高,也没有提供探索更灵活表达式的机会。
谢谢
我不知道你是否想通过提供要解析的文本来做到这一点,但我记住了这一点:
class String(str):
def __call__(self, *args):
s = str(self)
for arg in args:
if arg not in s:
return False
return True
if __name__ == '__main__':
s1 = String("John likes apple, banana and grapes")
print(s1("apple", "banana") and not s1("orange")) # True
假设我有一段文字是
John likes apple, banana and grapes
我有一个类似于
的布尔表达式((banana & apple) & (!orange)) || (peach)
这基本上意味着文本应该((包含单词 "banana" 和单词 "apple")和(不应包含 "orange"))或(包含单词 "peach").
将上面的布尔逻辑应用到我们需要得到结果为True的文本中(因为它确实包含banana和apple并且不包含orange这个词。
在 Python 中实现此类布尔规则的简单方法是什么?是否有一个框架可以接受一大块文本和一个表达式并对其进行评估?表达式可以根据框架的要求写成
到目前为止,我正在使用一个简单的代码来解析 Python 文本,该代码将跟踪括号等,效率不高,也没有提供探索更灵活表达式的机会。
谢谢
我不知道你是否想通过提供要解析的文本来做到这一点,但我记住了这一点:
class String(str):
def __call__(self, *args):
s = str(self)
for arg in args:
if arg not in s:
return False
return True
if __name__ == '__main__':
s1 = String("John likes apple, banana and grapes")
print(s1("apple", "banana") and not s1("orange")) # True