-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathLanguageResult.js
62 lines (56 loc) · 1.57 KB
/
LanguageResult.js
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
/*
Copyright 2023 Nito T.M.
License https://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
Author Nito T.M. (https://github.com/nitotm)
Package npmjs.com/package/eld
*/
import { avgScore } from './avgScore.js'
export class LanguageResult {
/**
* Creates an instance of LanguageResult.
*
* @param {string} language
* @param {Object} results
* @param {number} numNgrams
* @param {Object} langCodes
* @memberof LanguageResult
*/
constructor (language, results, numNgrams, langCodes) {
this.language = language
this.getScores = () => getScores(results, langCodes) // returns object
this.isReliable = () => isReliable(results, numNgrams, language) // returns boolean
}
}
/**
* @param {object} results
* @param {number} numNgrams
* @param {string} language
* @returns {boolean}
*/
function isReliable (results, numNgrams, language) {
if (!results.length || numNgrams < 3) {
return false
}
const nextScore = results.length > 1 ? results[1][0] : 0
// A minimum of a 24% per ngram score from average
return !(avgScore[language] * 0.24 > results[0][1] / numNgrams || 0.01 >
Math.abs(results[0][1] - nextScore))
}
/**
* Converts internal multi-array results, with integer language codes, to final object with ISO 639-1 codes
* @param {Object} results
* @param {Object} langCodes
* @returns {Object}
*/
function getScores (results, langCodes) {
let scores = {}
let key
for (key in results) {
let score = results[key][1]
if (score === 0) {
break
}
scores[langCodes[results[key][0]]] = score
}
return scores
}