Project Icon

alex

智能检测并改进文本中的不当用语

alex是一款开源的智能写作辅助工具,专注于检测和改进文本中的不当用语。它能识别潜在的性别歧视、种族相关或其他不平等的措辞,提供替代建议以增强文字的包容性。支持多种格式如纯文本、HTML、MDX和Markdown,alex适用于个人写作和文章审阅,有效提升文字质量和社会意识。

alex

> 📝 **alex** — 捕捉不敏感、不体贴的写作。 [![构建][build-badge]][build] [![覆盖率][coverage-badge]][coverage] [![首次贡献者友好][first-timers-badge]][first-timers] 无论是你自己的还是他人的写作,**alex** 都能帮助你发现偏向性别、极端化、涉及种族或其他**不平等**的措辞。 例如,当出现"We've confirmed his identity"时,**alex** 会提醒你,并建议使用"their"来代替"his"。 在[在线演示 »][demo]上体验 **alex**。 ## 为什么选择
  • 有助于提高体贴性写作能力
  • 捕捉许多可能的冒犯表述
  • 提供有用的替代建议
  • 可读取纯文本、HTML、MDX或markdown作为输入
  • 风格优雅

安装

使用 npm(配合 Node.js):

$ npm install alex --global

使用 yarn

$ yarn global add alex

或者你可以按照这个步骤教程进行操作: 在你的项目中设置 alex

目录

检查项目

alex 检查以下内容:

  • 带性别倾向的职业头衔(如果你写"垃圾男",alex 会建议用"垃圾收集员";如果你写"房东",alex 会建议用"业主")
  • 带性别倾向的谚语(如果你写"像个男人一样",alex 会建议用"勇敢地";如果你写"淑女般的",alex 会建议用"有礼貌的")
  • 歧视残疾人的语言(如果你写"学习障碍",alex 会建议用"有学习障碍的人")
  • 居高临下的语言(如果你写"显然"或"众所周知",alex 会对此发出警告)
  • 不宽容的措辞(如果你写"主人"和"奴隶",alex 会建议用"主要"和"副本")
  • 亵渎语(如果你写"屁股"🍑,alex 会对此发出警告) ……还有更多!

注意:alex 假定你的意图是善意的:你并不是有意冒犯他人!

查看 retext-equalityretext-profanities 了解所有规则。

alex 会忽略字面意义上的词语,所以 "他"他 — ……,以及类似用法不会被警告。

集成

忽略文件

CLI 在给定目录时会搜索带有 markdown 或文本扩展名的文件(因此 $ alex . 会找到 readme.mdpath/to/file.txt)。要防止文件被发现,请创建一个 .alexignore 文件。

.alexignore

CLI 有时会搜索文件。要防止文件被发现,请在当前工作目录(即运行 alex 的位置)上方的某个目录中添加一个名为 .alexignore 的文件。这些文件的格式类似于 .eslintignore(而后者又类似于 .gitignore 文件)。

例如,当在 ~/path/to/place 中工作时,忽略文件可以位于 toplace~ 中。

本项目自身的忽略文件看起来像这样:

# `node_modules` 默认被忽略。
example.md

控制

有时alex会出错:

这句话会弹出一条消息。

结果如下:

readme.md
1:15-1:18  警告  `pop` 可能有歧义,请改用 `parent`  dad-mom  retext-equality

⚠ 1 个警告

可以使用 Markdown 中的 HTML 注释来忽略它们:

<!--alex ignore dad-mom-->

这句话将**不会**弹出消息。

结果如下:

readme.md: 未发现问题

ignore 会关闭注释后面内容的消息(在这个例子中是该段落)。 也可以使用 disable 在注释后关闭消息,然后使用 enable 重新开启这些消息:

<!--alex disable dad-mom-->

这句话将**不会**弹出消息。

这句话也**不会**弹出消息。

再来一句话,同样**不会**弹出消息。

<!--alex enable dad-mom-->

这句话会弹出消息。

结果如下:

readme.md
9:15-9:18  警告  `pop` 可能有歧义,请改用 `parent`  dad-mom  retext-equality

⚠ 1 个警告

可以一次控制多个消息:

<!--alex disable he-her his-hers dad-mom-->

…通过省略所有规则标识符,可以控制所有消息:

<!--alex ignore-->

配置

您可以通过 .alexrc 配置文件控制 alex

{
"allow": ["boogeyman-boogeywoman"]
}

…如果文件名为 .alexrc.yml.alexrc.yaml,您可以使用 YAML:

allow:
- dad-mom

…如果文件名为 .alexrc.js,您还可以使用 JavaScript:

// 但像这样随机设置是个坏主意!
exports.profanitySureness = Math.floor(Math.random() * 3)

