Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Написал генератор тегов не могу найти ошибку (https://javascript.ru/forum/misc/43904-napisal-generator-tegov-ne-mogu-najjti-oshibku.html)

рони 26.12.2013 17:45

MrBoriska,
может для примера что на входе что на выходе должно быть?

MrBoriska 26.12.2013 22:02

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

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

рони 26.12.2013 22:26

MrBoriska,
ваш код разбирать видимо охотников мало, легче написать новый еслибы вы чётко описали свой генератор ... что на входе что на выходе я попрежнему незнаю несмотря на ваши обьяснения

MrBoriska 26.12.2013 23:51

На выходе должна быть строка, состоящая из слов перечисленных через запятую.
На входе должно быть три переменные:
1. Строка, состоящая из набора слов, символов, пробелов и даже html тегов.
2. Число, которое означает минимальное количество символов в слове.
3. Число, означающее минимальное количество повторений слова в тексте.
4. Слова, перечисленные через запятую, которые не следует учитывать при выводе результата.

Программа должна работать примерно по такому алгоритму.
1. Из переменной 1 выкидываются спец. символы и html теги, остается только сам текст и пробелы между словами. Из полученного текста формируется массив, элементы которого - это слова, отделенные друг от друга пробелом в тексте.
2. В массиве ищутся совпадающие элементы и из этих элементов, количество совпадений которых больше или равно переменной 3 формируется новый массив.(заметье с учетом введенного в переменной 4 коэффициента совпадения)
3. Из полученного массива выкидываются элементы, количество букв которых меньше чем указано в переменной 2, а так же элементы которые указаны в переменной 4 через запятую.
4. Из полученного массива формируем строку, в которой элементы этого массива будут перечислены через запятую.

Так понятно? Да и вроде код мой тоже относительно понятный, кроме двух последних функций.

finestra 26.12.2013 23:59

мне конечно тоже лень, разбираться что как работает,
но вот в строке 27, вы присваиваете DeleteWord = false,
в while (строка 30), в условии написано, что оно может выполниться
если DeleteWord === true, но обрести значение труэ DeleteWord
может только внутри цикла,
выходит, что цикл никогда не запустится.

finestra 27.12.2013 00:19

функция countKeywords () большая,
раздели ее на несколько функций поменьше,
и каждую протестируй.

рони 27.12.2013 00:54

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,['Число','слов']) )

MrBoriska 27.12.2013 00:54

finestra,
я уже все протестировал и сразу сказал где код стопорится!

Меня это тоже смутило, но даже если изменить на false результат тот же.

MrBoriska 27.12.2013 00:56

рони,
Огромное спасибо! Буду тестировать и отпишусь о результатах.

MrBoriska 27.12.2013 18:06

Код работает великолепно, но нету коэффициента совпадения.
Тоесть это еще один параметр, который определяет когда словам совпадать, а когда нет. Определяется он числом с плавающей точкой, От 0 и до 1, где 0 это когда все слова всегда будут совпадать, а когда 1 то только при точном совпадении. Ну допустим при 1 будут равны keyword и keyword, а при 0.8 будут равны keyword и keywords. сделать можно через match(),(так было сделано в старом коде)


Часовой пояс GMT +3, время: 17:08.