Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
c981a071e9
commit
d8bf09ea9f
104
js/ml/text.js
Normal file
104
js/ml/text.js
Normal file
|
@ -0,0 +1,104 @@
|
|||
/**
|
||||
** ==============================
|
||||
** O O O OOOO
|
||||
** O O O O O O
|
||||
** O O O O O O
|
||||
** OOOO OOOO O OOO OOOO
|
||||
** O O O O O O O
|
||||
** O O O O O O O
|
||||
** OOOO OOOO O O OOOO
|
||||
** ==============================
|
||||
** Dr. Stefan Bosse http://www.bsslab.de
|
||||
**
|
||||
** COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED
|
||||
** BY THE AUTHOR(S).
|
||||
** THIS SOURCE CODE MAY NOT BE COPIED, EXTRACTED,
|
||||
** MODIFIED, OR OTHERWISE USED IN A CONTEXT
|
||||
** OUTSIDE OF THE SOFTWARE SYSTEM.
|
||||
**
|
||||
** $AUTHORS: Stefan Bosse
|
||||
** $INITIAL: (C) 2006-2019 BSSLAB
|
||||
** $CREATED: 5-3-19 by sbosse.
|
||||
** $VERSION: 1.1.1
|
||||
**
|
||||
** $INFO:
|
||||
**
|
||||
** JavaScript AIOS Machine Learning API: Text analysis
|
||||
**
|
||||
** Portable model
|
||||
**
|
||||
** $ENDOFINFO
|
||||
*/
|
||||
'use strict';
|
||||
var Io = Require('com/io');
|
||||
var Comp = Require('com/compat');
|
||||
var current=none;
|
||||
var Aios=none;
|
||||
|
||||
function similarity(s1, s2) {
|
||||
var longer = s1;
|
||||
var shorter = s2;
|
||||
if (s1.length < s2.length) {
|
||||
longer = s2;
|
||||
shorter = s1;
|
||||
}
|
||||
var longerLength = longer.length;
|
||||
if (longerLength == 0) {
|
||||
return 1.0;
|
||||
}
|
||||
return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength);
|
||||
}
|
||||
function editDistance(s1, s2) {
|
||||
s1 = s1.toLowerCase();
|
||||
s2 = s2.toLowerCase();
|
||||
|
||||
var costs = new Array();
|
||||
for (var i = 0; i <= s1.length; i++) {
|
||||
var lastValue = i;
|
||||
for (var j = 0; j <= s2.length; j++) {
|
||||
if (i == 0)
|
||||
costs[j] = j;
|
||||
else {
|
||||
if (j > 0) {
|
||||
var newValue = costs[j - 1];
|
||||
if (s1.charAt(i - 1) != s2.charAt(j - 1))
|
||||
newValue = Math.min(Math.min(newValue, lastValue),
|
||||
costs[j]) + 1;
|
||||
costs[j - 1] = lastValue;
|
||||
lastValue = newValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i > 0)
|
||||
costs[s2.length] = lastValue;
|
||||
}
|
||||
return costs[s2.length];
|
||||
}
|
||||
|
||||
|
||||
// Create a model
|
||||
function create(strings,options) {
|
||||
return {
|
||||
data:strings
|
||||
}
|
||||
}
|
||||
|
||||
// Classify one sample; return best matching string
|
||||
function classify(model,sample) {
|
||||
var matches = model.data.map(function (h) {
|
||||
return {
|
||||
match:similarity(h,sample),
|
||||
string:h
|
||||
}
|
||||
}).sort(function (a,b) {
|
||||
if (a.match < b.match) return 1; else return -1;
|
||||
});
|
||||
return matches[0];
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
classify:classify,
|
||||
create:create,
|
||||
similarity:similarity,
|
||||
current:function (module) { current=module.current; Aios=module;}
|
||||
}
|
Loading…
Reference in New Issue
Block a user