Récemment, j'ai étudié la recherche en texte intégral de Lucene. Dans de nombreux endroits, j'ai besoin d'analyser du contenu HTML ou des pages HTML. Le propre programme de démonstration de Lucene fournit également un analyseur HTML,
mais c'est le cas. pas une solution Java pure. J'ai donc cherché partout et trouvé un "HTMLParser" sur Internet.
Dans quelques jours, je publierai le code pour la récupération du texte intégral dans Lucene. ce site, etc.).
importer java .io.BufferedReader;
importer java.io.File;
importer java.io.FileInputStream;
importer java.io.InputStreamReader;
importer org.htmlparser.Node;
importer org.htmlparser.NodeFilter;
importer org.htmlparser.Parser;
importer org.htmlparser.filters.NodeClassFilter;
importer org .htmlparser.filters.OrFilter;
importer org.htmlparser.nodes.TextNode;
importer org.htmlparser.tags.LinkTag;
importer org.htmlparser.util.NodeList;
importer org.htmlparser .util.ParserException;
import org.htmlparser.visitors.HtmlPage;
import org.htmlparser.visitors.TextExtractingVisitor;
import com.jscud.util.LogMan //Une classe de journalisation
/**
* Démontre l'application de Html Parse.
*
* @author scud http://www.jscud.com
*/
classe publique ParseHtmlTest
{
public static void main(String[] args) lève une exception
{
String aFile = "e:/jscud/temp/test. htm";
String content = readTextFile(aFile, "GBK");
test1(content);
Système .out.println("======== ============================");
test2(content);
System.out.println ("================================== ==");
test3(content);
System.out.println("========================= ==============") ;
test4(content);
System.out.println("============ ================ ========");
test5(aFile);
System.out.println("== ================ ==================");
//L'accès aux ressources externes est relativement lent
test5("http://www.jscud.com ");
System.out.println("===================== =================" );
}
/**
* Lire le fichier pour analyser le contenu.
* filePath peut également être une Url.
*
* @param resource file/Url
*/
test de vide statique public5(Chaîne ressource) lève une exception
{
Parser myParser = new Parser(resource );
//Set encoding
myParser.setEncoding("GBK");
HtmlPage visiteur = new HtmlPage(myParser);
myParser.visitAllNodesWith(visitor );
String textInPage = visiteur.getTitle();
System.out.println(textInPage);
}
/**
* Traité par page. Pour une page HTML standard, cette méthode est recommandée
.*/
public static void test4 (String content) lève une exception
{
Parser myParser;
myParser = Parser.createParser( content, "GBK") ;
System.out.println(textInPage);
}/*** Utilisez le mode Visiteur pour analyser les pages HTML.
** Petits avantages : symboles traduits tels que <>
* Inconvénients : Il y a de nombreux espaces et impossible d'extraire le lien
*/
public static void test3 (String content) lève une exception
{
Parser myParser;
myParser = Parser.createParser(content, " GBK");
TextExtractingVisitor visiteur = new TextExtractingVisitor();
myParser.visitAllNodesWith(visitor);
String textInPage = visiteur.getExtractedText();
System.out.println(textInPage);
}/*** Obtenez le contenu du texte et des liens normaux.
** Utilisez les conditions de filtre.
*/
{
Parser myParser;
NodeList nodeList = null;
myParser = Parser.createParser(content, "GBK");
NodeFilter textFilter = new NodeClassFilter(TextNode.class);
NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
//NodeFilter metaFilter = new NodeClassFilter(MetaTag.class);
OrFilter lastFilter = new OrFilter( );
lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter });
nodeList = myParser.parse (lastFilter);
for (int i = 0; i < nodes.length; i )
Node anode = (Node) nodes[i];
String line = "";
if (anode instanceof TextNode){
TextNode textnode = (TextNode) anode;
//line = textnode.toPlainTextString().trim();
}
else if (instance d'anode de LinkTag)
{
LinkTag linknode = ( LinkTag) anode;
line = linknode.getLink();
//@todo Filtrer les balises jsp : Vous pouvez implémenter cette fonction vous-même
//line = StringFunc.replace(line, "< ;%.*%>", "");
}
continue;
System.out.println(line);
}
/**
* Analyser les nœuds de texte ordinaires.
*
* @param content
* @throws ParserException
*/
public static void test1 (String content) lance ParserException
{
Parser myParser;
Node[] nodes = null;
myParser = Parser.createParser(content, null);
nodes = myParser.extractAllNodesThatAre(TextNode.class); //une exception pourrait être levée ici
for (int i = 0; i < nodes.length; i )
{
TextNode textnode = (TextNode) nodes[i];
String line = textnode.toPlainTextString().trim();
if (line.equals(""))
continue;
System.out.println(line);
}
}
/**
* Lire un fichier dans une chaîne.
*
* @param sFileName nom du fichier
* @param sEncode String
* @return file content
*/
public static String readTextFile(String sFileName, String sEncode)
{
StringBuffer sbStr = new StringBuffer();
essayez
{
File ff = new File(sFileName);
InputStreamReader read = new InputStreamReader(new FileInputStream(ff),
sEncode);
BufferedReader ins = new BufferedReader( read);
String dataLine = "";
while (null != (dataLine = ins.readLine()))
{
sbStr.append(dataLine);
sbStr.append("rn");
}
ins.close();
>
catch (Exception e)
{
LogMan.error("read Erreur de fichier texte", e);
}
return sbStr.toString();
}
/**
* Si la chaîne est vide après avoir supprimé les espaces gauche et droit
* @param astr String
* @return boolean
*/
public static boolean isTrimEmpty (String astr)
{
if ((null == astr) || (astr.length() == 0))
{
return true;
>
if (isBlank(astr.trim()))
{
return true;
}
return false;
}
/**
* Que la chaîne soit vide : null ou que la longueur soit 0.
* @param astr source string.
* @return boolean
*/
public static boolean isBlank(String astr)
{
if ((null == astr) || (astr.length() == 0))
{
return true;
}
else
{
return false;
}
}
}
以上就是htmlParser使用教程的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!