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

一个纯 PHP 的分词

  •  
  •   tanszhe 2017-12-27 11:54:42 +08:00 6568 次点击
    这是一个创建于 2850 天前的主题,其中的信息可能已经有所发展或是发生改变。

    VicWord 一个纯 php 的分词

    (顺便安利一下:本人从帝都回来,打算找个兼职 。如果你们正好缺个前端 或者 php 后端 不妨联系我。微信:dongxi828 )

    star 地址 https://github.com/lizhichao/VicWord

    分词说明

    • 含有 3 种切分方法
      • getWord 长度优先切分 。最快
      • getShortWord 细粒度切分。比最快慢一点点
      • getAutoWord 自动切分 (在相邻词做了递归) 。效果最好
    • 可自定义词典,自己添加词语到词库,词库支持文本格式json和二级制格式igb 二进制格式词典小,加载快
    • dict.igb含有 175662 个词
    • 三种分词结果对比
    $fc = new VicWord('igb'); $arr = $fc->getWord('北京大学生喝进口红酒,在北京大学生活区喝进口红酒'); //北京大学|生喝|进口|红酒|,|在|北京大学|生活区|喝|进口|红酒 //$arr 是一个数组 每个单元的结构[词语,词语位置,词性,这个词语是否包含在词典中] 这里只值列出了词语 $arr = $fc->getShortWord('北京大学生喝进口红酒,在北京大学生活区喝进口红酒'); //北京|大学|生喝|进口|红酒|,|在|北京|大学|生活|区喝|进口|红酒 $arr = $fc->getAutoWord('北京大学生喝进口红酒,在北京大学生活区喝进口红酒'); //北京|大学生|喝|进口|红酒|,|在|北京大学|生活区|喝|进口|红酒 //准确度对比 //q 的分词和百度的分 http://nlp.qq.com/semantic.cgi#page2 http://ai.baidu.com/tech/nlp/lexical 

    分词速度

    机器阿里云 Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
    getWord 每秒 140w 字
    getShortWord 每秒 138w 字
    getAutoWord 每秒 40w 字
    测试文本在百度百科拷贝的一段 5000 字的文本

    制作词库

    • 词库支持 utf-8 的任意字符
    • 词典大小不影响 分词速度
      VicDict->add(词语,词性 = null)

    demo

    demo

    39 条回复    2018-06-14 15:35:20 +08:00
    dishuibaby
        1
    dishuibaby  
       2017-12-27 12:44:58 +08:00
    mark 一下
    server
        2
    server  
       2017-12-27 12:57:28 +08:00
    1024,
    qianmeng
        3
    qianmeng  
       2017-12-27 13:01:13 +08:00 via Android
    这个很厉害啊
    eseeker
        4
    eseeker  
       2017-12-27 13:03:04 +08:00 via Android
    好东西要赞一个。谢谢分享!
    gdtv
        5
    gdtv  
       2017-12-27 13:12:42 +08:00
    感谢,正好需要
    gdtv
        6
    gdtv  
       2017-12-27 13:15:17 +08:00
    试了一下
    广东省广州市解放路 24 号越秀公园
    结果:
    广东省,广州市,解放,路 24 号越秀,公园

    感谢楼主,正好可以用到我现在的项目里。
    assad
        7
    assad  
       2017-12-27 13:15:36 +08:00 via Android
    赞一个
    gdtv
        8
    gdtv  
       2017-12-27 13:18:33 +08:00
    能否区分词性,例如“的、地、得”是助词,“红酒”是名词
    tanszhe
        9
    tanszhe  
    OP
       2017-12-27 14:11:21 +08:00
    @gdtv 补充在词库就能支持了 目前的词库没有词性
    babytomas
        10
    babytomas  
       2017-12-27 14:14:18 +08:00
    可以配合你这个做本地翻译引擎耶。
    predator
        11
    predator  
       2017-12-27 14:16:42 +08:00
    棒棒哒非常好
    ORZRRR
        12
    ORZRRR  
       2017-12-27 14:17:21 +08:00
    支持下,这玩意核心在词典,希望大家可以开源一起维护完善词典?已经人工给一个星星
    LeungJZ
        13
    LeungJZ  
       2017-12-27 15:05:13 +08:00
    支持支持。已 star。
    kn007
        14
    kn007  
       2017-12-27 15:07:53 +08:00
    nice,支持
    x86
        15
    x86  
       2017-12-27 15:12:59 +08:00
    好东西
    Sornets
        16
    Sornets  
       2017-12-27 15:43:55 +08:00
    厉害了,star+1
    lyz745704689
        17
    lyz745704689  
       2017-12-27 16:20:03 +08:00
    有一个个人项目,目前安卓已经上架,ios 在开发中,不知道楼主有兴趣没有,已经加您微信了
    rebill
        18
    rebill  
       2017-12-27 16:23:51 +08:00
    看来切词的准确性在于词典
    pkm
        19
    pkm  
       2017-12-27 16:37:07 +08:00
    结婚|的|和尚|未结婚的
    pkm
        20
    pkm  
       2017-12-27 16:40:36 +08:00
    楼主棒棒哒,细粒度挺准确的
    aksoft
        21
    aksoft  
       2017-12-27 17:19:19 +08:00
    php 是最好的语言
    imNull
        22
    imNull  
       2017-12-27 19:42:18 +08:00
    fork 了楼主的,简单改了改支持 composer: https://github.com/xu42/VicWord
    tanszhe
        23
    tanszhe  
    OP
       2017-12-27 21:08:17 +08:00
    @imNull 感谢,还是把 json 格式保留 方便没有安装 igbinary 的人
    qianmeng
        24
    qianmeng  
       2017-12-27 21:58:47 +08:00 via Android
    刚才试了一下,感觉词库的大小限制了分词效果,看来智能程序的阅读量也很重要啊
    singer
        25
    singer  
       2017-12-27 22:01:28 +08:00 via iPhone
    哇塞,好厉害啊
    heybuddy
        26
    heybuddy  
       2017-12-27 22:03:26 +08:00 via Android
    老兄 666
    mingyun
        27
    mingyun  
       2017-12-27 23:49:48 +08:00
    @imNull 安装提示

    [InvalidArgumentException]
    Could not find a matching version of package xu42/vic-word. Check the packa
    ge spelling, your version constraint and that the package is available in a
    stability which matches your minimum-stability (stable).
    arsom
        28
    arsom  
       2017-12-28 01:13:12 +08:00 via iPhone
    mark
    polymerdg
        29
    polymerdg  
       2017-12-28 08:44:36 +08:00
    mark
    imNull
        30
    imNull  
       2017-12-28 09:15:21 +08:00
    @mingyun 再试试
    imNull
        31
    imNull  
       2017-12-28 09:16:21 +08:00
    @tanszhe 安装个扩展 做一点小小的牺牲也是可以的
    TangMonk
        32
    TangMonk  
       2017-12-28 09:21:54 +08:00 via Android
    每个单独的 http 请求都要重新加载词库吗?
    tanszhe
        33
    tanszhe  
    OP
       2017-12-28 09:27:29 +08:00
    @TangMonk 可这么做 ,这样每次都会浪费加载词库的时间。可以做个服务 每次去调用就好了,这样词库就只加载一次
    TangMonk
        34
    TangMonk  
       2017-12-28 11:17:49 +08:00 via Android
    @tanszhe 用 apcu 来缓存可以吧
    mumu
        35
    mumu  
       2017-12-28 16:52:44 +08:00
    mark
    Outshine
        36
    Outshine  
       2017-12-29 11:09:05 +08:00
    好东西,已 star
    leon1900
        37
    leon1900  
       2017-12-29 19:57:38 +08:00
    wbz93815
        38
    wbz93815  
       2017-12-30 21:31:21 +08:00
    好东西,收藏下。
    artandlol
        39
    artandlol  
       2018-06-14 15:35:20 +08:00
    安装完一直提示故障,composer 和 git 的方式都有问题。

    PHP Fatal error: Uncaught Error: Call to undefined function Lizhichao\Word\igbinary_unserialize() in /data/web/vendor/lizhichao/word/Lib/VicWord.php:31
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5523 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 08:01 PVG 16:01 LAX 01:01 JFK 04:01
    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