如何统计一个句子的单词数,一个段落的句子数,以及段落数?

如何统计一个句子的单词数,一个段落的句子数,以及段落数?

我正在写一篇关于乳胶的文章。

我需要统计一个句子中的单词数、一个段落中的句子数以及段落中的单词数?

例如这是第一句话。这是第二句话。这是第三句话。

我想在 pdf 上显示这个:

(P1)这是第一句(1-5)。这是第二句(2-5)。这是本段最后一句(3-8)。(3-18)

在哪里,

P1=段落#1;

(1-5) = 句子#1,单词 5;

(2-5) = 句子#2,单词 5;

(3-8)= 句子#3,单词 = 8;

和 (3-12) = # 句子 3,总单词数 = 18


@Steven 或任何人。

到目前为止,我们有这种输出:

在此处输入图片描述

但是,在写文章的时候我们通常对句子的字数,段落的句子数,段落的字数都会有一定的限制。

例如,我们有《撰写研究论文的英语》一书中的规则:

1)句子中的单词数<= 35

2)段落句子数<=8

3)段落字数<=90

因此,根据这些规则,我希望在我的 pdf 中出现红色警告。如下所示:

在此处输入图片描述

我将这样解释:

警告红色 47:我在一个句子中使用的单词比允许的要多。

警告红色 9:我在一个段落中使用的句子比允许的要多。

警告红色 96:我在一个段落中使用的单词比允许的要多。

理想情况下,这些价值观应该由作者定义。因为每个作者都有他特定的约束。

最终的颜色代码为:

1)蓝色 = 句子数

2)绿色 = 正常

3)红色 = 警告

当您有很多页面时,这些类型的警告非常有用,因为您可以一眼就看到可能需要删减哪些单词!

谢谢。

答案1

\startcount此方法使用以 结尾的定义宏来\stopcount对多段参数进行计数。已编辑以在段落内(甚至在句子中间)添加\pausecount\continuecount功能。已重新编辑以检测疑问句(?)和感叹句(!)。

重新编辑 [jorge]:上标用于表示句子数和句子中的单词数的括号,也用于表示段落中的句子数和单词数的括号。

色标:

蓝色 = 句子数和段落中的句子数。

绿色 = 一个句子和一个段落中的单词数。

需要上标以避免与不同风格的引用参考文献混淆,例如 AMA STYLE = You et al [5] 或 Vancouver = You (5)。

(再次编辑,用;替换“危险的”非环境\countem...\endcountem语法\startcount...\stopcount,也插入到\unskip\@段落末尾和段落分类帐之间,以便在那里获得正常间距)

注意,为了美观和清晰起见,我使用括号而不是圆括号来显示段落末尾的分类账,以将其与句子末尾的分类账区分开来。

一般来说,它期望参数中是普通单词,而不是宏、显示数学等(尽管如果小心的话,宏不一定会破坏它)。例如,可以解析内联数学,但它将使用输入的空格(当然在数学模式下没有意义)来计算单词。

或者,可以将数学运算(包括显示数学运算)分组放在括号中{},如果括号内的数字被空格包围,则该组数字将被视为一个单词;如果没有被空格包围,则该组数字将被视为一个字符。

第三(现在显示在 MWE 中),在段落或句子中,可以调用\pausecount后跟的 later\continuecount来跳过对文本块的计数,而不会破坏计数分类帐。

我不会重置计数器,myparagraphs因此如果\startcount使用了不同的 调用,段落计数器将从上次中断的地方继续计数。因此,\stopcount可用于跳过有问题的段落的计数,并使用 恢复计数\startcount

\documentclass{article}
\usepackage{color}
\definecolor{Green}{rgb}{0.1,0.5,0.4}
\newcounter{totalwords}
\newcounter{mywords}
\newcounter{mysentences}
\newcounter{myparagraphs}
\setcounter{myparagraphs}{0}
\long\def\startcount#1\stopcount{%
  \par\startcountpars\ignorespaces#1\par\relax}
