Я не могу выяснить, почему этот код пропускает цикл - PullRequest
0 голосов
/ 01 мая 2020

Некоторая информация о том, что происходит:

Мы обрабатываем адреса в стандартизированные формы, это код для получения адресов, оцениваемых по количеству найденных компонентов, и последующего их пересчета с использованием алгоритма Левенштейна для похожих почтовых индексов.

Баллы - это количество компонентов, найденных в этом адресе, деленное на пропущенное число, чтобы получить соотношение

Входные данные 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);
}

1 Ответ

0 голосов
/ 01 мая 2020

Проблема заключалась в том, что я вызывал l oop в массиве, который я редактировал, поэтому, когда каждый элемент был удален из массива (переписан и перемещен в отдельный массив), он стал короче этим элементом, что привело к проблема в том, что когда первый элемент был перерисован и удален, а затем мы перешли ко второму индексу, который был теперь третьим элементом, потому что все сместилось вверх на 1 индекс

Я исправил это, просто введя пустой массив для каждого удаленного элемента все сохранял свой индекс, а массив сохранял свою длину, а затем очищал пустые значения в коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...