中文文案排版纠正器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Ricoo
V2EX    分享创造

中文文案排版纠正器

  •  2
     
  •   Ricoo
    ricoa 2017-04-26 16:10:01 +08:00 3501 次点击
    这是一个创建于 3159 天前的主题,其中的信息可能已经有所发展或是发生改变。

    分享一个中文文案排版纠正器,原发于 https://laravel-china.org/articles/4532/chinese-copywriter

    项目地址 https://github.com/ricoa/copywriting-correct

    演示地址 https://copywriting-correct.ricoo.top

    描述

    统一中文文案、排版的相关用法,降低团队成员之间的沟通成本,增强网站气质。

    比较以下排版:

    • 排版 1

    LeanCloud 数据存储是围绕 AVObject 进行的.每个 AVObject 都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个 AVObject 上提前指定存在哪些键,只要直接设定对应的 key-value 即可。 gitHub 是一个通过 git 进行版本控制的软件源代码托管服务,由 GitHub 公司(曾称 Logical Awesome )的开发者 Chris Wanstrath 、 PJ Hyett 和 Tom Preston-Werner 使用 Ruby on Rails 编写而成。

    • 排版 2

    LeanCloud 数据存储是围绕 AVObject 进行的。每个 AVObject 都包含了与 JSON 兼容的 key-value 对应的数据。数据是 schema-free 的,你不需要在每个 AVObject 上提前指定存在哪些键,只要直接设定对应的 key-value 即可。 GitHub 是一个通过 Git 进行版本控制的软件源代码托管服务,由 GitHub 公司(曾称 Logical Awesome )的开发者 Chris Wanstrath 、 PJ Hyett 和 Tom Preston-Werner 使用 Ruby on Rails 编写而成。

    很明显,第二种排版中英文有空格,标点符号也使用正确,专有名词使用正确,会让人看起来更舒服,也更专业。 本系统正是基于 中文文案排版指北(简体中文版) 进行纠正,帮助解决中英文混排的排版问题,提高文案可阅读性。

    安装

    //安装开发中版本 composer require ricoa/copywriting-correct:dev-master 

    使用

    <?php require_once 'vendor/autoload.php'; use Ricoa\CopyWritingCorrect\CopyWritingCorrectService; $service=new CopyWritingCorrectService(); $text=$service->correct('在 LeanCloud 上,数据存储是围绕 AVObject 进行的。'); 

    注入自己的纠正器

    继承 \Ricoa\CopyWritingCorrect\Correctors\Corrector ,并实现 handle 方法。例如 ExampleCorrector.php

    <?php class ExampleCorrector extends \Ricoa\CopyWritingCorrect\Correctors\Corrector { protected static $corrector=null; /** * @param string $text * * @return mixed */ public function handle($text) { return $text; } } 

    使用:

    <?php require_once 'vendor/autoload.php'; use Ricoa\CopyWritingCorrect\CopyWritingCorrectService; $service=new CopyWritingCorrectService(); $service->addCorrectors([ExampleCorrector::class]);//注入纠正器 $service->resetCorrectors([ExampleCorrector::class]);//重置纠正器,也即废弃默认的纠正器 $text=$service->correct('在 LeanCloud 上,数据存储是围绕 AVObject 进行的。'); 

    已实现

    空格

    1. 中文字符与半角字符(例如英文字符,数字,英文标点符号)间添加空格。
    2. 数字后面跟着英文字符则在数字后添加空格(适用于数字+单位,例如 1 GB )。
    3. 全角标点与其他字符之间不加空格
    4. 希腊字母与中文字符以及数字和英文字符之间添加空格(不在指北内)。

    标点符号

    1. 不重复使用中文标点符号(仅!和?),重复时只保留第一个。

    全角和半角

    1. 中文后使用全角中文标点符号(包括!?。,():;)。
    2. 数字使用半角字符。
    3. 全角转半角(不在指北内)。
    [ '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' , '-' , ' ' , '/' , '%' , '#' , '@' , '&' , '<' , '>' , '[' , ']' , '{' , '}' , '\' , '|' , '+' , '=' , '_' , '^' , ' ̄' , '`' ]; //转 [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '-', ' ', '/', '%', '#', '@', '&', '<', '>', '[', ']', '{', '}', '\\','|', '+', '=', '_', '^', '~', '`' ]; 

    名词

    1. 专有名词使用正确的大小写(部分名词达成,见 词典

    未实现

    全角和半角

    1. 遇到完整的英文整句、特殊名词,其容使用半角标点

    改进

    有什么新的想法和建议,欢迎提交 issue 或者 Pull Requests

    License

    基于 MIT license.

    9 条回复    2019-03-23 10:17:13 +08:00
    neroxps
        1
    neroxps  
       2017-04-26 16:47:31 +08:00
    bug 反馈,括号后面的英文标点不会纠正成中文符号。

    例如:(你好). 应该纠正成 (你好)。

    另建议 ( abc ) 能够纠正成 (abc) 意思就是如果括号内容是中文,就用中文括号,如果是英文,就应该用英文括号。

    小建议 XD
    geelaw
        2
    geelaw  
       2017-04-26 16:49:46 +08:00   2
    这个指北本身问题也很多,此外这个实现也有很多问题。

    “在合适的位置添加空格”并不是正确的排版方式,而是一种因为现代浏览器不能正确排版而做的 hack 。那些位置应该具有的是 *空白* 而不是空格。如果你使用 Word 或 Outlook 就不会有这个问题。

    另外看起来本文提到的 example 并不是最新的纠正器的结果:比如“。”和“ GitHub ”之间不需要空格,“ Awesome ”和“)”之间也不需要,“ Wanstrath ”、“、”和“ PJ ”之间也不需要。但是目前网页演示得到的结果是正确的。

    汉字和拉丁字母之间插入空格的实现是错误的,例如“法语中两人初次见面可以用nchanté(e)打招呼。”中第一个空格并未被加入。

    数字和拉丁字母之间增加空格也不一定是正确的,例如 1Password 。

    纠正拼写太激进,譬如 ruby 变 Ruby 和 window(s) 变 Windows 都不一定是正确的,还有 chef 、 grape 、 office 、 underscore 等词语也不应该自动纠正。以下词语是正确拼写: Vim 、 git (它可以是命令的名字)。

    把 ie 替换为可能是错误的,它还可能是 i.e.。

    拼写纠正器可能会意外地把 git-scm.org 纠正为非 canonical 的写法 Git-scm.org

    另外双写、三连写“!”或“?”是正确用法。
    byron
        3
    byron  
       2017-04-26 17:13:27 +08:00
    很好的产品,我本来想撸一个来着。
    不过恕我眼拙,排版 1 和排版 2 我只看到了几个专有名词的区别, git-->Git 、 github-->GitHub 等。
    byron
        4
    byron  
       2017-04-26 17:16:50 +08:00
    另外,建议把一些有争议的地方做成可选项。
    比如最上面有开关,询问用户是习惯使用「直角引号」还是“弯引号”。
    ynyounuo
        5
    ynyounuo  
       2017-04-26 17:28:29 +08:00
    @geelaw V2EX 会自动给你加空格 - -
    geelaw
        6
    geelaw  
       2017-04-26 17:36:47 +08:00 via iPhone
    @ynyounuo 我在其他帖子吐槽过这个智障设定,尤其是它的修正算法错得离谱。我个人也会使用空格代替空白的 hack ,而且很少写错
    momocraft
        7
    momocraft  
       2017-04-26 17:40:03 +08:00
    很棒

    我也在考虑做类似的东西 (不过不是 PHP),可能会模仿这个的一些功能。
    Khlieb
        8
    Khlieb  
       2017-04-30 16:11:35 +08:00 via Android
    @geelaw 我给你叫个人 @livid
    vazo
        9
    vazo  
       2019-03-23 10:17:13 +08:00
    楼主,你的演示网站已打不开
    https://copywriting-correct.ricoo.top
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2696 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 02:33 PVG 10:33 LAX 18:33 JFK 21:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86