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

1498
naught101

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

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

3
Вы можете попробовать «отобразить» документ Markdown в виде обычного текста и запустить `wc` в полученном файле - что-то вроде этого: https://stackoverflow.com/questions/761824/python-how-to-convert-markdown-formatted -text в текст 10 лет назад 0
@CongMa: это не работает должным образом (см. Мое последнее предложение). Но это, вероятно, самое близкое, что я собираюсь получить в данный момент. И я думаю, это не так уж далеко, правда. naught101 10 лет назад 0

2 ответа на вопрос

1
das-g

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

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

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

1
DG'

Для этого есть новый фильтр 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 

Похожие вопросы