V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
vway
V2EX  ›  程序员

Go 语言高效分词, 支持英文、中文、日文等

  •  
  •   vway ·
    vcaesar · 2017-11-16 20:58:28 +08:00 · 6898 次点击
    这是一个创建于 2593 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go 语言高效分词, 支持英文、中文、日文等

    词典用双数组 trie ( Double-Array Trie )实现, 分词器算法为基于词频的最短路径加动态规划。

    支持普通和搜索引擎两种分词模式,支持用户词典、词性标注,可运行 JSON RPC 服务。

    分词速度单线程 9MB/s,goroutines 并发 42MB/s ( 8 核 Macbook Pro )。

    安装 /更新

    go get -u github.com/go-ego/gse
    

    Build-tools

    go get -u github.com/go-ego/re 
    

    re gse

    To create a new gse application

    $ re gse my-gse
    

    re run

    To run the application we just created, you can navigate to the application folder and execute:

    $ cd my-gse && re run
    

    使用

    package main
    
    import (
    	"fmt"
    
    	"github.com/go-ego/gse"
    )
    
    func main() {
    	// 载入词典
    	var segmenter gse.Segmenter
    	segmenter.LoadDict()
    	// segmenter.LoadDict("your gopath"+"/src/github.com/go-ego/gse/data/dict/dictionary.txt")
    
    	// 分词
    	text := []byte("中华人民共和国中央人民政府")
    	segments := segmenter.Segment(text)
      
    	// 处理分词结果
    	// 支持普通模式和搜索模式两种分词,见代码中 ToString 函数的注释。
    	fmt.Println(gse.ToString(segments, false)) 
    
    	text1 := []byte("深圳地王大厦")
    	segments1 := seg.Segment([]byte(text1))
    	fmt.Println(gse.ToString(segments1, false)) 
    }
    

    项目地址: https://github.com/go-ego/gse

    31 条回复    2017-11-17 23:37:16 +08:00
    xrlin
        1
    xrlin  
       2017-11-16 21:33:07 +08:00 via iPhone
    支持,希望 go 的生态发展得越来越好
    dobelee
        2
    dobelee  
       2017-11-16 21:36:40 +08:00 via Android
    这个和结巴比如何?
    cheneydog
        3
    cheneydog  
       2017-11-16 21:39:29 +08:00
    需要词库么?
    vway
        4
    vway  
    OP
       2017-11-17 01:22:01 +08:00
    @xrlin 感谢
    vway
        5
    vway  
    OP
       2017-11-17 01:22:27 +08:00
    @cheneydog 需要词库
    vway
        6
    vway  
    OP
       2017-11-17 01:23:39 +08:00
    @dobelee c++绑定的 gojieba? 纯 go, 性能差不多, 比 Python 版好很多
    secsilm
        7
    secsilm  
       2017-11-17 08:17:15 +08:00 via Android
    @vway 比 Python 版本好在哪?
    qsnow6
        8
    qsnow6  
       2017-11-17 09:08:25 +08:00
    @secsilm 干嘛非要比,不同环境下的工具
    picone
        9
    picone  
       2017-11-17 10:37:04 +08:00
    我就说怎么这么熟悉,简介文案都一模一样
    https://github.com/huichen/sego
    picone
        10
    picone  
       2017-11-17 10:38:17 +08:00
    麻烦楼主尊重一下别人开源,fork 一下别人的代码呗,至少也写一下出处,我看到多处代码都一样
    windyboy
        11
    windyboy  
       2017-11-17 10:48:53 +08:00
    楼主居然敢无视世界上最大的同性交友站的威力
    thinkItThrough
        12
    thinkItThrough  
       2017-11-17 10:53:59 +08:00
    wtf ?
    vway
        13
    vway  
    OP
       2017-11-17 11:16:26 +08:00 via iPhone
    @picone 请看底部
    vway
        14
    vway  
    OP
       2017-11-17 11:17:57 +08:00 via iPhone
    @picone 你有认真看介绍和 License,没看就不要乱说
    vway
        15
    vway  
    OP
       2017-11-17 11:18:18 +08:00 via iPhone
    @thinkItThrough 有病?
    vway
        16
    vway  
    OP
       2017-11-17 11:18:31 +08:00 via iPhone
    @windyboy ???
    vway
        17
    vway  
    OP
       2017-11-17 11:20:07 +08:00 via iPhone
    @picone 没写出处?
    vway
        18
    vway  
    OP
       2017-11-17 11:25:20 +08:00 via iPhone
    @picone github 和 License 中写了,你都没看项目,就不要瞎喷
    vway
        19
    vway  
    OP
       2017-11-17 11:26:03 +08:00 via iPhone
    @qsnow6 是的
    vway
        20
    vway  
    OP
       2017-11-17 11:34:18 +08:00 via iPhone
    @windyboy 没有登,🤭,作者不维护,才开的新分支
    yangtukun1412
        21
    yangtukun1412  
       2017-11-17 12:14:41 +08:00
    为什么不直接 fork 呢...感觉这样子破坏了之前的 commit history...
    vway
        22
    vway  
    OP
       2017-11-17 14:56:31 +08:00
    @yangtukun1412 直接 fork 搜不到
    vway
        23
    vway  
    OP
       2017-11-17 14:57:10 +08:00
    @secsilm 只能说性能更好吧
    htfy96
        24
    htfy96  
       2017-11-17 15:13:51 +08:00
    感觉这种算法 /CPU 密集的程序最好做法还是提供一个 C 接口版本,然后其他语言在上面用 FFI 包装一下,这样就不会陷入重复造轮子的情况……
    wzha2008
        25
    wzha2008  
       2017-11-17 17:29:54 +08:00
    再加个 HMM ?
    vway
        26
    vway  
    OP
       2017-11-17 17:38:08 +08:00
    @htfy96 嗯, 那样更通用, 但部署会不方便
    vway
        27
    vway  
    OP
       2017-11-17 17:39:09 +08:00
    @wzha2008 感谢建议, 会列入考虑
    whyw
        28
    whyw  
       2017-11-17 22:12:41 +08:00
    👍, 支持
    secsilm
        29
    secsilm  
       2017-11-17 23:20:18 +08:00 via Android
    @qsnow6 怪我比了?楼主说的比 Python 好啊,我就想知道好在哪
    vway
        30
    vway  
    OP
       2017-11-17 23:36:57 +08:00
    @secsilm 我说的是性能好很多, 不好意思有歧义
    vway
        31
    vway  
    OP
       2017-11-17 23:37:16 +08:00
    @whyw 🤝, 感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2912 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:39 · PVG 08:39 · LAX 16:39 · JFK 19:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.