WEB开发网
开发学院软件开发Python 了解 DParser for Python 阅读

了解 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% 以上的读者差不多。有人比我更加熟悉解析;但是实际上大部分程序员懂得更少。

上一页  2 3 4 5 6 7 

Tags:了解 DParser for

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接