…最后,还可以在 package.json 中使用 alex 字段:

{
…
"alex": {
"noBinary": true
},
…
}

allow 字段应为规则数组或 undefined(默认为 undefined)。提供时,将跳过并不报告指定的规则。 deny 字段应为规则数组或 undefined(默认为 undefined)。提供时,报告指定的规则。 不能同时使用 allowdenynoBinary 字段应为布尔值(默认为 false)。 开启(true)时,像 he and shegarbageman or garbagewoman 这样的配对将被视为错误。 关闭(false,默认)时,这样的配对是可以的。 profanitySureness 字段是一个数字(默认为 0)。 我们使用 cuss,它有一个词典,对单词或短语作为亵渎语的可能性(而非其"糟糕"程度)进行 0 到 2 的评级:

评级作为亵渎语使用在干净文本中使用示例
2可能不太可能asshat
1可能可能addict
0不太可能可能beaver
profanitySureness 字段是您想要检查的最低评级(包含该评级)。
如果您将其设置为 1(可能),那么它会对级别 1 2(可能)的亵渎语发出警告,但不会对级别 0(不太可能)的发出警告。

CLI

![][截图]

假设example.md内容如下:

妖怪将所有更改写入**主服务器**。因此,从服务器是主服务器的只读副本。不过别担心,他是个残疾人。

现在,在example.md上运行alex

$ alex example.md

输出结果:

example.md
1:5-1:14  警告  `boogeyman`可能有冒犯性,请使用`boogeymonster`代替                boogeyman-boogeywoman  retext-equality
1:42-1:48  警告  `master` / `slaves`可能有冒犯性,请使用`primary` / `replica`代替  master-slave           retext-equality
1:69-1:75  警告  不要使用`slaves`,这是亵渎性词语                                   slaves                 retext-profanities
2:52-2:54  警告  `he`可能有冒犯性,请使用`they`、`it`代替                          he-she                 retext-equality
2:61-2:68  警告  `cripple`可能有冒犯性,请使用`person with a limp`代替             gimp                   retext-equality

⚠ 5 个警告

使用$ alex --help获取更多信息。

当没有给alex输入文件时,它会在当前目录、docdocs中搜索文件。 如果给定--mdx参数,它会搜索mdx扩展名的文件。 如果给定--html参数,它会搜索htmhtml扩展名的文件。 否则,它会搜索txttextmdmkdmkdnmkdownronmarkdown扩展名的文件。

API

本包是仅支持 ESM的: 需要 Node 14+ 版本才能使用,且必须通过 import 而不是 require 来引入。

npm:

$ npm install alex --save

本包导出了标识符 markdownmdxhtmltext。 默认导出为 markdown

markdown(value, config)

检查 Markdown(忽略语法)。

参数
  • value (VFilestring) — Markdown 文档
  • config (Object,可选) — 参见[配置][]部分
返回值

VFile

你可能对其 messages 属性感兴趣,如下例所示,因为它包含了可能的违规信息。

示例
import alex from 'alex'