\long\def\startcountpars#1\par#2\relax{%
  \stepcounter{myparagraphs}%
  \setcounter{mysentences}{0}%
  \setcounter{totalwords}{0}%
  (P\themyparagraphs) %
   \startcountsentences#1. \relax\unskip\@ \ledger[p]{mysentences}{totalwords}\par %SuperScript + color
  \ifx\relax#2\relax\else
  \startcountpars#2\relax\fi
}
\def\startcountsentences#1. #2\relax{%
  \hasitquestions#1? \relax% THAT ?-CHECK IS BEFORE !-CHECK HAS RAMIFICATIONS
  \if T\ItHas\startcountquestions#1\relax%
    \expandafter\startcountsentences\remainder. #2\relax\else
    \hasitexclamations#1! \relax%
    \if T\ItHas\startcountexclamations#1\relax%
      \expandafter\startcountsentences\remainder. #2\relax\else
      \ifx\relax#2\relax\else
        \stepcounter{mysentences}%
        \setcounter{mywords}{0}%
        \startcountwords#1 \relax\unskip.\ledger{mysentences}{mywords}%
        \startcountsentences#2\relax\fi\fi\fi
}
\def\hasitquestions#1? #2\relax{%
  \ifx\relax#2\relax\def\ItHas{F}\else\def\ItHas{T}\fi
}
\def\startcountquestions#1? #2\relax{%
  \hasitexclamations#1! \relax% MUST CHECK FOR ! WITHIN ?-SENTENCES
  \if T\ItHas\startcountexclamations#1? #2\relax\else
    \stepcounter{mysentences}%
    \setcounter{mywords}{0}%
    \startcountwords#1 \relax\unskip?\ledger{mysentences}{mywords}% change color
    \def\remainder{#2}%
  \fi
}
\def\hasitexclamations#1! #2\relax{%
  \ifx\relax#2\relax\def\ItHas{F}\else\def\ItHas{T}\fi
}
\def\startcountexclamations#1! #2\relax{%
  \stepcounter{mysentences}%
  \setcounter{mywords}{0}%
  \startcountwords#1 \relax\unskip!\ledger{mysentences}{mywords}%
  \def\remainder{#2}%
}
\def\startcountwords#1 #2\relax{%
  \ifx\pausecount#1{} \pausecount#2\relax\else
    \stepcounter{mywords}%
    \stepcounter{totalwords}%
    #1 %
    \ifx\relax#2\relax\else
    \startcountwords#2\relax\fi
  \fi
}
\def\pausecount#1\continuecount#2\relax{#1\startcountwords#2\relax}
\newcommand\ledger[3][s]{%
  \def\colA{blue}\def\colB{Green}%
  \if p#1\def\open{[}\def\close{]}%
  \ifnum\value{#2}>8\def\colA{red}\fi\ifnum\value{#3}>90\def\colB{red}\fi\else
  \def\open{(}\def\close{)}%
  \ifnum\value{#2}>8\def\colA{red}\fi\ifnum\value{#3}>35\def\colB{red}\fi\fi
  \allowbreak\textsuperscript{%
  \open\textcolor{\colA}{\arabic{#2}}--\textcolor{\colB}{\arabic{#3}}\close} }
\def\cmd#1{\textbackslash\texttt{#1}}
\begin{document}
\def\eg{\textit{e.g.}}
\startcount
Is this the first, \eg, sentence?
This is ABSOLUTELY the second sentence! 
Is this the third sentence of the paragraph?

Here we test inline math: $x^2$. 
We begin a pause after this.
\pausecount 
\[% NOTE THAT ANY \label HERE WILL NOT BE ACCESSIBLE LATER
 y = mx + b
\]
\continuecount
Here we continue counting.  
Within a paragraph, we use \cmd{pausecount}
  and \cmd{continuecount} to skip over stuff.
Now here \pausecount \textit{we are pausing the count mid-sentence}
  \continuecount for just a few words.
Another sentence that is only moderately long.
Another sentence that is only moderately long.
Another sentence that is very very very very very very very very very
  very very very very very very very very very very very very 
  very very very very very very very very very very long.
Another sentence that is only moderately long.
\stopcount

To pause the count between paragraphs (as is done here), just
  \cmd{stopcount} and, when ready to restart, reinvoke \cmd{startcount}.

\startcount
Here we are testing to see if we picked up where we left off in the
  paragraph count.
  Is it so?
Voila, it is so.
\stopcount
\end{document}

在此处输入图片描述

相关内容