针对文字处理的 Grammarly 开源替代方案

使用这些开源工具检查您的写作中的拼写、语法、抄袭和风格错误。
168 位读者喜欢这篇文章。
A graduate degree could springboard you into an open source job

Opensource.com

Grammarly 在许多教师、学生、商务人士以及其他需要定期书写或处理大量文字的人中很受欢迎。它是一个有用的工具,但您需要注册并登录才能使用 它,而且我很少在缓存中保留网站登录数据。

我经常处理文字,用于撰写技术和创意作品,而离开我的文本编辑器去打开网页浏览器,更不用说访问需要我登录的网站,对我来说通常太麻烦了。幸运的是,借助一些开源实用程序,我可以避免这种干扰。

Grammarly 的主要优点是检查 以下内容:

  • 拼写错误
  • 英语语法错误
  • 抄袭
  • 风格

以下是我针对这些功能使用的开源替代方案。

拼写

拼写检查在大多数文字处理器甚至文本编辑器中都很常见。我在 Emacs 中使用 Flyspell。Flyspell-mode 是一种次要模式,提供即时拼写检查。如果我拼错了一个单词,它会用红线标出下划线,提示我检查它。它还有一个自动更正单词的选项,如果我不是经常处理技术、幻想和科幻小说,我可能会使用它。

Flyspell in Emacs

您可以使用 Emacs 的 packages 界面安装 Flyspell。要使其在启动时处于活动模式,请将此添加到您的 .emacs 文件中

