26.12.2013, 17:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
MrBoriska,
может для примера что на входе что на выходе должно быть?
|
|
26.12.2013, 22:02
|
Интересующийся
|
|
Регистрация: 25.12.2013
Сообщений: 12
|
|
обычная строка(берете любой пост хоть от сюда и подставляете). Как сейчас мы пишем посты вот такого типа и у меня. Код просто должен генерировать слова которые повторяются в тексте, а число повторений и коэффициент указывает юзер,
а так же он указывает через запятую слова, которые генератор не должен учитывать, но у меня, именно вот этот пункт почему то не работает.
Может там где функция grep(), что то не то, а то я не понимаю вообще зачем она, точнее понимаю зачем, но не понимаю как она так это делает(там подписано что).
|
|
26.12.2013, 22:26
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
MrBoriska,
ваш код разбирать видимо охотников мало, легче написать новый еслибы вы чётко описали свой генератор ... что на входе что на выходе я попрежнему незнаю несмотря на ваши обьяснения
|
|
26.12.2013, 23:51
|
Интересующийся
|
|
Регистрация: 25.12.2013
Сообщений: 12
|
|
На выходе должна быть строка, состоящая из слов перечисленных через запятую.
На входе должно быть три переменные:
1. Строка, состоящая из набора слов, символов, пробелов и даже html тегов.
2. Число, которое означает минимальное количество символов в слове.
3. Число, означающее минимальное количество повторений слова в тексте.
4. Слова, перечисленные через запятую, которые не следует учитывать при выводе результата.
Программа должна работать примерно по такому алгоритму.
1. Из переменной 1 выкидываются спец. символы и html теги, остается только сам текст и пробелы между словами. Из полученного текста формируется массив, элементы которого - это слова, отделенные друг от друга пробелом в тексте.
2. В массиве ищутся совпадающие элементы и из этих элементов, количество совпадений которых больше или равно переменной 3 формируется новый массив.(заметье с учетом введенного в переменной 4 коэффициента совпадения)
3. Из полученного массива выкидываются элементы, количество букв которых меньше чем указано в переменной 2, а так же элементы которые указаны в переменной 4 через запятую.
4. Из полученного массива формируем строку, в которой элементы этого массива будут перечислены через запятую.
Так понятно? Да и вроде код мой тоже относительно понятный, кроме двух последних функций.
Последний раз редактировалось MrBoriska, 26.12.2013 в 23:55.
|
|
26.12.2013, 23:59
|
Интересующийся
|
|
Регистрация: 28.02.2013
Сообщений: 13
|
|
мне конечно тоже лень, разбираться что как работает,
но вот в строке 27, вы присваиваете DeleteWord = false,
в while (строка 30), в условии написано, что оно может выполниться
если DeleteWord === true, но обрести значение труэ DeleteWord
может только внутри цикла,
выходит, что цикл никогда не запустится.
|
|
27.12.2013, 00:19
|
Интересующийся
|
|
Регистрация: 28.02.2013
Сообщений: 13
|
|
функция countKeywords () большая,
раздели ее на несколько функций поменьше,
и каждую протестируй.
|
|
27.12.2013, 00:54
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
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,['Число','слов']) )
|
|
27.12.2013, 00:54
|
Интересующийся
|
|
Регистрация: 25.12.2013
Сообщений: 12
|
|
finestra,
я уже все протестировал и сразу сказал где код стопорится!
Меня это тоже смутило, но даже если изменить на false результат тот же.
|
|
27.12.2013, 00:56
|
Интересующийся
|
|
Регистрация: 25.12.2013
Сообщений: 12
|
|
рони,
Огромное спасибо! Буду тестировать и отпишусь о результатах.
|
|
27.12.2013, 18:06
|
Интересующийся
|
|
Регистрация: 25.12.2013
Сообщений: 12
|
|
Код работает великолепно, но нету коэффициента совпадения.
Тоесть это еще один параметр, который определяет когда словам совпадать, а когда нет. Определяется он числом с плавающей точкой, От 0 и до 1, где 0 это когда все слова всегда будут совпадать, а когда 1 то только при точном совпадении. Ну допустим при 1 будут равны keyword и keyword, а при 0.8 будут равны keyword и keywords. сделать можно через match(),(так было сделано в старом коде)
|
|
|
|