26 lines
1.3 KiB
JavaScript
26 lines
1.3 KiB
JavaScript
const fs=require('fs'), vm=require('vm');
|
|||
|
|
const B=require('./bible-lexicon.js');
|
||
|
|
const src=fs.readFileSync('engine.js','utf8');
|
||
|
|
const sb={console};vm.createContext(sb);
|
||
|
|
vm.runInContext(src.slice(src.indexOf('const SCRIPT_NO_SPACES'), src.indexOf('function applyFixes')), sb);
|
||
|
|
const rows=require('/tmp/all-corpus.json');
|
||
|
|
|
||
|
|
for (const lang of ['fra_Latn','spa_Latn']) {
|
||
|
|
const bl=B.forLanguage(lang), fx=B.fixesFor(lang)||{};
|
||
|
|
const pairs=Object.keys(bl).map(from=>({from,to:bl[from]}));
|
||
|
|
const fpairs=Object.keys(fx).map(from=>({from,to:fx[from]}));
|
||
|
|
let n=0,tot=0; const seen={};
|
||
|
|
for (const r of rows){
|
||
|
|
const t=String((r.tr&&r.tr[lang])||''); if(!t) continue; tot++;
|
||
|
|
let out=sb.applyTable(t,pairs);
|
||
|
|
if(fpairs.length) out=sb.applyTable(out,fpairs);
|
||
|
|
if(out===t) continue; n++;
|
||
|
|
const a=t.split(/\s+/),b=out.split(/\s+/),d=[];
|
||
|
|
for(let i=0;i<Math.max(a.length,b.length);i++) if(a[i]!==b[i]) d.push((a[i]||'')+' -> '+(b[i]||''));
|
||
|
|
const k=d.join(' | '); seen[k]=(seen[k]||0)+1;
|
||
|
|
}
|
||
|
|
console.log('\n=== '+lang+' — '+tot+' real rows, '+n+' changed ('+(n/tot*100).toFixed(2)+'%) ===');
|
||
|
|
Object.entries(seen).sort((a,b)=>b[1]-a[1]).slice(0,28).forEach(([d,c])=>console.log(' '+String(c).padStart(3)+'x '+d));
|
||
|
|
if (Object.keys(seen).length>28) console.log(' … '+(Object.keys(seen).length-28)+' more distinct changes');
|
||
|
|
}
|