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 在 文本处理 中排名
每月 3,423 次下载
在 5 crates 中使用
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 化文本的本质
有几个转换
- 替换一些单词(例如
small
->smol
等) - nya-ify(例如
naruhodo
->nyaruhodo
) - 用
w
替换l
和r
- 有时重复(例如
hi
->h-hi
) - 有时在标点符号后添加文本表情符号(例如
,
,.
或!
)
这些转换过程利用 sse4.1 向量内建函数一次处理 16 个字节。对于字符串搜索,我使用自定义的 SIMD 实现 bitap 算法进行多字符串匹配。对于随机数生成,我使用 XorShift32。对于 SIMD 寄存器内的大多数字符级检测,都是通过掩码和位移来模拟并行中的基本状态机
支持多线程,因此你可以利用所有 CPU 核心来实现将大量文本 uwu 化的崇高目标
通过简单地忽略输入中的非 ASCII 字符,优雅地处理 UTF-8
很遗憾,由于SIMD并行处理和多线程的原因,一些单词可能无法完全被uwu化,如果它们幸运地跨过了SIMD向量或线程缓冲区的边界。下次它们就不会这么容易逃脱了
我想将文本uwu化,我该如何运行它?
安装命令行工具
- 安装Rust:在Unix上运行
curl https://sh.rustup.rs -sSf | sh
,或者这里获取更多选项 - 运行
cargo install uwuify
- 运行
uwuify
,它将从stdin读取并输出到stdout。确保在stdin中输入内容后按下ctrl + d(Unix)或ctrl + z然后回车(Windows)以发送EOF
如果您在运行uwuify
时遇到问题,请确保~/.cargo/bin
已添加到您的$PATH
您可以通过指定输入文件和输出文件来读取和写入文件。使用--help
获取更多信息。传递-v
以获取计时信息
这在crates.io上这里
作为库包含
- 在您的
Cargo.toml
文件中的[dependencies]
下放置uwuify = "^0.2"
- 库称为
uwuifier
(与二进制文件名称略有不同!)使用方法如下
use uwuifier::uwuify_str_sse;
assert_eq!(uwuify_str_sse("hello world"), "hewwo wowwd");
文档这里
从本仓库构建
点击了解更多信息
- 安装Rust
- 运行
git clone https://github.com/Daniel-Liu-c0deb0t/uwu.git && cd uwu
- 运行
cargo run --release
测试
- 运行
cargo test
基准测试
- 运行
mkdir test && cd test
警告:大文件分别为100MB和1GB
- 运行
curl -OL http://mattmahoney.net/dc/enwik8.zip && unzip enwik8.zip
- 运行
curl -OL http://mattmahoney.net/dc/enwik9.zip && unzip enwik9.zip
- 运行
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