查看原文
其他

6 个月写了近万个 “the”!一位 CTO 表示:搞个项目,再也不写 “the” 了

译者 | 郑丽媛
出品 | CSDN(ID:CSDNnews)

几年前,我注意到我发的很多 Slack 消息都是重复的,包括一些我常使用的短语以及发布任务或提问的第一句。所以我有时候就在想:既然我接下来要写的这句话很显而易见,那我为什么还要写呢?

于是我的第一步,就是要弄清楚我发的消息到底有多可预测、熵有多低。作为 CTO 的特权,我导出了过去 6 个月公司公共频道 Slack 历史消息的数据转储,并编写了一个脚本,将我自己的消息解析为文本语料库。

然后,我就有了 1.5 万行的文字可供分析!(注:Slack 数据导出只包含公共频道,所以我只提取了自己的消息内容,没有看到任何私人信息。)


查找重复出现的短语


消息导出来过后,下一步就是找到经常重复的短语。我将语料库分成不同长度的 N-gram,然后计算每个 N-gram 在其中出现的次数。可能大多数人都会选择一个特定的“N”来表示他们的 N-gram,但我只想找到重复短语,所以我用的是 N=1-5,并将其组合起来。

结果真让我找到了最常用的短语!不出所料,排在榜首的大多是 1-grams 短语,其中“the”占据榜首,共出现了 9933 次,最常见的 2-gram 短语是“in the”,出现了 755 次。

但我们的目标是缩短文字!想要缩短输入“i”的时间,我能做的可能并不多。我需要根据每个 N-gram 的长度对其进行加权,这样我就知道总共可以节省多少个字符。

有趣的是,即使缩写只能节省一个字符,“the”仍然高居榜首!其中还有一些较长的短语,如“the robot”和“something”,虽然它们出现的频率较低,但由于缩写后可以节省很多字符,因此权重很高!


选择缩写词


好了,现在我知道要缩写哪些短语了,那么究竟应该用什么来替换它们呢?我的缩写需要:

1、不会与我写的其他内容冲突。
2、不会相互重叠。
3、便于记忆。
4、尽可能简短。

对于第 1 点,我觉得我可以直接查字典,把所有英语单词都列入黑名单。这对预防很有效,但事实证明,我输入的很多东西都不是正式的英语单词,比如 “yc”(又名 Y-Combinator)。另一方面,“bat”也是一个英文单词,但在我近 6 个月的数据集中,我输入这个词的次数为零,但它是“be able to”(能够)的缩写,这也是我经常输入的短语之一。

正确的方法应该是,使用语料库中的频率来分类给定的缩写是否“可用”。一开始,我用了一个简单的硬编码术语黑名单来避免使用缩写,效果很好,所以我一直没有重新考虑过这个问题。

那么,我怎样才能让我的缩写容易记住呢?如果我在写作时不记得使用缩写,那么整个项目就没有任何价值。于是我写了一个启发式函数,建议使用如“单词的第一个字母”或“第一个字母+最后一个字母”或“前两个字母”等缩写。对于多词短语,首字母缩写是最好的。

脚本会从最佳短语列表中选择最佳缩写。举个例子,由于单词“robot”在列表中的位置比“remember”高,所以将其设置为快捷键并选择。

这样一来,最常用的短语就能优先得到最好的缩写!如果能对我想要的缩写进行全局优化,效果可能会更好,但就目前而言,现在这样就已经挺好的了。


缩写词“重叠”


不过说起缩写词,你可能会发现很多短语都有重叠之处!最典型的例子就是 “robot”、“robots”、“the robot” 和 “the robots”,理想情况下这些短语的缩写应该密切相关,这样才能帮助我记住它们。

通过将多词短语的首选项设置为首字母缩写,我的建议算法免费提供了大量这种“可组合性”。因为单词短语的首选是第一个字母,所以这些短语就会合成一个缩写词!

不过,这并不是完美无缺的,所以我们也会尝试按照首字母缩写规则进行映射,而且有一些相关的缩写实际上都是单词,例如 the robotstr [some、something、someone、somewhat]。

我本可以选择深入研究如何设计算法,通过匹配子串和明确区分单复数词来完美地构建这些语系,但我只是增加了手动输入一些预设缩写的功能,然后由算法来完成剩下的工作。


那么…你真的会用这个吗?


是的!它超级有用,尤其是在 Slack 中,毕竟它所有的“训练数据”都来自于 Slack。

不仅如此,它对电子邮件也很有用,不过我还是手动添加了很多快捷方式,因为我的电子邮件与我在 Slack 中使用的语言风格有很大不同。我在 Gmail 中的快捷键比我的 Slack 快捷键更符合我对长句的最初预期。我不确定这是否只是因为我手动创建了这些快捷方式,但我在电子邮件中确实比在 Slack 中写得更啰嗦、更有“礼貌”。

它在你的电脑上究竟是如何工作的?


我使用一个名为 Autokey 的程序,将这些缩写在电脑上实现自动更正!当我输入:

t<space

Autokey 会检测到它并注入:

<backspace><backspace>the<space

通过键盘,就可以立即用实际短语来替换我的缩写,甚至它还能匹配大小写等。此外,它不仅可以触发任何非单词字符,如果我想用缩写来结束一个句子,我也不必敲空格键了。我有一个脚本,可以读取我的快捷方式列表,并生成 Autokey.rs -> robotsRs -> Robots 的配置文件。

目前 Autokey 在 Ubuntu 18 上运行良好,但在其他操作系统上,你可能需要使用不同的工具来设置快捷键,如 TextExpander 或 AutoHotkey。

当然,如果你有兴趣自己尝试,我的所有代码都已在 GitHub 上开源:https://github.com/eschluntz/compress。

原文链接:https://erikschluntz.com/software/2023/08/26/compressing-my-typing.html

推荐阅读:

技术人有福了!任正非:“华为储备人才,不储备美元,只要优秀都可以进来”

游戏开发调用 ChatGPT API,独立开发者哭诉:应用被下架,多年的存款和心血没了

80 后女程序员拒当「码农」:“转行小说家后,我用 AI 写了 16 本书!”

继续滑动看下一个

6 个月写了近万个 “the”!一位 CTO 表示:搞个项目,再也不写 “the” 了

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存