tokenize 将文本拆分为简单的词汇集合,用于词汇相似度计算。
(text string, minLen int)
| 178 | |
| 179 | // tokenize 将文本拆分为简单的词汇集合,用于词汇相似度计算。 |
| 180 | func tokenize(text string, minLen int) map[string]bool { |
| 181 | text = strings.ToLower(text) |
| 182 | var tokens []string |
| 183 | var cur strings.Builder |
| 184 | |
| 185 | flush := func() { |
| 186 | if cur.Len() >= minLen { |
| 187 | tokens = append(tokens, cur.String()) |
| 188 | } |
| 189 | cur.Reset() |
| 190 | } |
| 191 | |
| 192 | for _, r := range text { |
| 193 | if unicode.IsLetter(r) || unicode.IsDigit(r) { |
| 194 | cur.WriteRune(r) |
| 195 | } else { |
| 196 | flush() |
| 197 | } |
| 198 | } |
| 199 | flush() |
| 200 | |
| 201 | result := make(map[string]bool, len(tokens)) |
| 202 | for _, t := range tokens { |
| 203 | result[t] = true |
| 204 | } |
| 205 | return result |
| 206 | } |