Количество слов для уценки?

Есть ли способ получить количество слов слов естественного языка в Markdown (или, лучше, Pandoc Markdown), через командную строку? Можно просто использовать wc чтобы получить очень грубую оценку, но wc наивно и считает словом все, что окружено пробелами. Это включает в себя такие вещи, как форматирование заголовка, маркеры и URL-адреса в ссылках.

То, что было бы идеально, было бы удалить все форматирование уценки (включая цитаты Пандока, если это возможно), а затем передать это через wc, но я не могу найти способ сделать это, так как pandoc Формат вывода открытого текста по-прежнему включает множество стилей уценки.

3 ответа

Для этого есть новый фильтр lua: https://pandoc.org/lua-filters.html

Сохраните следующий код как wordcount.lua

-- counts words in a document

words = 0

wordcount = {
  Str = function(el)
    -- we don't count a word if it's entirely punctuation:
    if el.text:match("%P") then
        words = words + 1
    end
  end,

  Code = function(el)
    _,n = el.text:gsub("%S+","")
    words = words + n
  end,

  CodeBlock = function(el)
    _,n = el.text:gsub("%S+","")
    words = words + n
  end
}

function Pandoc(el)
    -- skip metadata, just count body:
    pandoc.walk_block(pandoc.Div(el.blocks), wordcount)
    print(words .. " words in body")
    os.exit(0)
end

и позвоните Пандоку так:

pandoc --lua-filter wordcount.lua myfile.md

Несколько ручное решение:

  1. использование pandoc преобразовать файл уценки в документ MS Word (*.docx) или документ OpenOffice/LibreOffice Writer (*.odt)
  2. открыть этот документ в LibreOffice1
  3. выбрать все (Ctrl+A)
  4. Инструменты меню>Количество слов

1 OpenOffice, вероятно, будет работать так же, но я этого не проверял.

Я столкнулся с той же проблемой, и я написал для нее скрипт на Python. Он удаляет специальные символы и элементы Markdown/HTML и считает оставшиеся слова!

Другие вопросы по тегам