2011-02-23 3 views
1

HTML Webページからすべてのコンテンツワードと、Javaを使用して同じHTML WebページのMETAタグに含まれるすべてのキーワードを取得します。ここJAVAを使用したHTML WebPageのMETAタグからKEYWORDを取得

<html> 
<head> 
<meta name = "keywords" content = "deception, intricacy, treachery"> 
</head> 
<body> 
My very short html document. 
<br> 
It has just 2 'lines'. 
</body> 
</html> 

内容語は次のとおりです:
たとえば、このHTMLソースコードを考えてみ私は、非常には、は、HTML文書それは、は短く持って,ちょうど,

注:句読点と数字「2」が除外されています。ここ

キーワードは以下のとおりです。詐欺複雑、私はWebDoc呼ばれ、この目的のためにクラスを作成している裏切り

が、これは私の知る限り取得することができたようです。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.util.Set; 
import java.util.TreeSet; 

public class WebDoc { 

    protected URL _url; 
    protected Set<String> _contentWords; 
    protected Set<String> _keyWords 

    public WebDoc(URL paramURL) { 
     _url = paramURL; 
    } 

    public Set<String> getContents() throws IOException { 
     //URL url = new URL(url); 
     Set<String> contentWords = new TreeSet<String>(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(_url.openStream())); 
     String inputLine; 

     while ((inputLine = in.readLine()) != null) { 
      // Process each line. 
      contentWords.add(RemoveTag(inputLine)); 
      //System.out.println(RemoveTag(inputLine)); 
     } 
     in.close(); 
     System.out.println(contentWords); 
     _contentWords = contentWords; 
     return contentWords; 
    }  

    public String RemoveTag(String html) { 
     html = html.replaceAll("\\<.*?>",""); 
     html = html.replaceAll("&",""); 
     return html; 
    } 



    public Set<String> getKeywords() { 
     //NO IDEA ! 
     return null; 
    } 

    public URL getURL() { 
     return _url; 
    } 

    @Override 
    public String toString() { 
     return null; 
    } 
} 

答えて

1

したがって、RedSoxFanからのメタキーワードについての回答の後、コンテンツラインを分割するだけで済みます。 あなたはそこに同様の方法を使用することができます。

を代わりに

contentWords.add(RemoveTag(inputLine)); 

使用

contentWords.addAll(Arrays.asList(RemoveTag(inputLine).split("[^\\p{L}]+"))); 
  • .split(...)は、すべての非文字であなたのラインを分割(私はこの作品を願って、試してみてください。報告書)、各文字列と文字列との間に空文字列を含む部分文字列を返します。
  • Arrays.asList(...)は、この配列をリストにラップします。
  • addAll(...)は、この配列のすべての要素をセットに追加しますが、重複はしません。

最後に、contentWords-Setから空の文字列""を削除する必要があります。

1

プロセスの各ラインとあなたは説明が必要な場合は、私に知らせて

public Set<String> getKeywords(String str) { 
     Set<String> s = new HashSet<String>(); 
     str = str.trim(); 
     if (str.toLowerCase().startsWith("<meta ")) { 
      if (str.toLowerCase().matches("<meta name\\s?=\\s?\"keywords\"\\scontent\\s?=\\s?\".*\"/?>")) { 
       // Returns only whats in the content attribute (case-insensitive) 
       str = str.replaceAll("(?i)<meta name\\s?=\\s?\"keywords\"\\scontent\\s?=\\s?\"(.*)\"/?>","$1"); 
       for (String st:str.split(",")) s.add(st.trim()); 
       return s; 
      } 
     } 
     return null; 
    } 

を使用しています。

+0

申し訳ありません。コンテンツのラインを忘れました。 PaŭloEbermannは良い答えを出しました。私はそれがbodyタグに含まれているかどうかを確認するだけでした。さもなければ、頭からも情報を得るでしょう – RedSoxFan

関連する問題