forked from GitHub/dbot
Check all groupings of words for corrections; makes multi-word corrections behave properly.
This commit is contained in:
parent
ad6b354daf
commit
4e2d4017d0
@ -3,23 +3,25 @@ var spelling = function(dbot) {
|
||||
var last = {};
|
||||
|
||||
var correct = function (data, correction, candidate, output_callback) {
|
||||
var candidates = last[data.channel][candidate].split(' ');
|
||||
var rawCandidates = last[data.channel][candidate].split(' ').allGroupings();
|
||||
var candidates = [];
|
||||
for(var i=0;i<rawCandidates.length;i++) {
|
||||
candidates.push(rawCandidates[i].join(' '));
|
||||
}
|
||||
var winner = false;
|
||||
var winnerDistance = Infinity;
|
||||
|
||||
for(var i=0;i<candidates.length;i++) {
|
||||
var distance = String.prototype.distance(correction, candidates[i]);
|
||||
if(distance < winnerDistance) {
|
||||
winner = i;
|
||||
winner = candidates[i];
|
||||
winnerDistance = distance;
|
||||
}
|
||||
}
|
||||
|
||||
if(winnerDistance < 7) {
|
||||
if(winner !== correction) {
|
||||
candidates[winner] = correction;
|
||||
var fix = candidates.join(' ');
|
||||
last[data.channel][candidate] = fix;
|
||||
var fix = last[data.channel][candidate].replace(winner, correction);
|
||||
if (/^.ACTION/.test(fix)) {
|
||||
fix = fix.replace(/^.ACTION/, '/me');
|
||||
}
|
||||
|
13
snippets.js
13
snippets.js
@ -27,6 +27,19 @@ Array.prototype.include = function(value) {
|
||||
return false;
|
||||
};
|
||||
|
||||
Array.prototype.allGroupings = function() {
|
||||
if (this.length == 0) {
|
||||
return []; /* short-circuit the empty-array case */
|
||||
}
|
||||
var groupings = [];
|
||||
for(var n=1;n<=this.length;n++) {
|
||||
for(var i=0;i<(this.length-(n-1));i++) {
|
||||
groupings.push(this.slice(i, i+n));
|
||||
}
|
||||
}
|
||||
return groupings;
|
||||
}
|
||||
|
||||
/*** String ***/
|
||||
|
||||
String.prototype.valMatch = function(regex, expLength) {
|
||||
|
Loading…
Reference in New Issue
Block a user