Wortzählung für Abschriften

1556
naught101

Gibt es eine Möglichkeit, eine Wortanzahl von Wörtern in natürlicher Sprache in Markdown (oder besser Pandoc Markdown) über die Befehlszeile abzurufen? Es kann nur verwendet werden wc, um eine sehr grobe Schätzung zu erhalten, ist aber wcnaiv und zählt alles, was von Leerzeichen umgeben ist, als Wort. Dies umfasst Dinge wie Header-Formatierung, Aufzählungszeichen und URLs in Links.

Ideal wäre es, alle Markdown-Formatierungen (einschließlich Pandoc-Zitate, falls möglich) zu entfernen und dann weiterzugeben wc, aber ich kann keinen Weg finden, dies zu tun, da das pandocKlartext-Ausgabeformat immer noch viel Markdown enthält Styling.

3
Sie könnten versuchen, das Markdown-Dokument als reinen Text "zu rendern" und "wc" für die resultierende Datei auszuführen - etwa so: https://stackoverflow.com/questions/761824/python-how-to-convert-markdown-format -text zu text vor 10 Jahren 0
@CongMa: das funktioniert nicht richtig (siehe meinen letzten Satz). Aber es ist wahrscheinlich das Beste, was ich im Moment erreichen werde. Und ich denke, es ist wirklich nicht so weit raus. naught101 vor 10 Jahren 0

2 Antworten auf die Frage

1
das-g

Eine etwas manuelle Lösung:

  1. Verwenden Sie pandocdiese Option, um die Markdown-Datei in ein MS Word-Dokument ( *.docx) oder OpenOffice / LibreOffice Writer-Dokument ( *.odt) zu konvertieren.
  2. Öffnen Sie dieses Dokument in LibreOffice 1
  3. Alles auswählen ( ctrl+ a)
  4. Menü Tools>Word Count

1 OpenOffice würde wahrscheinlich genauso funktionieren, aber ich habe das nicht getestet.

1
DG'

Dafür gibt es einen neuen Lua-Filter: https://pandoc.org/lua-filters.html#counting-words-in-a-document

Speichern Sie den folgenden Code als 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 

und pandoc so nennen:

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