#uwu #simd #owo #cli

bin+lib uwuify

西方最快的文本 uwu 化工具

4 个版本

0.2.2 2021 年 4 月 1 日
0.2.1 2021 年 3 月 25 日
0.2.0 2021 年 3 月 25 日
0.1.0 2021 年 3 月 23 日

926文本处理 中排名

Download history 661/week @ 2024-03-14 636/week @ 2024-03-21 871/week @ 2024-03-28 674/week @ 2024-04-04 759/week @ 2024-04-11 790/week @ 2024-04-18 862/week @ 2024-04-25 817/week @ 2024-05-02 937/week @ 2024-05-09 862/week @ 2024-05-16 646/week @ 2024-05-23 830/week @ 2024-05-30 878/week @ 2024-06-06 958/week @ 2024-06-13 619/week @ 2024-06-20 792/week @ 2024-06-27

每月 3,423 次下载
5 crates 中使用

MIT 许可证

38KB
624

uwuify

西方最快的文本 uwu 化工具

转换

Hey, I think I really love you. Do you want a headpat?

hey, (ꈍᴗꈍ) i think i weawwy wuv you. ^•ﻌ•^ do y-you want a headpat?

这是一个 uwu 化的 版本的说明

常见问题解答

什么?

你希望在短时间内将大量文本 uwu 化

在哪里?

如果你的计算机有支持 sse4.1 的最新 x86 CPU(英特尔,AMD),那么在你的计算机上

为什么?

为什么不呢?

如何?

tldr:128 位 SIMD 向量化加上一些大脑算法

点击了解更多信息

经过数小时的研究,我终于理解了 uwu 化文本的本质

