Package net.sf.regain.crawler.preparator.html

Source Code of net.sf.regain.crawler.preparator.html.HtmlContentExtractor

/*
* regain - A file search engine providing plenty of formats
* Copyright (C) 2004  Til Schneider
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* Contact: Til Schneider, info@murfman.de
*
* CVS information:
*  $RCSfile$
*   $Source$
*     $Date: 2008-10-25 18:35:21 +0200 (Sa, 25 Okt 2008) $
*   $Author: thtesche $
* $Revision: 349 $
*/
package net.sf.regain.crawler.preparator.html;

import net.sf.regain.RegainException;
import net.sf.regain.crawler.document.RawDocument;

import org.apache.regexp.RE;
import org.apache.regexp.RESyntaxException;


/**
* Extrahiert aus einem HTML-Dokument den eigentlichen Inhalt.
* <p>
* Dazu werden zwei regul�re Ausdr�cke verwendet, die jeweils den Anfang und das
* Ende des Inhalts erkennen. Alles was dazwischen liegt wird ausgeschnitten.
*
* @author Til Schneider, www.murfman.de
*/
public class HtmlContentExtractor extends AbstractExtractor {

  /**
   * Der Regul�re Ausdruck, der eine überschrift findet.
   * <p>
   * Ist <code>null</code>, wenn das HTML-Dokuments nicht auf überschriften
   * durchsucht werden soll.
   */
  private RE mHeadlineRE;

  /**
   * Die Gruppe des Regul�re Ausdrucks, der eine überschrift findet.
   */
  private int mHeadlineRegexGroup = -1;



  /**
   * Erzeugt eine neue HtmlContentExtractor-Instanz.
   *
   * @param prefix Der Präfix den eine URL haben muss, damit das zugeh�rige
   *        Dokument von diesem HtmlContentExtractor bearbeitet wird.
   * @param contentStartRegex Der Regul�re Ausdruck, der die Stelle findet,
   *        wo der zu indizierende Inhalt von HTML-Dokumenten beginnt.
   *        <p>
   *        Ist <code>null</code> oder Leerstring, wenn der gesamte Anfang des
   *        HTML-Dokuments indiziert werden soll.
   * @param contentEndRegex Der Regul�re Ausdruck, der die Stelle findet,
   *        wo der zu indizierende Inhalt von HTML-Dokumenten endet.
   *        <p>
   *        Ist <code>null</code> oder Leerstring, wenn das gesamte Ende des
   *        HTML-Dokuments indiziert werden soll.
   * @param headlineRegex Der Regul�re Ausdruck, der eine überschrift findet.
   *        <p>
   *        Ist <code>null</code>, wenn das HTML-Dokuments nicht auf
   *        überschriften durchsucht werden soll.
   * @param headlineRegexGroup Die Gruppe des Regul�re Ausdrucks, der eine
   *        überschrift findet.
   * @throws RegainException Wenn ein Regul�rer Ausdruck einen Syntaxfehler
   *         enthält.
   */
  public HtmlContentExtractor(String prefix, String contentStartRegex,
    String contentEndRegex, String headlineRegex, int headlineRegexGroup)
    throws RegainException
  {
    super(prefix, contentStartRegex, contentEndRegex);

    try {
      if ((headlineRegex != null) && (headlineRegex.length() != 0)) {
        mHeadlineRE = new RE(headlineRegex, RE.MATCH_CASEINDEPENDENT | RE.MATCH_MULTILINE);
        mHeadlineRegexGroup = headlineRegexGroup;
      }
    }
    catch (RESyntaxException exc) {
      throw new RegainException("Syntax error in regular expression", exc);
    }
  }



  /**
   * Extrahiert den eigentlichen HTML-Inhalt aus dem gegebenen Dokument.
   *
   * @param rawDocument Das Dokument, dessen Inhalt extrahiert werden soll.
   * @return Der eigentliche HTML-Inhalt.
   * @throws RegainException Wenn das Dokument nicht gelesen werden konnte.
   */
  public String extractContent(RawDocument rawDocument) throws RegainException {
    return extractFragment(rawDocument);
  }



  /**
   * Extrahiert die überschrifen aus einem HTML-Dokuments.
   * <p>
   * Es handelt sich dabei nicht um die überschrift des Dokuments selbst,
   * sondern lediglich um Unter-überschriften, die in dem Dokument verwendendet
   * werden. Mit Hilfe dieser überschriften l��t sich eine bessere Relevanz
   * berechnen.
   *
   * @param content Der Inhalt, aus dem die überschriften extrahiert werden
   *        sollen.
   * @return Die überschriften, die im Dokument gefunden wurden, durch \n
   *         getrennt, oder <code>null</code>, wenn keine überschrift gefunden
   *         wurde oder wenn gar nicht nach überschriften gesucht werden soll.
   * @see #extractContent(RawDocument)
   */
  public String extractHeadlines(String content) {
    if (mHeadlineRE == null) {
      return null;
    }

    int offset = 0;
    StringBuffer buffer = null;
    while (mHeadlineRE.match(content, offset)) {
      String headline = mHeadlineRE.getParen(mHeadlineRegexGroup);
      headline = headline.trim();

      // Append the headline if it is not empty
      if (headline.length() != 0) {
        if (buffer == null) {
          buffer = new StringBuffer();
        }

        buffer.append(headline);
        buffer.append("\n");
      }

      offset = mHeadlineRE.getParenEnd(0);
    }

    if (buffer == null) {
      return null;
    } else {
      return buffer.toString();
    }
  }

}
TOP

Related Classes of net.sf.regain.crawler.preparator.html.HtmlContentExtractor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.