2012-02-17 8 views
1

ニュースのウェブページから主要な内容(リンク、広告などを除く)を抽出する必要があります。私はウェブでそれについて読んだことがあることを知りました。 HTMLページを解析し、HTMLタグから内容を選択します。私は入力としてhtmlファイルを取り、java.swing。で利用可能なHtmleditorkitを使ってWebページからテキストを抽出するコードを書いています。 ニュースのウェブページからメインコンテンツを抽出するのが難しい

import java.io.IOException; 
import java.io.FileReader; 
import java.io.Reader; 
import java.util.List; 
import java.util.ArrayList; 

import javax.swing.text.html.parser.ParserDelegator; 
import javax.swing.text.html.HTMLEditorKit.ParserCallback; 
import javax.swing.text.html.HTML.Tag; 
import javax.swing.text.MutableAttributeSet; 

public class HTMLUtils { 
private HTMLUtils() {} 

public static List<String> extractText(Reader reader) throws IOException { 
final ArrayList<String> list = new ArrayList<String>(); 

ParserDelegator parserDelegator = new ParserDelegator(); 
ParserCallback parserCallback = new ParserCallback() { 
     @Override 
    public void handleText(final char[] data, final int pos) { 
    list.add(new String(data)); 
    } 
     @Override 
    public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) { } 
     @Override 
    public void handleEndTag(Tag t, final int pos) { } 
     @Override 
    public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { } 
     @Override 
    public void handleComment(final char[] data, final int pos) { } 
     @Override 
    public void handleError(final java.lang.String errMsg, final int pos) { } 
}; 
parserDelegator.parse(reader, parserCallback, true); 
return list; 
} 

public static void main(String[] args) throws Exception{ 
FileReader reader = new FileReader("C://Users//Mukul//Desktop//demo.html"); 
List<String> lines = HTMLUtils.extractText(reader); 
for (String line : lines) { 
    System.out.println(line); 
} 
} 
} 

しかし、私の問題は、私は、私はニュースのウェブページから記事などのWebページからのみ、メインのコンテンツを選択することができますどのように把握するエーブルないよです。

また、私は構文解析のやり方を知りたいのですが、Jsoup、Jtidyなどのオープンソースライブラリを使用する必要があります。同じもののために。

私が助けて間違っている箇所を修正してください。

答えて

0

あなたは2つの問題を抱えています.1つはページの内容を取得しています(私は推測しています)。次のイディオムを使用します。(あなたが投稿したコードではひどく間違っています。私の好み)

String text = new Scanner(new URL("C://Users//Mukul//Desktop//demo.html").openConnection().getInputStream()).useDelimiter("\\A").next(); 

およびその他のはあなただけで読んで文字列(セマンティック)を解釈しています。私はtheres単一の正解とは思わないが、その1つのページを毎回解析したい場合、それはいくつかの固定レイアウトを持つ必要があります。メインのコンテンツを広告、ヘッダー、リンクなどと区別するためのパターンを見つけなければならないでしょうし、正規表現を使って抽出することもできます。

これを確認してください:http://code.google.com/p/boilerpipe/

関連する問題