-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathtools.go
107 lines (95 loc) · 1.9 KB
/
tools.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package pinyingo
import (
"encoding/json"
"log"
"os"
"path"
"regexp"
"strings"
"github.com/yanyiwu/gojieba"
)
var (
STYLE_NORMAL = 1
STYLE_TONE = 2
STYLE_INITIALS = 3
STYLE_FIRST_LETTER = 4
USE_SEGMENT = true
NO_SEGMENT = false
use_hmm = true
DICT_DIR = path.Join(os.Getenv("GOPATH"), "src/github.com/struCoder/Go-pinyin/dict")
DICT_PHRASES = path.Join(DICT_DIR, "phrases-dict")
)
var phrasesDict map[string]string
var reg *regexp.Regexp
var INITIALS []string = strings.Split("b,p,m,f,d,t,n,l,g,k,h,j,q,x,r,zh,ch,sh,z,c,s", ",")
var keyString string
var jieba *gojieba.Jieba
var sympolMap = map[string]string{
"ā": "a1",
"á": "a2",
"ǎ": "a3",
"à": "a4",
"ē": "e1",
"é": "e2",
"ě": "e3",
"è": "e4",
"ō": "o1",
"ó": "o2",
"ǒ": "o3",
"ò": "o4",
"ī": "i1",
"í": "i2",
"ǐ": "i3",
"ì": "i4",
"ū": "u1",
"ú": "u2",
"ǔ": "u3",
"ù": "u4",
"ü": "v0",
"ǘ": "v2",
"ǚ": "v3",
"ǜ": "v4",
"ń": "n2",
"ň": "n3",
"": "m2",
}
func init() {
keyString = getMapKeys()
reg = regexp.MustCompile("([" + keyString + "])")
//初始化时将gojieba实例化到内存
jieba = gojieba.NewJieba()
//初始化多音字到内存
initPhrases()
}
func getMapKeys() string {
keyString := ""
for key, _ := range sympolMap {
keyString += key
}
return keyString
}
func normalStr(str string) string {
findRet := reg.FindString(str)
if findRet == "" {
return str
}
return strings.Replace(str, findRet, string([]byte(sympolMap[findRet])[0]), -1)
}
func firstLetter(str string) string {
firstLetter := string(str[0])
if sympolMap[str] != "" {
firstLetter = string(sympolMap[str][0])
}
return firstLetter
}
func initPhrases() {
f, err := os.Open(DICT_PHRASES)
defer f.Close()
if err != nil {
log.Fatal(err)
}
decoder := json.NewDecoder(f)
if err := decoder.Decode(&phrasesDict); err != nil {
log.Fatal(err)
}
}