5.1 为每个条目添加一个字段

添加一个自动从现有字段派生出的新的字段往往是方便的。这些字段经常使搜索和分析更加便捷。例如,在5.1中我们定义了一个函数cv(),将辅音和元音的字符串映射到相应的 CV 序列,即kakapua将映射到CVCVCVV。这种映射有四个步骤。首先,将字符串转换为小写,然后将所有非字母字符[^a-z]用下划线代替。下一步,将所有元音替换为V。最后,所有不是V或下划线的必定是一个辅音,所以我们将它替换为C。现在,我们可以扫描词汇,在每个lx字段后面添加一个新的cv字段。5.1显示了它对一个特定条目上做的内容;注意输出的最后一行表示新的cv字段。

  1. from xml.etree.ElementTree import SubElement
  2. def cv(s):
  3. s = s.lower()
  4. s = re.sub(r'[^a-z]', r'_', s)
  5. s = re.sub(r'[aeiou]', r'V', s)
  6. s = re.sub(r'[^V_]', r'C', s)
  7. return (s)
  8. def add_cv_field(entry):
  9. for field in entry:
  10. if field.tag == 'lx':
  11. cv_field = SubElement(entry, 'cv')
  12. cv_field.text = cv(field.text)

注意

如果一个 Toolbox 文件正在不断更新,code-add-cv-field 中的程序将需要多次运行。可以修改add_cv_field()来修改现有条目的内容。使用这样的程序为数据分析创建一个附加的文件比替换手工维护的源文件要安全。