5

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

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

2 ответа2

2

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

Сохраните следующий код как 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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .