![自动突出显示名词化(又称僵尸名词)作为写作辅助](https://linux22.com/image/356215/%E8%87%AA%E5%8A%A8%E7%AA%81%E5%87%BA%E6%98%BE%E7%A4%BA%E5%90%8D%E8%AF%8D%E5%8C%96%EF%BC%88%E5%8F%88%E7%A7%B0%E5%83%B5%E5%B0%B8%E5%90%8D%E8%AF%8D%EF%BC%89%E4%BD%9C%E4%B8%BA%E5%86%99%E4%BD%9C%E8%BE%85%E5%8A%A9.png)
为了提高写作水平,我想减少名词化(又称僵尸名词)的使用数量。为此,我希望在生成的 PDF 中自动突出显示所有名词化。
本质上,我试图以与作家饮食测试,给出一个示例文本,突出显示 be 动词(am、is、are、was、were、be、being、been)、名词化、介词、形容词和副词以及废词(it、this、that 和 there)。
名词化可以检测为以以下后缀结尾的单词:ion、ism、ty、ment、ness、ance 或 ence(尽管有一些误报,例如单词“city”会被检测为名词化,但这是可以的)。所以我认为应该可以使用正则表达式突出显示名词化。
作为起点,我使用了接受的解决方案针对这个问题突出显示单词列表中的每个出现?。
具体来说,我使用了解决方案中提供的luahighlight.sty
包和lua模块。highlight.lua
以下是使用luahighlight.sty
和highlight.lua
突出显示 be 动词、介词和废词的 MWE:
\documentclass[a4paper]{article}
\usepackage[pdftex]{xcolor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{luahighlight}
% highlight be-verbs
\highlight[orange]{am}
\highlight[orange]{is}
\highlight[orange]{are}
\highlight[orange]{was}
\highlight[orange]{were}
\highlight[orange]{be}
\highlight[orange]{being}
\highlight[orange]{been}
% highlight prepositions
\highlight[green]{about}
\highlight[green]{above}
\highlight[green]{across}
\highlight[green]{after}
\highlight[green]{against}
\highlight[green]{along}
\highlight[green]{among}
\highlight[green]{around}
\highlight[green]{at}
\highlight[green]{before}
\highlight[green]{behind}
\highlight[green]{below}
\highlight[green]{beneath}
\highlight[green]{beside}
\highlight[green]{between}
\highlight[green]{beyond}
\highlight[green]{by}
\highlight[green]{down}
\highlight[green]{during}
\highlight[green]{for}
\highlight[green]{from}
\highlight[green]{in}
\highlight[green]{inside}
\highlight[green]{into}
\highlight[green]{like}
\highlight[green]{near}
\highlight[green]{of}
\highlight[green]{off}
\highlight[green]{on}
\highlight[green]{onto}
\highlight[green]{out}
\highlight[green]{outside}
\highlight[green]{over}
\highlight[green]{past}
\highlight[green]{since}
\highlight[green]{through}
\highlight[green]{throughout}
\highlight[green]{till}
\highlight[green]{to}
\highlight[green]{toward}
\highlight[green]{under}
\highlight[green]{underneath}
\highlight[green]{until}
\highlight[green]{up}
\highlight[green]{upon}
\highlight[green]{with}
\highlight[green]{within}
\highlight[green]{without}
% highlight waste words
\highlight[pink]{it}
\highlight[pink]{this}
\highlight[pink]{that}
\highlight[pink]{there}
\highlight[pink]{these}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
The proliferation of nominalizations in a discursive formation may be an
indication of a tendency toward pomposity and abstraction.
\end{document}
它给出以下输出:
我现在如何突出显示名词化?在示例文本中,应突出显示扩散、名词化、形成、指示、浮夸和抽象等词。
最后输出应该像这样突出显示:
(以上输出是将示例文本通过在线作家饮食测试)。
答案1
listofitems
如果您愿意将区域作为宏的参数,那么包的工作就很简单了。
项目列表在两个级别上进行解析:首先按单词(即空间搜索),然后按名词化后缀。如果找到名词化,则该第二级搜索的列表长度为 2,否则为 1。因此,我搜索每个单词(第一级解析)以查看第二级的列表长度是否超过 1。如果是,我将其放在颜色框中。否则,我将其放在原始位置。
虽然所有名词化都同样属于第二级解析,但我认为如果需要的话,区分不同的名词化会非常容易。
\documentclass{article}
\usepackage{listofitems,xcolor}
\newcommand\nominalize[1]{%
\setsepchar{ /ion||ism||ty||ment||ance||ence}%
\readlist\thenoms{#1}%
\foreachitem\x\in\thenoms{\bgroup\fboxsep=0pt\relax%
\ifnum\xcnt=1\relax\else\ \fi%
\ifnum\listlen\thenoms[\xcnt]>1\colorbox{blue!95!red!20}{\strut\x}\else\x\fi%
\egroup}%
}
\begin{document}
\nominalize{The proliferation of nominalizations in a discursive formation may be an
indication of a tendency toward pomposity and abstraction.}
\end{document}