embedSync method
The vector for text, synchronously.
Implementation
Float32List embedSync(String text) {
final v = Float32List(dimensions);
void add(String feature, double weight) {
final h = _fnv1a(feature);
final sign = (h & 0x80000000) == 0 ? 1.0 : -1.0;
v[h % dimensions] += sign * weight;
}
final words = [
for (final m in _word.allMatches(text.toLowerCase())) m.group(0)!,
];
for (var i = 0; i < words.length; i++) {
final w = words[i];
add('w:$w', 1);
if (i + 1 < words.length) add('b:$w ${words[i + 1]}', 0.5);
final padded = '^$w\$';
for (var j = 0; j + 3 <= padded.length; j++) {
add('c:${padded.substring(j, j + 3)}', 0.25);
}
}
var norm = 0.0;
for (final x in v) {
norm += x * x;
}
if (norm > 0) {
final inv = 1 / sqrt(norm);
for (var i = 0; i < v.length; i++) {
v[i] *= inv;
}
}
return v;
}