(require 'flyspell)
(flyspell-mode +1)

语法

对于语法问题,我使用 LanguageTool API。它是一个由欧盟资助的开源网站和库,由世界各地的程序员 开发

LanguageTool

您可以将 LanguageTool 用作 LibreOffice 或 Firefox、Chromium、Brave、Chrome 和其他浏览器的插件;作为终端命令;或作为图形应用程序。它甚至还为 Google Docs 和 Microsoft Word 等专有编辑器提供了插件。如果您下载以供本地使用,则必须安装 Java

LanguageTool UI

还有一个 Emacs 插件,它本质上是 Emacs 和 LanguageTool Java 库之间的 Elisp 连接器。通过在 Emacs 中安装 langtool 包,LanguageTool 会检查我的语法,而无需我自觉地启动它。

抄袭检查

研究、报告和再利用之间的界限通常有点模糊,并且随着互联网上如此多的内容可用,它每天都变得越来越不清晰。通常,我尽量将自己限制在 Creative Commons开源 资源中,但即便如此,出于法律义务或作为Common Courtesy(取决于许可证),注明这些资源的来源仍然很重要。保持影响受控的一种方法是将您的最终作品与互联网上已有的内容进行验证。

我使用 Python 脚本进行抄袭检查。它绝不是一个脚本。我把它拼凑在一起,作为一种快速简便的方法,以防止明显的复制粘贴错误或误判。因此,虽然它不是一个优雅的脚本(选项解析过于复杂且效率低下,并且没有可调整的容差级别来排除极短的搜索),并且肯定会有很多误报,但它是一个快速 Python 脚本如何替换不适合您的工作流程的服务的示例。

在使用它之前,您必须安装 Python google 模块以启用简单的 Google 搜索

$ python3 -m pip install google --user

我专门使用 Google 而不是像 YaCy 这样的开源搜索引擎,因为我想要一个庞大的数据池来从中提取数据。

这是脚本

#!/usr/bin/env python3
# stollen plagiarism checker
# by Seth Kenlon <skenlon@redhat.com>
# GPLv3

# This program is free software: you can redistribute it 
# and/or modify it under the terms of the GNU General 
# Public License as published by the Free Software 
# Foundation, either version 3 of the License, or (at 
# your option) any later version.

# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the 
# implied warranty of MERCHANTABILITY or FITNESS FOR A 
# PARTICULAR PURPOSE.  See the GNU General Public License 
# for more details.

# You should have received a copy of the GNU General 
# Public License along with this program. 
# If not, see <https://gnu.ac.cn/licenses/>.

import sys
import random
from pathlib import Path
from googlesearch import search 

def Scrub(ARG):
    """
    Read lines of file.
    """

    f = open(ARG, 'r') 
    LINES = f.readlines() 
    Search(LINES)

def Search(LINES):
    """
    Search Internet for exact match of LINE.
    """

    COUNT=0
    
    for LINE in LINES:
        COUNT += 1        
        PAUSE = random.randrange(1,4)

        if VERBOSE:
            print("Searching...")
            
        for ITEM in search(LINE, tld="com", num=1, stop=1, pause=PAUSE):
            if VERBOSE:
                print("WARNING:" + LINE + " → " + ITEM)
            else:
                print("WARNING: line " + str(COUNT) + " → " + ITEM)

if __name__ == "__main__":
    random.seed()
    n=1
    
    if sys.argv[1] == "--verbose" or sys.argv[1] == "-v":
        VERBOSE = True
        # shift 1
        n += 1
    else:
        VERBOSE = False
        
    f = Path(sys.argv[n])

    if not f.is_file():
        print("Provide a text file to check.")
        exit()
    else:
        Scrub(sys.argv[n])

这是一个简单的测试文件,其中包含来自公有领域作品《爱丽丝梦游仙境》的几行文字和来自受版权保护的歌曲的一行文字,这两个都被脚本捕获了,以及一行正确的未被脚本标记的无意义文本

Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, “and what is the use of a book,” thought Alice “without pictures or conversations?”

So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.

acrutchen macpie.

Just when you think you've got more than enough, that's when it all up and flies away

您可以通过将 Python 脚本保存到名为 stollen.py 的文件中(以美味的圣诞蛋糕命名,而不是任何人会使用盗用内容的想法),并将测试文件的内容保存到 test.txt 中来测试它。预期结果是除第 5 行之外的所有行都命中。

$ chmod +x ./stollen.py 
$ ./stollen.py test.txt
WARNING: line 1 → https://www.ego4u.com/en/read-on/literature/alice-wonderland?part1
WARNING: line 3 → https://www.goodreads.com/quotes/733845-so-she-was-considering-in-her-own-mind-as-well
WARNING: line 7 → https://genius.com/Prince-and-the-new-power-generation-money-dont-matter-2-night-lyrics

为了防止被 Google 阻止,我使用随机秒数在调用之间暂停,因此该脚本在设计上不是很快速。再说一次,如果您曾经使用过 Grammarly,您就会知道它的抄袭检查器也不是很快。

风格审查

在自动化编辑器提供的所有功能中,风格审查对我来说是最不重要的。即使 Grammarly 对从正式到休闲的写作风格有可调整的容差设置,我也几乎从不同意它的建议,而且它很少捕捉到我不喜欢的东西。

我认为,定义合适的风格对于作者和读者来说都是主观的,并且在自动化编辑的背景下,我认为它实际上是规则应用严格程度的简写。因此,真正重要的是违反规则的行为,是否应该应用或忽略该规则取决于作者或审阅者决定。

所有语言中最严格的都是为计算机设计的构造语言,例如 C、Java、Python 等。由于这些语言是严格定义的,因此可以根据定义它们的规则严格且毫无例外地检查它们。这个过程在计算机科学中称为 linting,而 proselint 项目的目的是将这个过程引入自然语言。

您可以将 proselint 安装为 Python 模块

$ python3 -m pip install proselint --user

安装完成后,针对文本文件运行它

$ prolint myfile.txt

它提供语法建议并执行一些风格检查以捕捉陈词滥调和俚语。它提供了一个有用的、客观的散文视角,您可以自由地忽略或遵循它的建议。 如果您不确定您的写作的清晰度或活力,请尝试一下。

开源意味着选择

有很多网站不发布他们的源代码,我们每天都在使用它们。找到一个好的开源替代方案并不总是关于许可或源代码的可用性。有时,它是关于找到一个比您以前使用的工具更适合您的工具。

通过开源,您可以调查您的选择并进行测试,直到找到最符合您个人偏好的选择。如果您想要风格检查,您有多种 linters 和风格检查器可供选择。如果您想要拼写和语法检查器,您可以使用许多应用程序来集成不同的字典和界面。非开源应用程序往往不允许这种灵活性。如果您将自己限制在非开源软件上,即使只是为了少数任务,也可能很难看到可能性的多样性。

今天挑战自己,无论是拼写检查还是自动化风格评论,还是完全不同的东西:找到一个开源替代方案,看看您是否可以将例行公事变成引人入胜、有趣且有效的事情。

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算行业工作,通常同时从事这两个行业。

4 条评论

不错的文章,也是一个与我的内心和专业知识息息相关的主题,但您忘记了所有选项中最好的一个…… Vale,它将上面许多工具组合成一个,并做了更多…… 我们甚至正在为其创建预构建规则,以模拟 Grammarly 的许多检查。

非常好的文章。我现在正在研究一些选项。由于我写了很多文章,我特别喜欢 LanguageTool。我现在正在 Firefox 中试用它,而不是 Chrome 中的 Grammarly。非常感谢这篇文章。
Andrew

我很高兴它对您有所帮助,Andrew。这是我自己的有机工作流程。我也很想听听其他人组装的开源解决方案。

回复 ,作者 iandrewmartin

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.