WEB开发网
开发学院软件开发Python 可爱的 Python: 使用 Spark 模块解析 阅读

可爱的 Python: 使用 Spark 模块解析

 2007-03-29 12:07:02 来源:WEB开发网   
核心提示: 清单 2. 智能 ASCII 样本文本(p.txt)Text with *bold*, and -itals phrase-, and [module]--thisshould be a good 'practice run'.除了样本文件中的内容,还有另外一点内容是关于格

清单 2. 智能 ASCII 样本文本(p.txt)Text with *bold*, and -itals phrase-, and [module]--this
should be a good 'practice run'.

除了样本文件中的内容,还有另外一点内容是关于格式的,但不是很多(尽管 的确有一些细微之处是关于标记与标点如何交互的)。

生成记号

我们的 Spark“智能 ASCII”解析器需要做的第一件事就是将输入文本分成相关的部件。在记号赋予这一层,我们还不想讨论如何构造记号,让它们维持原样就可以了。稍后我们会将记号序列组合成解析树。

上面的 typographify.def 中所示的语法提供了 Spark 词法分析程序/扫描程序的设计指南。请注意,我们只能使用那些在扫描程序阶段为“原语”的名称。也就是说,那些包括其它已命名的模式的(复合)模式在解析阶段必须被延迟。除了这样,我们其实还可以直接复制旧的语法。

清单 3. 删节后的 wordscanner.py Spark 脚本  class WordScanner(GenericScanner):
  "Tokenize words, punctuation and markup"
  def tokenize(self, input):
    self.rv = []
    GenericScanner.tokenize(self, input)
    return self.rv
  def t_whitespace(self, s):
    r" [   
]+ "
    self.rv.append(Token('whitespace', ' '))
  def t_alphanums(self, s):
    r" [a-zA-Z0-9]+ "
    print "{word}",
    self.rv.append(Token('alphanums', s))
  def t_safepunct(self, s): ...
  def t_bracket(self, s): ...
  def t_asterisk(self, s): ...
  def t_underscore(self, s): ...
  def t_apostrophe(self, s): ...
  def t_dash(self, s): ...
class WordPlusScanner(WordScanner):
  "Enhance word/markup tokenization"
  def t_contraction(self, s):
    r" (?<=[a-zA-Z])'(am|clock|d|ll|m|re|s|t|ve) "
    self.rv.append(Token('contraction', s))
  def t_mdash(self, s):
    r' -- '
    self.rv.append(Token('mdash', s))
  def t_wordpunct(self, s): ...

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:可爱 Python 使用

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