#java #html #count
#java #HTML #подсчитать
Вопрос:
У меня есть несколько html-документов, для которых мне нужно вернуть количество слов в документе. Это количество должно включать только фактический текст (поэтому никаких html-тегов, например html, br и т.д.).
Есть идеи, как это сделать? Естественно, я бы предпочел повторно использовать некоторый код.
Спасибо,
Ассаф
Ответ №1:
-
Удалите HTML-теги, получите текстовое содержимое, повторно используйте Jsoup
-
Прочитайте файл построчно, удерживайте
Map<String, Integer> wordToCountMap
и считывайте до конца, а также работайте сMap
Комментарии:
1. Вы пропустили (нетривиальный) этап фактического обозначения результирующего текста после удаления HTML
2. Первый шаг преобразования из html в текст был выполнен с использованием следующего: public static int wordCountHtml(String html) { // использует jsoup.org Document doc = Jsoup.parse(html); String text = doc.body().text(); return WordCount(текст); } Теперь мне нужно выяснить, как подсчитывать слова текста. Как упоминалось в этом post…it это не тривиально. У кого-нибудь есть идеи?
3. @Assafn . После того, как вы удалили html, запишите обычный текст в какой-нибудь
File
и прочитайте его с помощьюBufferedReader
иFileInputStream
построчно и обработайте его. Я надеюсь, что это полезно сейчас4. Работа с текстом не является проблемой. Проблема с токенизацией заключается в том, что нам нужно разбивать на слова, и, как указано ниже, это не тривиально.
5. хорошо
split(" ")
сделал бы это, и если вам нужны конкретные слова, которые могут быть определены с помощью регулярного выражения, вы можете разделить их с помощью reg ex
Ответ №2:
Решение с помощью jsoup
private int countWords(String html) throws Exception {
org.jsoup.nodes.Document dom = Jsoup.parse(html);
String text = dom.text();
return text.split(" ").length;
}
Комментарии:
1. Спасибо за решение для копирования и вставки!
Jsoup.parse(html).text().split(" ").length
FTW
Ответ №3:
Я бы добавил дополнительный шаг к ответу Джигара:
- Выполните синтаксический анализ текста документа с помощью JSoup, Jericho или Dom4j
-
Обозначьте полученный текст. Это зависит от вашего определения «слова». Вряд ли это будет так же просто, как разделение по пробелу. И вам нужно будет разобраться с пунктуацией и т.д. Итак, взгляните на различные доступные токенизаторы, например, из проектов Lucene или Stanford NLP. Вот несколько простых примеров, с которыми вы столкнетесь:
"Today I'm going to New York!"
— «Я» — это одно слово или два? Как насчет «Нью-Йорк»?"We applied two meta-filters in the analysis"
— Является ли «мета-фильтр» одним словом или двумя?
А как насчет плохо отформатированного текста, например, отсутствия пробела в конце предложения:
"So we went there.And on arrival..."
Токенизация — сложная задача…
- Выполните итерацию по вашим токенам и подсчитайте их, например, используя HashMap.