-
Notifications
You must be signed in to change notification settings - Fork 4
/
length.go
39 lines (29 loc) · 870 Bytes
/
length.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
package feature
import "fmt"
type KanjiLengthFeatureCalculator struct {
Manager KanjiFeatureManager
}
func (fc KanjiLengthFeatureCalculator) Score(pieceOfName PartOfNameCharacters, fullNameLength int) (float64, error) {
score := 0.0
offset := 0
if !pieceOfName.IsLastName() {
offset = fullNameLength - pieceOfName.Length()
}
for i, c := range pieceOfName.Slice() {
ci := i + offset
mask, err := fc.Manager.LengthMask(fullNameLength, ci)
if err != nil {
return 0.0, fmt.Errorf("failed order score: %w", err)
}
index, err := fc.Manager.SelectLengthFeaturePosition(pieceOfName)
if err != nil {
return 0.0, fmt.Errorf("failed order score: %w", err)
}
v, err := fc.Manager.Get(Character(c)).GetLengthValue(index, mask)
if err != nil {
return 0.0, fmt.Errorf("failed order score: %w", err)
}
score += v
}
return score, nil
}