MrBoriska,
может для примера что на входе что на выходе должно быть? |
обычная строка(берете любой пост хоть от сюда и подставляете). Как сейчас мы пишем посты вот такого типа и у меня. Код просто должен генерировать слова которые повторяются в тексте, а число повторений и коэффициент указывает юзер,
а так же он указывает через запятую слова, которые генератор не должен учитывать, но у меня, именно вот этот пункт почему то не работает. Может там где функция grep(), что то не то, а то я не понимаю вообще зачем она, точнее понимаю зачем, но не понимаю как она так это делает(там подписано что). |
MrBoriska,
ваш код разбирать видимо охотников мало, легче написать новый еслибы вы чётко описали свой генератор ... что на входе что на выходе я попрежнему незнаю несмотря на ваши обьяснения |
На выходе должна быть строка, состоящая из слов перечисленных через запятую.
На входе должно быть три переменные: 1. Строка, состоящая из набора слов, символов, пробелов и даже html тегов. 2. Число, которое означает минимальное количество символов в слове. 3. Число, означающее минимальное количество повторений слова в тексте. 4. Слова, перечисленные через запятую, которые не следует учитывать при выводе результата. Программа должна работать примерно по такому алгоритму. 1. Из переменной 1 выкидываются спец. символы и html теги, остается только сам текст и пробелы между словами. Из полученного текста формируется массив, элементы которого - это слова, отделенные друг от друга пробелом в тексте. 2. В массиве ищутся совпадающие элементы и из этих элементов, количество совпадений которых больше или равно переменной 3 формируется новый массив.(заметье с учетом введенного в переменной 4 коэффициента совпадения) 3. Из полученного массива выкидываются элементы, количество букв которых меньше чем указано в переменной 2, а так же элементы которые указаны в переменной 4 через запятую. 4. Из полученного массива формируем строку, в которой элементы этого массива будут перечислены через запятую. Так понятно? Да и вроде код мой тоже относительно понятный, кроме двух последних функций. |
мне конечно тоже лень, разбираться что как работает,
но вот в строке 27, вы присваиваете DeleteWord = false, в while (строка 30), в условии написано, что оно может выполниться если DeleteWord === true, но обрести значение труэ DeleteWord может только внутри цикла, выходит, что цикл никогда не запустится. |
функция countKeywords () большая,
раздели ее на несколько функций поменьше, и каждую протестируй. |
MrBoriska,
function gen(str, len, repeat,tabu) { var obj_tabu = {}; for (var i=0; i<tabu.length; i++) {obj_tabu[tabu[i]]=!0};//сформировали обьект из запретных слов str = str.replace(/<[^>]*>/g, ' ');//выкусили теги str = str.replace(/[^a-zа-яё\s]/gi, ' '); //убрали небуквы str = str.split(/\s+/) ;//сформировали массив слов из строки var obj_output = {}; for (var i=0; i<str.length; i++) { var word = str[i]; if(word.length >= len && !obj_tabu[word]) obj_output[word]=(obj_output[word]||0)+1; } // сформировали обьект из разрешённых слов и нужной длины var output = []; for(var word in obj_output) if (obj_output[word] >= repeat) output.push(word);//отобрали слова с нужным повторением return output } var str = 'На выходе должна быть строка, состоящая из слов перечисленных через запятую..'+ 'На входе должно быть три переменные: '+ '1. Строка, состоящая из набора слов, символов, пробелов и даже html тегов. '+ '2. Число, которое означает минимальное количество символов в слове. '+ '3. Число, означающее минимальное количество повторений слова в тексте. '+ '4. Слова, перечисленные через запятую, которые не следует учитывать при выводе результата.' alert(gen(str, 3, 2,['Число','слов']) ) |
finestra,
я уже все протестировал и сразу сказал где код стопорится! Меня это тоже смутило, но даже если изменить на false результат тот же. |
рони,
Огромное спасибо! Буду тестировать и отпишусь о результатах. |
Код работает великолепно, но нету коэффициента совпадения.
Тоесть это еще один параметр, который определяет когда словам совпадать, а когда нет. Определяется он числом с плавающей точкой, От 0 и до 1, где 0 это когда все слова всегда будут совпадать, а когда 1 то только при точном совпадении. Ну допустим при 1 будут равны keyword и keyword, а при 0.8 будут равны keyword и keywords. сделать можно через match(),(так было сделано в старом коде) |
Часовой пояс GMT +3, время: 17:08. |