我处于需要编写大量解析规则的位置(换句话说,一个将字符串转换为另一个字符串或结构化数据的函数),虽然我认为我会为此使用 PEG,但它会是只需提供一个例句列表及其正确的解析,我就更容易写,而且在我看来,这在技术上似乎微不足道,但我很困惑。
我玩过 PEGjs(一个解析表达式语法工具)和正则表达式。就我的目的而言,这些需求似乎非常基本,远低于 PEG 和正则表达式提供的所有功能。
这是我要解析的示例:
"I want a red square" -> "make a red square"
"Give me a red square!" -> "make a red square"
"If you please, sir, a blue triangle." -> "make a blue triangle"
"Scratch that." -> "delete last shape"
如您所见,我想提供数百个例句,每个例句都配有正确的解析,并让计算机编写必要的函数来解析所有符合该模式的句子。
我有点难以理解这一点,所以我问所有的黑客:
- 如果我只提供输入句子的许多不同变体,是否只需要非常简单的逻辑(即没有机器学习、没有 PEG 和没有正则表达式),这不是真的吗?
- 一些机器学习工具(贝叶斯?)可以使这成为一项简单的任务吗?(在我的应用程序中,我不需要 100% 的确定性来解析句子;歧义是可以的,特别是如果我可以呈现歧义供用户解决)
- 有哪些工具(库)或逻辑(请使用伪代码!)非常适合此类问题,或者只是说明其性质?