Разбор содержимого элементов абзаца с помощью Nokogiri - PullRequest
0 голосов
/ 22 октября 2011

Я хотел бы знать, как правильно проанализировать блок содержимого с помощью Nokogiri:

У меня есть несколько документов для анализа, где они изначально содержали формат, в котором каждый основной контейнер был <p>. Основные фрагменты информации в каждом из них, как ни странно, разделены тегами <font>.

Фактически стандартный образец содержимого <p> содержит следующее и является типичным примером (некоторые имеют намного больше контента, некоторые намного меньше):

<p>
  <font size="5" face="Arial, Helvetica, sans-serif" color="#00CCAA" class="">
    <font color="#AAFF33" class="">
      October 10, 1990 - Maybe a Title
    </font>- 
    <font size="4" class="">
      Some long text here.         
      <font color="#66CC00" class="">
        <a href="SourceTitle/date.pdf">[Blah Blah, October 27, 1982 p. 2</a>
        ]
      </font>. 
      More content. 
      <font color="#00FF33" class="">[Another Source, 1971, issue 01/4]
      </font>. 
    </font>
    <font size="5" face="Arial, Helvetica, sans-serif" color="#00CCAA" class="">
      <font color="#AAFF33" class=""><font size="4" color="#00CCAA" class="">
        Another fantastic article. 
        <a href="SourceTitle/Date.pdf">[Some Source, October 4, p.6]</a>
      </font>
    </font>
  </font>
</font>
</p>

По сути, атрибут «размер шрифта» - это то, что отличает каждый компонент в статье. Основными моментами, которые необходимо извлечь, являются теги FIRST <font size ="5"... (то есть дата статьи и главный заголовок, если заголовок указан), а затем фактический контент.

В настоящее время у меня есть все фрагменты абзаца с: doc.xpath('//p').each do |node|

Однако я не уверен, должен ли я снова пропустить его через Нокогири, чтобы разобрать его содержимое, или мне просто нужно пропустить все через регулярное выражение. Я надеялся на небольшой пример того, как сделать это "должным образом", я полагаю, используя встроенное обнаружение xpath в начальном блоке, который вытягивает элементы. Я предполагаю, что есть способ вытащить подкомпоненты, основанные на разграничении размера шрифта, но я просто еще не видел конкретного примера этого.

1 Ответ

2 голосов
/ 22 октября 2011

Помогает ли это вам начать?

>> doc.xpath('//p').each do |node|
..     puts node.xpath("font[@size='5']/font").first.content.strip
..   end #=> 0
October 10, 1990 - Maybe a Title

Создайте аналогичные выражения для других частей, которые вам нужны, и все готово: -)

...