#text #numbers #predictive #word #port #vice

t9

轻松创建从单词到端口号及相反的转换

5个版本

0.2.2 2019年11月11日
0.2.1 2019年11月11日
0.2.0 2019年11月11日
0.1.1 2019年11月11日
0.1.0 2019年11月11日

#7 in #vice

MIT许可协议

18KB
324

T9

Rust中的预测文本

动机

我从ag_dubs那里学到了一个巧妙的技巧,可以用来为你的应用程序生成端口号。他们在各种RustBridge活动中使用了这个技巧。

这个技巧是选择一个与你应用程序相关的单词,然后查看电话键盘。

Keypad of a phone used by T9

由Sakurambo使用Adobe Illustrator CS2创建,公有领域,https://commons.wikimedia.org/w/index.php?curid=2048341

查找每个字母对应的数字,这将是你端口号。

示例

以单词rust为例。查看键盘,我们发现以下数字

字母 数字
r 7
u 8
s 7
t 8

你的应用程序的端口号将是7878

艰苦工作

确定正确的键盘是一项艰苦的工作。幸运的是,t9包就派上用场了。以下代码可以用来确定rust对应的端口号。

extern crate t9;

use std::env;
use t9::pad;

fn main() {
    let args: Vec<String> = env::args().collect();

    let port_name = &args[1];
    let port = pad::digits_for(port_name);
    println!("{}", port)
}

使用cargo run --examples port -- rust会返回预期的7878。在port.rs中可以找到在示例目录中的示例。

反向查找

t9还允许你进行反向查找。也就是说,给定端口号对应的单词是什么?

extern crate t9;

use std::env;
use std::fs::File;
use std::io::{self, BufRead, BufReader};
use t9::{pad, tree::Tree};

fn main() -> io::Result<()> {
    let mut tree = Tree::empty();
    let file = File::open("/usr/share/dict/american-english")?;
    let reader = BufReader::new(file);
    for word in reader.lines() {
        tree.add(word?);
    }

    let args: Vec<String> = env::args().collect();

    let port = &args[1];
    let digits = pad::digits_for(port);
    let words = tree.words_at(digits);
    for word in words {
        println!("{}", word)
    }
    Ok(())
}

使用cargo run --release --example t9 -- 7878会返回预期的rust。在示例目录中可以找到一个更详细的示例,允许你指定字典文件。

依赖关系

~750KB