V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
tanszhe

一个纯 PHP 的分词

  •  
  •   tanszhe · Dec 27, 2017 · 6991 views
    This topic created in 3053 days ago, the information mentioned may be changed or developed.

    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 replies    2018-06-14 15:35:20 +08:00
    dishuibaby
        1
    dishuibaby  
       Dec 27, 2017
    mark 一下
    server
        2
    server  
       Dec 27, 2017
    1024,😀
    qianmeng
        3
    qianmeng  
       Dec 27, 2017 via Android
    这个很厉害啊
    eseeker
        4
    eseeker  
       Dec 27, 2017 via Android
    好东西要赞一个。谢谢分享!
    gdtv
        5
    gdtv  
       Dec 27, 2017
    感谢,正好需要
    gdtv
        6
    gdtv  
       Dec 27, 2017
    试了一下
    广东省广州市解放路 24 号越秀公园
    结果:
    广东省,广州市,解放,路 24 号越秀,公园

    感谢楼主,正好可以用到我现在的项目里。
    assad
        7
    assad  
       Dec 27, 2017 via Android
    赞一个
    gdtv
        8
    gdtv  
       Dec 27, 2017
    能否区分词性,例如“的、地、得”是助词,“红酒”是名词
    tanszhe
        9
    tanszhe  
    OP
       Dec 27, 2017
    @gdtv 补充在词库就能支持了 目前的词库没有词性
    babytomas
        10
    babytomas  
       Dec 27, 2017
    可以配合你这个做本地翻译引擎耶。
    predator
        11
    predator  
       Dec 27, 2017
    棒棒哒非常好
    ORZRRR
        12
    ORZRRR  
       Dec 27, 2017
    支持下,这玩意核心在词典,希望大家可以开源一起维护完善词典?已经人工给一个星星
    LeungJZ
        13
    LeungJZ  
       Dec 27, 2017
    支持支持。已 star。
    kn007
        14
    kn007  
       Dec 27, 2017
    nice,支持
    x86
        15
    x86  
       Dec 27, 2017
    好东西
    Sornets
        16
    Sornets  
       Dec 27, 2017
    厉害了,star+1
    lyz745704689
        17
    lyz745704689  
       Dec 27, 2017
    有一个个人项目,目前安卓已经上架,ios 在开发中,不知道楼主有兴趣没有,已经加您微信了
    rebill
        18
    rebill  
       Dec 27, 2017
    看来切词的准确性在于词典
    pkm
        19
    pkm  
       Dec 27, 2017
    结婚|的|和尚|未结婚的
    pkm
        20
    pkm  
       Dec 27, 2017
    楼主棒棒哒,细粒度挺准确的
    aksoft
        21
    aksoft  
       Dec 27, 2017
    php 是最好的语言
    imNull
        22
    imNull  
       Dec 27, 2017
    fork 了楼主的,简单改了改支持 composer: https://github.com/xu42/VicWord
    tanszhe
        23
    tanszhe  
    OP
       Dec 27, 2017
    @imNull 感谢😄,还是把 json 格式保留 方便没有安装 igbinary 的人
    qianmeng
        24
    qianmeng  
       Dec 27, 2017 via Android
    刚才试了一下,感觉词库的大小限制了分词效果,看来智能程序的阅读量也很重要啊
    singer
        25
    singer  
    PRO
       Dec 27, 2017 via iPhone
    哇塞,好厉害啊
    heybuddy
        26
    heybuddy  
       Dec 27, 2017 via Android
    老兄 666
    mingyun
        27
    mingyun  
       Dec 27, 2017
    @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  
       Dec 28, 2017 via iPhone
    mark
    polymerdg
        29
    polymerdg  
       Dec 28, 2017
    mark
    imNull
        30
    imNull  
       Dec 28, 2017
    @mingyun 再试试
    imNull
        31
    imNull  
       Dec 28, 2017
    @tanszhe 安装个扩展 做一点小小的牺牲也是可以的
    TangMonk
        32
    TangMonk  
       Dec 28, 2017 via Android
    每个单独的 http 请求都要重新加载词库吗?
    tanszhe
        33
    tanszhe  
    OP
       Dec 28, 2017
    @TangMonk 可这么做 ,这样每次都会浪费加载词库的时间。可以做个服务 每次去调用就好了,这样词库就只加载一次
    TangMonk
        34
    TangMonk  
       Dec 28, 2017 via Android
    @tanszhe 用 apcu 来缓存可以吧
    mumu
        35
    mumu  
       Dec 28, 2017
    mark
    Outshine
        36
    Outshine  
       Dec 29, 2017
    好东西,已 star
    leon1900
        37
    leon1900  
       Dec 29, 2017
    wbz93815
        38
    wbz93815  
       Dec 30, 2017
    好东西,收藏下。
    artandlol
        39
    artandlol  
       Jun 14, 2018
    安装完一直提示故障,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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1036 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 18:37 · PVG 02:37 · LAX 11:37 · JFK 14:37
    ♥ Do have faith in what you're doing.