有没有办法通过命令行获取 Markdown(或者更好的是 Pandoc Markdown)中自然语言单词的字数?可以只使用wc
来获得非常粗略的估计,但这种方法wc
很幼稚,会将任何被空格包围的内容都算作一个单词。这包括标题格式、项目符号和链接中的 URL 等内容。
理想的做法是删除所有 markdown 格式(如果可能的话,包括 Pandoc 引用),然后将其传递出去wc
,但我找不到这样做的方法,因为pandoc
纯文本输出格式仍然包含很多 markdown 样式。
答案1
有一个新的 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:
pandoc --lua-filter wordcount.lua myfile.md
答案2
一个有点手动的解决方案:
- 用于
pandoc
将 markdown 文件转换为 MS Word 文档 (*.docx
) 或 OpenOffice/LibreOffice Writer 文档 (*.odt
) - 在 LibreOffice 1中打开该文档
- 选择所有内容(ctrl+ a)
- 菜单Tools>Word Count
1 OpenOffice 可能可以以相同的方式工作,但我还没有测试过。
答案3
我也面临同样的挑战,我写了一篇Python 脚本它会删除特殊字符和 Markdown/HTML 元素,并计算剩余的单词!