了解 DParser for Python
2007-03-29 12:13:45 来源:WEB开发网核心提示: vowel 、 caps 和 threeletter 的结果不需要是确切的;它们全部都可以获取彼此有重叠的单词集合,例如:清单 11. 当 DParser 得体地检测到含糊短语$ echo -n "Read IBM developerWorks" | ./ibm.pyT
vowel 、 caps 和 threeletter 的结果不需要是确切的;它们全部都可以获取彼此有重叠的单词集合。例如:
清单 11. 当 DParser 得体地检测到含糊短语
$ echo -n "Read IBM developerWorks" | ./ibm.py
Traceback (most recent call last): [...]
dparser.AmbiguityException: [...]
当然,您可能幸运地使用了特定的短语:
清单 12. 幸运地避免了含糊短语的解析
$ echo -n "Read GNOSIS website" | ./ibm.py
Head: Read
CAPS: GNOSIS
Tail: website
不要满足于祈祷好运,让我们来显式地指定结果之间的优先级:
清单 13. 判定含糊的条件,ibm2.py
def d_vowel(t):
'vowel : "[AEIOUaeiou][A-Za-z]*" $term 3'
return 'VOWEL'
def d_caps(t):
'caps : "[A-Z]+" $term 2'
return 'CAPS'
def d_threeletter(t):
'threeletter : "[A-Za-z][A-Za-z][A-Za-z]" $term 1'
return '3LETT'
现在,每一个短语都将以特定的顺序识别出中间单词的类型(当然只是可能的那些):
清单 14. 无歧义的解析结果
$ echo -n "Read IBM developerWorks" | ./ibm2.py
Head: Read
VOWEL: IBM
Tail: developerWorks
$ echo -n "Read XYZ journal" | ./ibm2.py
Head: Read
CAPS: XYZ
Tail: journal
做出决定
尽管得到了一些读者的建议,我还是不太看重 DParser。它有很多可以作用于结果的强大的开关和选项,我还没有讨论到 —— 比如指定关联性。大体上,DParser 语言非常健壮,我非常怀疑用于 Python 的 DParser 是否会比纯粹的 Python 解析器运行速度快得非常多。
无论如何,我仍然不能对函数文档字符串风格的解析器具有太多热情。显然,关于这一点,很多优秀的 Python 程序员不会赞同我。此外我还发现一些解析结果有些令人不解:为什么调试模式下可以成功,而标准模式下却不能成功?含糊问题确切是什么时候发生的?使用任何解析工具开发语法都会有类似的意外,但是我发现 DParser 不知何故尤其出乎意料;例如 SimpleParse,就不会让我那么感到惊讶。可能,如果我了解了底层算法的更多复杂细节,它将会更具意义;不过,就我相对浅薄的学识而言,我可能与 95% 以上的读者差不多。有人比我更加熟悉解析;但是实际上大部分程序员懂得更少。
- ››Form Reset Function
- ››FOREACH 宏之GCC实现
- ››了解Windows Mobile文件结构
- ››了解 IBM Smart Business Development and Test o...
- ››ForeFront让企业VPN连接高枕无忧
- ››Forefront TMG日志记录功能
- ››了解 Apache Click:使用轻量模型快速编写 Web 应...
- ››了解 IBM Data Studio Version 2 软件打包方式
- ››了解微软Office 2010数字签名的新特性
- ››了解Sybase IQ服务剑桥天文观测台
- ››了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数...
- ››了解 Eclipse 中的 JFace 数据绑定,第 2 部分: 绑...
更多精彩
赞助商链接