V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
H00kran
V2EX  ›  分享创造

[tep] 用 Rust 写的汉语到英语标点用法转换工具

  •  
  •   H00kran · 2022-02-15 22:42:24 +08:00 · 2043 次点击
    这是一个创建于 1037 天前的主题,其中的信息可能已经有所发展或是发生改变。

    链接: https://github.com/h0gan1ee/tep

    特点:超级稳定超级高效。(在 M1 处理器上转换 1000+ 万字的文本仅需 0.2 秒,除去 IO 用时仅有 0.02 秒)。

    目前只有核心功能,非常简单。未来计划加入扩展性功能,得益于独特的文本分析算法,所以有很大的发挥空间。

    转换原理:从简单匹配规则(可能是冗余的)按所有规则的匹配字符串中字符顺序构建树状数据结构,每个节点都采用哈希表来记录子节点,从而做到零冗余和 O(n) 时间复杂度的转换算法。

    除了 CLI 应用之外,此项目还是一个 lib ,不过目前只提供了很简单的 API ,而且几乎没有文档。

    (当然,好像没有人有这种需求……)

    19 条回复    2022-02-16 17:12:01 +08:00
    duke807
        1
    duke807  
       2022-02-15 23:13:47 +08:00 via Android
    你應該做成:自動修復中英文標點混用,中文語句用中文標點,英文語句用英文標點。
    這樣才有意義。
    SuperMild
        2
    SuperMild  
       2022-02-15 23:22:29 +08:00
    我也觉得“中文語句用中文標點,英文語句用英文標點”比较好,比如

    现年 74 岁的卡米拉,17 年前……成员之一。

    我希望改成

    现年 74 岁的卡米拉, 17 年前……成员之一。

    只把“卡米拉”与“17 年前”之间的逗号改成半角。
    H00kran
        3
    H00kran  
    OP
       2022-02-15 23:29:56 +08:00 via Android   ❤️ 1
    @duke807 这个已经有人做了,叫 auto correct ( https://github.com/huacnlee/autocorrect ),我就不重复造轮了
    Kilerd
        4
    Kilerd  
       2022-02-15 23:37:10 +08:00
    @duke807 https://github.com/Kilerd/chineseword 我也写了一个, 哈哈哈哈哈
    BrettD
        5
    BrettD  
       2022-02-16 00:03:36 +08:00
    匹配数据结构是前缀树吗?
    H00kran
        6
    H00kran  
    OP
       2022-02-16 00:08:55 +08:00 via Android
    @BrettD 是的
    wwwe
        7
    wwwe  
       2022-02-16 00:12:52 +08:00 via Android
    冷知识:与问号冒号分号感叹号括号等不同,双引号“”中文和英文用的是同一个字符
    BrettD
        8
    BrettD  
       2022-02-16 00:14:19 +08:00
    @wwwe 中文也有全角的双引号
    H00kran
        9
    H00kran  
    OP
       2022-02-16 00:18:34 +08:00 via Android
    @wwwe 确实是这样。我当时也纳闷为什么找不到全角的引号。不过自从互联网兴起之后由于 " ' 这两种引号在计算机上输入方便,所以在英文领域好像在除了文字出版之外的领域都很少见了。倒是时不时会看到一种 old school 的用法是把 ` 当作左引号,' 当作右引号。
    H00kran
        10
    H00kran  
    OP
       2022-02-16 00:20:44 +08:00 via Android
    @BrettD Unicode 里好像没有,中英文是共用的,只是很多中文字体把引号都全角化了。我发的那个截图里用的是苹方字体,就没有全角化。
    Mohanson
        11
    Mohanson  
       2022-02-16 00:23:42 +08:00 via Android
    感觉用状态机好点,有些不讲究的人喜欢一个句号后面打两个空格(点名中本聪),用前缀树没法删掉多余的空格
    H00kran
        12
    H00kran  
    OP
       2022-02-16 00:28:11 +08:00 via Android
    @Mohanson 可以试试用 auto correct 这种严格的句读规范修正工具处理再用这个工具。我也想过状态机的实现,但感觉不够优雅,而且后续开发自定义扩展规则集的功能会稍显复杂。(顺带一提,这个工具开发的初衷就是用来把 auto correct 过的文本转成英文标点表达形式的文本)
    lxml
        13
    lxml  
       2022-02-16 00:34:27 +08:00
    正好想问一个知识,在大陆出版的文章和官方新闻之类的,可以用直角引号么?
    「」( mac 中文输入法 shift + [] 可输入)
    H00kran
        14
    H00kran  
    OP
       2022-02-16 00:37:32 +08:00 via Android
    @lxml 国标是用英文样式的全角引号的,因此「」是不符合出版规范的,理论上在大陆的出版物无特殊理由应该遵守国标规范。不过我这个工具支持「」『』。
    wwwe
        15
    wwwe  
       2022-02-16 08:32:12 +08:00 via Android
    @H00kran 计算机领域用"都怪 ASCII 码里只有"没有“”。如果 ASCII 码里是“”,编程语言中字符串就会用“”,就能和(){}[]一样嵌套,减少一些 escape 的麻烦😂
    yolee599
        16
    yolee599  
       2022-02-16 08:58:51 +08:00 via Android   ❤️ 1
    最讨厌中文注释使用英文标点符号的了
    Origami404
        17
    Origami404  
       2022-02-16 09:31:15 +08:00 via Android   ❤️ 3
    好!最喜欢中文里打英文标点的了
    bvt
        18
    bvt  
       2022-02-16 13:55:07 +08:00 via Android
    一点也不懂中文里用英文标点的
    就光说切换输入法不麻烦吗?
    Origami404
        19
    Origami404  
       2022-02-16 17:12:01 +08:00 via Android
    @bvt 在中文里用中文标点切输入法才麻烦…想想你写着写着忽然要插入一个代码块,或者想加粗,你还得切英文打符号。而大部分输入法都有一个选项可以让你直接在中文下输入半角符号的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1617 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:46 · PVG 00:46 · LAX 08:46 · JFK 11:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.