JSOUP Поиск групп слов

В качестве домашнего задания мне нужно написать программу, которая удаляет HTML-код с веб-сайта, а затем каким-то образом находит фразы на веб-сайте. Когда я говорю фразы, я имею в виду какой-то произвольный способ организации текста, когда слова, находящиеся в непосредственной близости друг от друга, помещаются в одну группу. Я знаю, это звучит очень неясно, но в задании говорится, как мы это делаем, зависит от нашей собственной интерпретации того, как найти «фразы».

В настоящее время у меня есть код, который выглядит так:

Document doc = Jsoup.connect("http://oracle.com/").get();
String html = doc.body().toString();

System.out.println(html); 

Это даст мне достойную распечатку всех различных слов, которые появляются на какой-либо веб-странице, при разборе всего html.

Моя основная проблема заключается в том, что я не могу придумать способ анализа HTML, чтобы каким-то образом собрать эти произвольные группы (и я не знаю, какие критерии я могу использовать для произвольного формирования этих «групп» слов) .

Я знаю, что этот вопрос звучит ужасно, но я не знаю, как еще я могу его сформулировать, и у меня действительно нет идей относительно того, что я могу сделать. Задание, которое мне дали, крайне неясно, и, когда меня попросили уточнить, мой профессор просто сказал мне интерпретировать его самому. Мне было интересно, есть ли у кого-нибудь какие-либо идеи о том, как анализировать html, чтобы слова, близкие друг к другу (возможно, внутри похожих тегов html или что-то в этом роде), могли быть отфильтрованы аналогично текущему выводу, который у меня есть прямо сейчас, за исключением, возможно, после каждой "фразы " там есть новая строка или что-то, что я могу разобрать.

Спасибо за любые идеи или советы.


person KWJ2104    schedule 09.12.2011    source источник


Ответы (2)


То, что вы ищете, — это концепция, называемая выводом. Из википедии

Стеммер для английского языка, например, должен идентифицировать строку «кошки» (и, возможно, «кошачий», «кошачий» и т. д.) как основанную на корне «кошка», а «стеммер», «стемминг», «стеммед» как на основе «стебля». Алгоритм стемминга сводит слова «рыбалка», «ловил», «рыба» и «рыбак» к корневому слову «рыба».

Для этого вы предоставляете простую реализацию грубой силы. Также ознакомьтесь с реализациями алгоритма поиска корней от Lucene и OpenNLP

person Aravind Yarram    schedule 09.12.2011

Поскольку ваш вопрос очень неясен, мой ответ в любом случае не идеален. На самом деле это скорее предложение, чем ответ, поскольку комментарий может быть не таким большим.

Это идея, основанная на вашем следующем определении фраз - When I say phrases I mean some sort of arbitrary way of organizing text so that words that are in close proximity to each other are put in the same group

Я думаю, что вам необходимо «отделить» отдельные фрагменты текста от html, насколько это возможно от html. Не может быть стопроцентно надежного способа добиться этого, потому что html сам по себе может быть настолько сложным, что разбор его таким образом может стать чрезвычайно трудным, если не возможным.

Вот одно предложение, которое пришло мне в голову - найти непрерывные фрагменты текста в html, в которых нет тегов. Это можно легко сделать с помощью простого регулярного выражения, если вы используете jsoup, вы можете сделать что-то вроде этого:

String html = doc.body().toString();
Matcher m = Pattern.compile("([^<>]+)").matcher(html);
while(m.find()) {
    String text = f.group(1);
}

Но это само по себе может не всегда работать, так как некоторые прерывистые украшения html для изменения шрифта, и даже маркеры полужирного шрифта и курсива могут «сломать» эти фразы. Таким образом, вы можете создать некоторую устойчивость, чтобы игнорировать такие вещи.

Или, может быть, вы можете найти «расстояние тега» одного фрагмента текста от другого. Это подсчет количества html-тегов, которые появляются между фрагментами текста и могут учитывать фрагменты вместе, если они разделены всего одним или, может быть, 2-3 тегами.

И, наконец, вы можете привнести немного своего творчества в развитие этого подхода. Опять же, я хотел бы упомянуть, что это всего лишь предложение для вас, чтобы что-то построить. Всего наилучшего.

person d-live    schedule 09.12.2011