有几个转换

  1. 替换一些单词(例如 small -> smol 等)
  2. nya-ify(例如 naruhodo -> nyaruhodo
  3. w 替换 lr
  4. 有时重复(例如 hi -> h-hi
  5. 有时在标点符号后添加文本表情符号(例如 ,.!

这些转换过程利用 sse4.1 向量内建函数一次处理 16 个字节。对于字符串搜索,我使用自定义的 SIMD 实现 bitap 算法进行多字符串匹配。对于随机数生成,我使用 XorShift32。对于 SIMD 寄存器内的大多数字符级检测,都是通过掩码和位移来模拟并行中的基本状态机

支持多线程,因此你可以利用所有 CPU 核心来实现将大量文本 uwu 化的崇高目标

通过简单地忽略输入中的非 ASCII 字符,优雅地处理 UTF-8

很遗憾,由于SIMD并行处理和多线程的原因,一些单词可能无法完全被uwu化,如果它们幸运地跨过了SIMD向量或线程缓冲区的边界。下次它们就不会这么容易逃脱了

我想将文本uwu化,我该如何运行它?

安装命令行工具

  1. 安装Rust:在Unix上运行curl https://sh.rustup.rs -sSf | sh,或者这里获取更多选项
  2. 运行cargo install uwuify
  3. 运行uwuify,它将从stdin读取并输出到stdout。确保在stdin中输入内容后按下ctrl + d(Unix)或ctrl + z然后回车(Windows)以发送EOF

如果您在运行uwuify时遇到问题,请确保~/.cargo/bin已添加到您的$PATH

您可以通过指定输入文件和输出文件来读取和写入文件。使用--help获取更多信息。传递-v以获取计时信息

这在crates.io上这里

作为库包含

  1. 在您的Cargo.toml文件中的[dependencies]下放置uwuify = "^0.2"
  2. 库称为uwuifier(与二进制文件名称略有不同!)使用方法如下
use uwuifier::uwuify_str_sse;
assert_eq!(uwuify_str_sse("hello world"), "hewwo wowwd");

文档这里

从本仓库构建

点击了解更多信息

  1. 安装Rust
  2. 运行git clone https://github.com/Daniel-Liu-c0deb0t/uwu.git && cd uwu
  3. 运行cargo run --release
测试
  1. 运行cargo test
基准测试
  1. 运行mkdir test && cd test

警告:大文件分别为100MB和1GB

  1. 运行curl -OL http://mattmahoney.net/dc/enwik8.zip && unzip enwik8.zip
  2. 运行curl -OL http://mattmahoney.net/dc/enwik9.zip && unzip enwik9.zip
  3. 运行 cd .. && ./bench.sh

我不相信这会很快。我需要证据!!1!

总结:几乎可以和简单地复制文件一样快

点击了解更多信息

以下是在2019年MacBook Pro上运行./bench.sh的原始数字。该数据集使用的是英文维基百科的前100MB和前1GB。相同的dataset也被用于hutter prize文本压缩奖

1 thread uwu enwik8
time taken: 178 ms
input size: 100000000 bytes
output size: 115095591 bytes
throughput: 0.55992 gb/s

2 thread uwu enwik8
time taken: 105 ms
input size: 100000000 bytes
output size: 115095591 bytes
throughput: 0.94701 gb/s

4 thread uwu enwik8
time taken: 60 ms
input size: 100000000 bytes
output size: 115095591 bytes
throughput: 1.64883 gb/s

8 thread uwu enwik8
time taken: 47 ms
input size: 100000000 bytes
output size: 115095591 bytes
throughput: 2.12590 gb/s

copy enwik8

real	0m0.035s
user	0m0.001s
sys	0m0.031s

1 thread uwu enwik9
time taken: 2087 ms
input size: 1000000000 bytes
output size: 1149772651 bytes
throughput: 0.47905 gb/s

2 thread uwu enwik9
time taken: 992 ms
input size: 1000000000 bytes
output size: 1149772651 bytes
throughput: 1.00788 gb/s

4 thread uwu enwik9
time taken: 695 ms
input size: 1000000000 bytes
output size: 1149772651 bytes
throughput: 1.43854 gb/s

8 thread uwu enwik9
time taken: 436 ms
input size: 1000000000 bytes
output size: 1149772651 bytes
throughput: 2.29214 gb/s

copy enwik9

real	0m0.387s
user	0m0.001s
sys	0m0.341s

// TODO: 与其他工具比较

为什么这个readme没有被uwu化?

这样更易读

如果你觉得uwu化的文本更容易阅读,总有一个uwu化版本

好吧,但为什么没有我可以更改的设置?!1?!?!1

自由意志是一种错觉

这太不专业了,你怎么能被FAANG雇佣呢?!

别担心,我已经为你准备好了

标题:uwu就是一切

摘要

近年来,计算机的进步在并行化方面取得了进展,无论是使用SIMD指令在细粒度级别上,还是在多个CPU核心的高级别上。利用这些进步,我们探讨了如何将执行普通文本的uwu转换的有用任务扩展到大型输入数据集。我们在这篇论文中的贡献有三点:首先,我们提出了据我们所知的第一种关于uwu化文本的严格定义。其次,我们展示了我们对uwu化文本的独创算法,这些算法利用了现代CPU上可用的向量化和多线程功能。最后,我们提供了严格的实验结果,表明我们的实现可能是“西方最快的”。在我们的基准测试中,我们观察到我们的实现几乎和简单的文件复制一样快,这是完全IO受限的。我们相信我们的工作在各个领域都有潜在的应用,从自然语言处理的数据增强和文本预处理,到让作者能够以最少的时力和精力传达可能健康或可爱的梗信息。

// TODO: 撰写论文

// TODO: 写更多关于机器学习的内容,以便我获得资金

好吧,我需要用它来做什么,我需要许可证信息

MIT许可证

好吧,但我对此有问题或建议或问题没有在这里回答

打开一个问题,请保持友好

使用此工具的项目

  • uwu-tray:一个用于uwu化文本的托盘图标
  • uwubot:用于uwu化文本的discord机器人
  • uwupedia:uwu化百科全书
  • discord uwu webhook:通过webhooks自动uwu化discord上发送的所有消息
  • twent weznowor:最好的twitter机器人
  • 如果你用uwuify制作了一个项目,请让我知道!我感谢你们所有人!

参考文献

依赖关系

~0.5–1MB
~16K SLoC