Извлекайте ключевые слова из мета-тега на веб-странице HTML, используя JAVA - PullRequest
1 голос
/ 24 февраля 2011

Я хочу получить все слова содержимого из веб-страницы HTML и все ключевые слова, содержащиеся в теге META той же веб-страницы HTML, с использованием Java.
Например, рассмотрим следующий HTML-код:

<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 , документ , это , имеет , просто , строки

Примечание: Знаки препинания и число '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;
    }
}

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Итак, после ответа от RedSoxFan о мета-ключевых словах, вам нужно только разделить ваши строки контента.Вы можете использовать подобный метод там:

Вместо

contentWords.add(RemoveTag(inputLine));

используйте

contentWords.addAll(Arrays.asList(RemoveTag(inputLine).split("[^\\p{L}]+")));
  • .split(...) разбивает вашу строку на все не-буквы (Я надеюсь, что это работает, пожалуйста, попробуйте и сообщите), возвращая массив подстрок, каждая из которых должна содержать только буквы, и несколько пустых строк между ними.
  • Arrays.asList(...) заключает этот массив в список.
  • addAll(...) добавляет все элементы этого массива в набор, но не дублирует их.)

В конце вы должны удалить пустую строку "" из вашего набора contentWords.

1 голос
/ 24 февраля 2011

Обработайте каждую строку и используйте

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;
    }

Если вам нужно объяснение, дайте мне знать.

...