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

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

1 голос
/ 10 декабря 2011

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

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

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

System.out.println(html); 

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

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

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

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

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

То, что вы ищете, - это концепция, называемая stemming .Например, из википедии

В стеммере для английского языка следует определить строку «кошки» (и, возможно, «кошачьи», «кошачий» и т. Д.) Как основанную на корне «кошка» иstemmer "," stemming "," stemmed "как основанный на" стволе ".Алгоритм stemming сокращает слова «fish», «fished», «fish» и «fisher» до корневого слова «fish».

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

0 голосов
/ 10 декабря 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 тега друг от друга.

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

...