ReanGD / LearningEnglish

Опробирование подхода для изучения английского языка
Apache License 2.0
44 stars 18 forks source link

Не допускать повторного появления слов за один урок. #53

Closed maks-a closed 11 years ago

ReanGD commented 12 years ago

Вы вероятно что-то перепутали. Выбор слов реализован так, что они повторятся не должны до тех пор, пока не кончатся доступные для изучения слова. В начале каждого урока заполняется массив - доступными для изучения словами, из которого вынимаются слова для изучения с удалением, как только массив опустел, он заполняется вновь, вот на этом этапе они и начнут повторятся. Собственно исходник. Т.е. повторение говорит о том, что либо у вас словарь очень маленький, либо кол-во одновременно изучаемых слов в настройках - очень мало.

maks-a commented 12 years ago

Странно, но словарь у меня чуть больше 2000 слов, кол-во изучаемых одновременно 50 (по умолчанию).

maks-a commented 12 years ago

В вашем предыдущем сообщении, в предложении "Собственно исходник." слово "исходник" выглядит как ссылка (синий, подчеркивается при наведении), но при клике ничего не происходит.

maks-a commented 12 years ago

По поводу повторения слов в уроке - это произошло совершенно точно в двух уроках подряд, причем в последнем одно слово повторилось не 1, а 2 раза. Как бы сюда прикрепить файлы? Может мои текущие config.json, dict.json и statistic.json могли бы помоч воспроизвести баг.

ReanGD commented 12 years ago

Что-то ссылка не работает, вот явная ссылка на исходник: "https://github.com/ReanGD/LearningEnglish/blob/master/lesson_words.py" Может выложите куда-нибудь сюда: "http://narod.yandex.ru/" или любой другой общедоступный файлообменник, а тут дадите ссылку? github похоже не позволяет прикреплять файлы.

ReanGD commented 12 years ago

Я собственно нашел там ошибку, там в защите от зацикливания - происходит выход из цикла без удаления слова из массива. Но это как-то невероятно, что вы постоянно в ту ветку попадаете. Поправлю сегодня после работы, может поможет.

maks-a commented 12 years ago

statistics - http://pastebin.com/dwdgk60p config - http://pastebin.com/s6hucPpR dict - http://pastebin.com/phkfJ7Zy

maks-a commented 12 years ago

Не совсем понятна логика внутри цикла

        while True:
            wrd = random.choice(self.remaining_words)
            it_cnt += 1
            if it_cnt > 1000:
                break
            if wrd.get_rating() > random.random()*max_rating: #<- Зачем это нужно?
                self.remaining_words.remove(wrd)
                break

В первой строке цикла уже достается случайное слово из списка оставшихся, для чего нужна последующее сравнение со случайным рейтингом? По-моему, достаточно просто вынимать певрое случайное слово.

ReanGD commented 12 years ago

В массив выбираются все изучаемые слова + все изученные. Выбирать из них просто случайным образом - не пойдет, т.к. одинаково часто будут появляться изученные слова и только начатые, те слова, где я в 90% случаев отвечал правильно и те, где в 90% случаев ошибался и т.п. Я ввел рейтинг, чем он выше, тем чаще слово должно показываться пользователю, при этом с неким элементом случайности. В цикле - реализация этой идеи. Выбираем случайное слово и его рейтинг сравниваем со случайным сгенерированным числом в диапазоне от 0 до максимального рейтинга среди оставшихся. Очевидно что чем выше рейтинг у слова, тем он чаще окажется больше случайного числа.

maks-a commented 12 years ago

похоже я не тот файл статистики прикрепил, вот правильный - http://pastebin.com/jY4Xr0NV

ReanGD commented 12 years ago

Создал тест, который честно прогоняет 500 уроков, по 50 слов в каждом, все создавал честно, как в приложении, с перезагрузкой словаря и т.п. Ни разу, ни одно слово не повторилось в одном уроке дважды. Я прям не знаю, как это у вас получается. Единственное что мог сделать - закрыл единственную, что нашел, но очень маловероятную ошибку в этом механизме. Надеюсь поможет.

maks-a commented 12 years ago

Хорошо, спасибо.

ghost commented 12 years ago

У меня как-то тоже 2 раза подряд вывело одно и тоже слово..

ReanGD commented 11 years ago

Нашел еще одно место, которое может приводить к повторению слов в уроке. Поправил. У кого есть возможность, скачайте последнюю версию из главной ветке и потестируйте.

ReanGD commented 11 years ago

За два месяца ни одного обращения, что ж считаем, что ошибка исправлена