Как мне подсчитать количество слов (текста) в исходном коде HTML

#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.