TmeplateMaker
, кажется, делает то, что вам нужно, по крайней мере, в соответствии с документацией. Вместо того, чтобы получать шаблон в качестве входных данных, он выводит («учится»), если из нескольких документов. Затем у него есть метод extract
для извлечения данных из других документов, созданных с помощью этого шаблона.
Пример показывает:
# Now that we have a template, let's extract some data.
>>> t.extract('<b>red and green</b>')
('red', 'green')
>>> t.extract('<b>django and stephane</b>')
('django', 'stephane')
# The extract() method is very literal. It doesn't magically trim
# whitespace, nor does it have any knowledge of markup languages such as
# HTML.
>>> t.extract('<b> spacy and <u>underlined</u></b>')
(' spacy ', '<u>underlined</u>')
# The extract() method will raise the NoMatch exception if the data
# doesn't match the template. In this example, the data doesn't have the
# leading and trailing "<b>" tags.
>>> t.extract('this and that')
Traceback (most recent call last):
...
Итак, чтобы выполнить поставленную задачу, я думаю, вам следует:
- Дайте ему несколько документов, отрисованных по вашему шаблону - у него не будет проблем с выводом шаблона из них.
- Используйте выведенный шаблон для извлечения данных из новых документов.
Если подумать, это даже более полезно, чем Perl Template::Extract
, так как он не ожидает, что вы предоставите ему чистый шаблон - он изучает его самостоятельно из образца текста.