Каков самый быстрый способ удалить html-теги из документа в java?

У меня есть куча веб-документов, и я хочу удалить из них html-теги. Я видел несколько сообщений на StackOverflow о том, как это сделать в java, от регулярных выражений до HtmlCleaner и Jsoup.

Я заинтересован в том, чтобы найти самый быстрый способ сделать это. У меня миллионы документов, поэтому производительность в моем случае имеет решающее значение. Я даже могу обменять немного качества на производительность.

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


person user3111525    schedule 03.01.2012    source источник
comment
вы должны были измерить это   -  person Bozho    schedule 03.01.2012
comment
спасибо, я это знаю. Интересно, кто-нибудь делал это раньше и может поделиться результатами.   -  person user3111525    schedule 03.01.2012
comment
Что именно вам нужно в итоге. Это просто очистка экрана?   -  person Thorbjørn Ravn Andersen    schedule 03.01.2012
comment
@frankmoss: Я видел несколько сообщений на StackOverflow о том, как это сделать на Java, все от регулярных выражений до... Я так понимаю, что это был не этот ответ с 4435 голосами (когда я печатаю это): stackoverflow .com/questions/1732348/ :)   -  person TacticalCoder    schedule 03.01.2012
comment
Если ваш HTML-код является строгим или XHTML. Используйте XSLT, вот вид-[xhtml и XSLT][1]связанный [1]: stackoverflow.com/questions/1639625/   -  person Andy Petrella    schedule 03.01.2012
comment
@ ThorbjørnRavnAndersen это именно то, что я хочу, очистить и как можно быстрее! Мне нужен только обычный текст.   -  person user3111525    schedule 06.01.2012
comment
Установите ссылки или рысь в свою операционную систему и вызовите ее с возможностью дампа того, что вам нужно.   -  person Thorbjørn Ravn Andersen    schedule 07.01.2012


Ответы (3)


Мое мнение - использовать как можно больше потоковой/SAX-обработки: 1) потому что она использует меньше памяти 2) она быстрая 3) может быть проще распараллелена (следствие низкого потребления памяти)

Эти факторы необходимы (с моей точки зрения) в ваших случаях использования, когда у вас есть миллион документов. см. здесь Wikipedia SAX

Итак, если ваш Html является строгим или XHTML. Используйте XSLT, и вот руководство по преобразованию XML (XHTML) с помощью SAX XSLT+SAX +Ява.

И, наконец, если у вас НЕТ корректного HTML-кода XML, посмотрите этот Java: замена строк в потоках, массивах, файлах и т. д., которые используют поток (и PushBackReader).

ХТН

person Andy Petrella    schedule 03.01.2012
comment
Я работаю с веб-документами, т.е. это не правильно сформированный XML. Использование Tidy или чего-то подобного привело бы к накладным расходам. Спасибо за ссылку (PushBackReader), проверю. - person user3111525; 07.01.2012
comment
Дайте мне знать, помогло ли это ... или даже если вам нужна дополнительная помощь таким образом - person Andy Petrella; 07.01.2012

1) если html является правильным xml, вы можете создать его объект документа и удалить узел.

2) если это неправильный xml, тогда прочитайте весь html как строку и используйте функцию замены, чтобы удалить солнечную строку «html».

Если HTML не является правильным xml, тогда регулярное выражение является самым быстрым способом замены в строке.

person dinesh028    schedule 03.01.2012
comment
1) Проблема с документом в том, что их всех надо грузить и парсить в памяти, так что он будет занимать много места, тем более что если хтмл огромный, можно дойти до кучи проблем. 2) @user988052 объявил регулярное выражение неактуальным, пожалуйста, перейдите по ссылке на вопрос - person Andy Petrella; 03.01.2012
comment
@andy petrella: - это то, что я передал. Если html является правильным xml, можно использовать синтаксический анализ sax/dom для удаления узла. можно использовать функцию замены строки, и в этой строке замены можно указать регулярное выражение - person dinesh028; 03.01.2012
comment
@ DS28 Я работаю с веб-документами. Так что забудьте о правильном xml. Я боялся, что лучшим вариантом будет регулярное выражение, но, похоже, мне придется либо пойти с ним, либо использовать jsoup. - person user3111525; 06.01.2012
comment
@frankmoss: - Если html не подходит, вы можете напрямую использовать класс Java String. Открывающий HTML-тег всегда будет присутствовать в начале, а закрывающий HTML-тег будет в конце документа. Таким образом, вам не нужно искать весь документ, просто найдите первое вхождение сверху и первое вхождение снизу и замените его. Это позволит избежать поиска всего документа по html-тегам. - person dinesh028; 06.01.2012
comment
@frankmoss: - Если под html-тегами вы имели в виду стандартные html-теги, то вы также можете использовать функцию замены, которая может принимать регулярное выражение в качестве входных данных и удалять все строки в соответствии с регулярным выражением. Многие API используют эту функцию по очереди. Но что делает поиск быстрее, так это то, что правильный xml представляет собой древовидную структуру формы. Таким образом, очевидно, что поиск и замена будут быстрее с древовидной структурой, а не с линейным поиском. Надеюсь, вы поняли мою точку зрения. - person dinesh028; 06.01.2012

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

person user3111525    schedule 10.01.2012
comment
невозможно анализировать HTML с помощью регулярных выражений: см. первый ответ stackoverflow.com/questions/1732348/ - person Philipp Wendler; 10.01.2012