packagesego
import(
"bytes"
"fmt"
)
//输出分词结果为字符串
//
//有两种输出模式,以"中华人民共和国"为例
//
//普通模式(searchMode=false)输出一个分词"中华人民共和国/ns"
//搜索模式(searchMode=true)输出普通模式的再细致切分:
//"中华/nz人民/n共和/nz共和国/ns人民共和国/nt中华人民共和国/ns"
//
//搜索模式主要用于给搜索引擎提供尽可能多的关键字,详情请见Token结构体的注释。
funcSegmentsToString(segs[]Segment,searchModebool)(outputstring){
ifsearchMode{
for_,seg:=rangesegs{
output+=tokenToString(seg.token)
}
}else{
for_,seg:=rangesegs{
output+=fmt.Sprintf(
"%s/%s",textSliceToString(seg.token.text),seg.token.pos)
}
}
return
}
functokenToString(token*Token)(outputstring){
for_,s:=rangetoken.segments{
output+=tokenToString(s.token)
}
output+=fmt.Sprintf("%s/%s",textSliceToString(token.text),token.pos)
return
}
//输出分词结果到一个字符串slice
//
//有两种输出模式,以"中华人民共和国"为例
//
//普通模式(searchMode=false)输出一个分词"[中华人民共和国]"
//搜索模式(searchMode=true)输出普通模式的再细致切分:
//"[中华人民共和共和国人民共和国中华人民共和国]"
//
//搜索模式主要用于给搜索引擎提供尽可能多的关键字,详情请见Token结构体的注释。
funcSegmentsToSlice(segs[]Segment,searchModebool)(output[]string){
ifsearchMode{
for_,seg:=rangesegs{
output=append(output,tokenToSlice(seg.token)...)
}
}else{
for_,seg:=rangesegs{
output=append(output,seg.token.Text())
}
}
return
}
functokenToSlice(token*Token)(output[]string){
for_,s:=rangetoken.segments{
output=append(output,tokenToSlice(s.token)...)
}
output=append(output,textSliceToString(token.text))
returnoutput
}
//将多个字元拼接一个字符串输出
functextSliceToString(text[]Text)string{
varoutputstring
for_,word:=rangetext{
output+=string(word)
}
returnoutput
}
//返回多个字元的字节总长度
functextSliceByteLength(text[]Text)(lengthint){
for_,word:=rangetext{
length+=len(word)
}
return
}
functextSliceToBytes(text[]Text)[]byte{
varbufbytes.Buffer
for_,word:=rangetext{
buf.Write(word)
}
returnbuf.Bytes()
}
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">