alex('We've confirmed his identity.').messages

输出:

[
  {
    message: '`his` 在指代人时可能不够敏感,请使用 `their`、`theirs`、`them` 替代',
    name: '1:17-1:20',
    reason: '`his` 在指代人时可能不够敏感,请使用 `their`、`theirs`、`them` 替代',
    line: 1,
    column: 17,
    location: { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'her-him',
    fatal: false,
    actual: 'his',
    expected: [ 'their', 'theirs', 'them' ]
  }
]

mdx(value, config)

检查 MDX(忽略语法)。

注意:alex 使用的是目前处于 beta 阶段的 MDX@2 语法。

参数
  • value (VFilestring) — MDX 文档
  • config (Object,可选) — 参见[配置][]部分
返回值

VFile

示例
import {mdx} from 'alex'

mdx('<Component>He walked to class.</Component>').messages

输出:

[
  {
    reason: '`He` 可能不够敏感,请使用 `They`、`It` 替代',
    line: 1,
    column: 12,
    location: { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'he-she',
    fatal: false,
    actual: 'He',
    expected: [ 'They', 'It' ]
  }
]

html(value, config)

检查 HTML(忽略语法)。

参数
  • value (VFilestring) — HTML 文档
  • config (Object,可选) — 参见[配置][]部分
返回值

VFile

示例
import {html} from 'alex'

html('<p class="black">He walked to class.</p>').messages

输出:

[
  {
    message: '`He` 可能不够敏感,请使用 `They`、`It` 替代',
    name: '1:18-1:20',
    reason: '`He` 可能不够敏感,请使用 `They`、`It` 替代',
    line: 1,
    column: 18,
    location: { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'he-she',
    fatal: false,
    actual: 'He',
    expected: [ 'They', 'It' ]
  }
]

text(value, config)

检查纯文本(包括语法检查)。

参数
  • value (VFilestring) — 文本文档
  • config (Object,可选) — 参见[配置][]部分
返回值

VFile

示例
import {markdown, text} from 'alex'

markdown('The `boogeyman`.').messages // => []

text('The `boogeyman`.').messages

输出:

[
  {
    message: '`boogeyman` 可能不够敏感,请使用 `boogeymonster` 替代',
    name: '1:6-1:15',
    reason: '`boogeyman` 可能不够敏感,请使用 `boogeymonster` 替代',
    line: 1,
    column: 6,
    location: Position { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'boogeyman-boogeywoman',
    fatal: false,
    actual: 'boogeyman',
    expected: [ 'boogeymonster' ]
  }
]

工作流程

建议的工作流程是将 alex 添加到 package.json 中,并在 Travis 中与您的测试一起运行。

您可以通过 alexrc 文件和控制注释来选择忽略警告。

一个使用 npm scriptspackage.json 文件,并额外使用 AVA 进行单元测试,可能如下所示:

{
  "scripts": {
    "test-api": "ava",
    "test-doc": "alex",
    "test": "npm run test-api && npm run test-doc"
  },
  "devDependencies": {
    "alex": "^1.0.0",
    "ava": "^0.1.0"
  }
}

如果您使用 Travis 进行持续集成,在 .travis.yml 中设置类似以下内容:

script:
  - npm test
+ - alex --diff

请确保仍然安装 alex!

如果使用 --diff 标志,并且检测到 Travis,则会忽略此次推送中未更改的行。

使用这个工作流程,即使 PR 有警告,您也可以合并它。然后,如果有人编辑了一个完全不同的文件,他们不会被已存在的警告所困扰,只会关注他们添加的内容!

常见问题

这太蠢了!

这不是一个问题。 是的,alex 并不是很聪明。 人类在这方面做得更好。 但人也会犯错,而 alex 就是来帮忙的。

alex 没有检查"X"!

请查看 contributing.md 了解如何让 alex 检查"X"。

为什么叫 alex?

这是一个不分性别的好名字,在 npm 上还未被使用,我很喜欢! :smile:

延伸阅读

没有任何自动化工具可以取代学习包容性沟通和倾听他人的亲身经历。 alex 工具的错误可以成为学习更多知识的契机。 以下资源可作为起点,帮助你在 alex 工具之外深化自身理解和编辑技能:

  • 18F 内容指南提供了一系列有用的链接,指向新闻和学术写作中使用的其他包容性语言指南。
  • Conscious Style Guide涵盖了许多语言使用的微妙话题。例如,种族和民族这两个术语有不同的含义,选择正确的词语取决于你。 同样,过度概括某个群体的句子(如"开发者喜欢整天编码")可能不会被 alex 发现,但它并不具有包容性。优秀的人工编辑可以迎接挑战,找到更好的表达方式。
  • 有时,了解什么是包容性的唯一方法就是询问。 在残疾是一个细微的问题一文中,Nicolas Steenhout 写道,以人为本的语言,如"有残疾的人",并不总是正确的选择。
  • 语言在不断演变。一年前中性的术语到今天可能就成了问题。像Self-Defined Dictionary这样的项目旨在收集我们用来定义自己和他人的词语,并将它们与历史和一些有用的建议联系起来。
  • 无意识偏见存在于日常决策和对话中,也可能出现在写作中。 Textio提供了一些例子,说明描述性形容词的选择和语气如何会疏远某些人,以及地区性语言差异如何可能导致混淆。
  • 使用复杂的句子和罕见的词汇可能导致内容不够包容。这在Harver的这篇文章中被描述为读写能力排斥。 如果你的内容面向全球受众,这一点尤为重要,因为读者最擅长的语言可能不是你写作所用的语言。

贡献

请参阅 get-alex/.github 仓库中的 contributing.md 文件,了解如何开始贡献。 如需获取帮助,请查看 support.md 文件。 本项目遵循行为准则。 通过与此仓库、组织或社区进行互动,即表示您同意遵守其条款。

起源故事

感谢 @iheanyi 提出这个问题,以及 @sindresorhus 激发我(@wooorm)采取行动。

当 alex 推出时,它在 TwitterProduct Hunt 上获得了一些关注。随后,出现了大量媒体报道新闻报导

致谢

alex 的初步工作始于2015年

该项目由 @wooorm 创作。

自那以后,许多为此做出了贡献!

许可证

MIT © Titus Wormer

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号