Некоторая информация о том, что происходит:
Мы обрабатываем адреса в стандартизированные формы, это код для получения адресов, оцениваемых по количеству найденных компонентов, и последующего их пересчета с использованием алгоритма Левенштейна для похожих почтовых индексов.
Баллы - это количество компонентов, найденных в этом адресе, деленное на пропущенное число, чтобы получить соотношение
Входные данные ScoreDict - это словарь, содержащий массивы массивов. Первый набор массивов - это оценки, поэтому существует 12 массивов, потому что в этом файле 12 оценок (он корректируется по файлам). Тем не менее, есть много адресов, которые соответствуют этому баллу в своих собственных отдельных массивах, хранящихся в нем. Не спрашивайте меня, почему я так поступаю, мой мозг мертв
Код правильно проходит через каждый массив партитур, и каждый из них правильно заполнен уникальными элементами, из которых он состоит. Он не является коротким ни на одну сумму, ничего не дублируется, я проверил
Когда мы достигли значения -1 (это относится к любому адресу, который не соответствует какому-либо правилу, поэтому мы не можем используйте свой почтовый индекс, чтобы найти компоненты, чтобы не было найдено ни одного компонента) l oop специально ТОЛЬКО ДАЖЕ КАЖДЫЙ ДРУГОЙ АДРЕС В ЭТОМ МНОЖЕСТВЕ SCORE
Он не делает этого с любым другим массивом партитур, я проверил
Я пытался изменить номер на что-то еще, например 99, та же проблема, за исключением одного LESS-адреса, была удалена, а остальные остались с исходным ошибочным значением 99
Я схожу с ума, может кто-нибудь найдите, где в этом l oop что-то может пойти не так, чтобы заставить его выполнять только все остальные строки. Счетчик индекса строки и s c проходят в правильном порядке и не пропускают. Я проверил
Извините, это не профессионально, я был на этом l oop в течение 5 часов
Rescore: function Rescore(scoreDict) {
let tempInc = 0;
//Loop through all scores stored in scoreDict
for (var line in scoreDict) {
let addUpdate = "";
//Loop through each line stored by score
for (var sc in scoreDict[line.toString()]) {
console.log(scoreDict[line.toString()].length);
let possCodes = new Array();
const curLine = scoreDict[line.toString()][sc];
console.log(sc);
const curScore = curLine[1].split(',')[curLine[1].split(',').length-1];
switch (true) {
case curScore == -1:
let postCode = (new RegExp('([A-PR-UWYZ][A-HK-Y]?[0-9][A-Z0-9]?[ ]?[0-9][ABD-HJLNP-UW-Z]{2})', 'i')).exec(curLine[1].replace(/\\n/g, ','));
let areaCode;
//if (curLine.split(',')[curLine.split(',').length-2].includes("REFERENCE")) {
if ((postCode = (new RegExp('(([A-Z][A-Z]?[0-9][A-Z0-9]?(?=[ ]?[0-9][A-Z]{2}))|[0-9]{5})', 'i').exec(postCode))) !== null) {
for (const code in Object.keys(addProper)) {
leven.LoadWords(postCode[0], Object.keys(addProper)[code]);
if (leven.distance < 2) {
//Weight will have adjustment algorithms based on other factors
let weight = 1;
//Add all codes that are close to the same to a temp array
possCodes.push(postCode.input.replace(postCode[0], Object.keys(addProper)[code]).split(',')[0] + "(|W|)" + (leven.distance/weight));
}
}
let highScore = 0;
let candidates = new Array();
//Use the component script from cityprocess to rescore
for (var i=0;i<possCodes.length;i++) {
postValid.add([curLine[1].split(',').slice(0,curLine[1].split(',').length-2) + '(|S|)' + possCodes[i].split("(|W|)")[0]]);
if (postValid.addChunk[0].split('(|S|)')[postValid.addChunk[0].split('(|S|)').length-1] > highScore) {
candidates = new Array();
highScore = postValid.addChunk[0].split('(|S|)')[postValid.addChunk[0].split('(|S|)').length-1];
candidates.push(postValid.addChunk[0]);
} else if (postValid.addChunk[0].split('(|S|)')[postValid.addChunk[0].split('(|S|)').length-1] == highScore) {
candidates.push(postValid.addChunk[0]);
}
}
score.Rescore(curLine, sc, candidates[0]);
}
//} else if (curLine.split(',')[curLine.split(',').length-2].contains("AREA")) {
// leven.LoadWords();
//}
break;
case curScore > 0:
//console.log("That's a pretty good score mate");
break;
}
//console.log(line + ": " + scoreDict[line].length);
}
}
console.log(tempInc)
score.ScoreWrite(score.scoreDict);
}