「GoCN酷Go推荐」Go高性能多语言NLP和分词库——gse
gse是什么?
Go高性能多语言NLP和分词库, 支持英文、中文、日文等, 支持接入 elasticsearch 和 bleveGse是结巴分词(jieba)的golang实现,并尝试添加NLP功能和更多属性
特征
支持普通、搜索引擎、全模式、精确模式和 HMM 模式多种分词模式支持自定义词典、embed 词典、词性标注、停用词、整理分析分词多语言支持: 英文, 中文, 日文等支持繁体字NLP 和 TensorFlow 支持 (进行中)命名实体识别 (进行中)支持接入 Elasticsearch 和 bleve可运行 JSON RPC 服务算法
词典用双数组 trie(Double-Array Trie)实现,分词器算法为基于词频的最短路径加动态规划, 以及 DAG 和 HMM 算法分词.支持 HMM 分词, 使用 viterbi 算法.分词速度
单线程 9.2MB/sgoroutines 并发 26.8MB/s.HMM 模式单线程分词速度 3.2MB/s.(双核 4 线程 Macbook Pro)。快速入门
packagemainimport("fmt""regexp""github.com/go-ego/gse""github.com/go-ego/gse/hmm/pos")var(seggse.SegmenterposSegpos.Segmenternew,_=gse.New("zh,testdata/test_dict3.txt","alpha")text="你好世界,Helloworld,Helloworld.")funcmain(){//加载默认词典seg.LoadDict()//加载默认embed词典//seg.LoadDictEmbed()////加载简体中文词典//seg.LoadDict("zh_s")//seg.LoadDictEmbed("zh_s")////加载繁体中文词典//seg.LoadDict("zh_t")////加载日文词典//seg.LoadDict("jp")////载入词典//seg.LoadDict("yourgopath"+"/src/github.com/go-ego/gse/data/dict/dictionary.txt")cut()segCut()}funccut(){hmm:=new.Cut(text,true)fmt.Println("cutusehmm:",hmm)hmm=new.CutSearch(text,true)fmt.Println("cutsearchusehmm:",hmm)fmt.Println("analyze:",new.Analyze(hmm,text))hmm=new.CutAll(text)fmt.Println("cutall:",hmm)reg:=regexp.MustCompile(`(\d+年|\d+月|\d+日|[\p{Latin}]+|[\p{Hangul}]+|\d+\.\d+|[a-zA-Z0-9]+)`)text1:=`헬로월드헬로서울,2021年09月10日,3.14`hmm=seg.CutDAG(text1,reg)fmt.Println("Cutwithhmmandregexp:",hmm,hmm[0],hmm[6])}funcanalyzeAndTrim(cut[]string){a:=seg.Analyze(cut,"")fmt.Println("analyzethesegment:",a)cut=seg.Trim(cut)fmt.Println("cutall:",cut)fmt.Println(seg.String(text,true))fmt.Println(seg.Slice(text,true))}funccutPos(){po:=seg.Pos(text,true)fmt.Println("pos:",po)po=seg.TrimPos(po)fmt.Println("trimpos:",po)posSeg.WithGse(seg)po=posSeg.Cut(text,true)fmt.Println("pos:",po)po=posSeg.TrimWithPos(po,"zg")fmt.Println("trimpos:",po)}funcsegCut(){//分词文本tb:=[]byte("山达尔星联邦共和国联邦政府")//处理分词结果fmt.Println("输出分词结果,类型为字符串,使用搜索模式:",seg.String(string(tb),true))fmt.Println("输出分词结果,类型为slice:",seg.Slice(string(tb)))segments:=seg.Segment(tb)//处理分词结果,普通模式fmt.Println(gse.ToString(segments))segments1:=seg.Segment([]byte(text))//搜索模式fmt.Println(gse.ToString(segments1,true))}
输出结果:
cutusehmm:[你好世界,helloworld,helloworld.]cutsearchusehmm:[你好世界,helloworld,helloworld.]analyze:[{0600你好725l}{61210世界34387n}{252720,0}{273230hello0}{2627400}{323750world0}{121460,0}{273770helloworld0}{373880.0}]cutall:[你好世界,helloworld,helloworld.]Cutwithhmmandregexp:[헬로월드헬로서울,2021年09月10日,3.14]헬로월드2021年输出分词结果,类型为字符串,使用搜索模式:山/n达尔/nrt星/n联邦/n共和/nz国/zg共和国/ns联邦/n政府/n联邦政府/nt输出分词结果,类型为slice:[山达尔星联邦共和国联邦政府]山/n达尔/nrt星/n联邦/n共和国/ns联邦政府/nt你好/l世界/n,/x/xhello/x/xworld/x,/x/xhelloworld/x./x
更多用法可参考github上官方用例
参考资料
https://github.com/go-ego/gse/blob/master/README_zh.md《酷Go推荐》招募:各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到
新的库,并且知道怎么用。
大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!戳「阅读原文」,即可报名
扫码也可以加入 GoCN 的大家族哟~
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...