Поиск в тексте слов, отсутствующих в словаре

Статус
Закрыто для дальнейших ответов.

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
Не могу разобраться, почему объявленная функция в одном случае работает, а в другом - нет. Помогите пожалуйста. Беру текст, включающий в себя разные и несколько повторяющихся слов. Создаю из них массив (словарь), в котором слова не должны повторяться. В процессе создания словаря, объявленная в начале скрипта функция, проверяющая наличие элемента в массиве, исправно работает. Далее этот же самый текст исследую с помощью этой же функции, но она уже не работает и ВСЕ слова объявляет отсутствующими в словаре, который только что из них был создан. Где ошибка?
Код:
//Объявляем функцию, проверяющую наличие элемента в массиве:
Array.prototype.isElement = function (item) {

    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return true;
        };
    };
    return false;
}

myDoc = app.activeDocument;
var arr =[]; // массив, в который собираем словарь
myAbsentColorSample = [100, 0, 100, 0]; //  цвет для отсутствующих в словаре слов

try{
    myColor = myDoc.colors.item("myAbsentColor");
    myName = myColor.name;
    }
catch (myError) {
    myColor = myDoc.colors.add ({name:"myAbsentColor", model:ColorModel.process, space:ColorSpace.CMYK, colorValue:myAbsentColorSample});
    }
// Создаем словарь из тестового текста, включающего повторяющиеся слова:
app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "\\<[\\l\\u]+\\>";
myFoundItems = myDoc.findGrep();

if(myFoundItems.length != 0)
    {
        for (var i=0; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myWord1 = myFoundItem.contents
                if (arr.isElement(myWord1.toLowerCase())) {                   
                    continue;
                    }
        arr.push(myWord1.toLowerCase());     
          }
      }

alert(arr); // Убеждаемся, что функция "isElement" исправно работает
var myPage = myDoc.pages[0];
var myTextFrame = myPage.textFrames[0];
//
for (j=0; j <= myTextFrame.words.length-1; j++){
    var myWord = myTextFrame.words[j];
   if (arr.isElement(myWord)) {continue;}
     alert(myWord.contents); // А здесь она почему-то перестает работать?
       myWord.contents.fillColor = "myAbsentColor"; // И почему-то не окрашиваются слова, которые, якобы отсутствуют в словаре?
        }
 
В коде множество нестыковок, часть из них очевидна.
  1. push(myWord1.toLowerCase());
  2. if (arr.isElement(myWord)) {continue;}
  3. myWord.contents.fillColor = "myAbsentColor";
При этом очевидное решение находится в районе [2]
if (arr.isElement(myWord.contents.toLowerCase())) {continue;}

и [3]
myWord.fillColor = "myAbsentColor";
 
В коде множество нестыковок, часть из них очевидна.
  1. push(myWord1.toLowerCase());
  2. if (arr.isElement(myWord)) {continue;}
  3. myWord.contents.fillColor = "myAbsentColor";
При этом очевидное решение находится в районе [2]
if (arr.isElement(myWord.contents.toLowerCase())) {continue;}

и [3]
myWord.fillColor = "myAbsentColor";
Да, спасибо, уже нашел, функция заработала, а вот с цветом пока не выходит. И попутно встала еще одна задача, как сделать, чтобы в myWord не попадали слова со знаками препинания, стоящими с ними без пробела?
 
С цветом тоже наладилось :), осталась только одна проблема - знаки препинания *[[
 
В этом помогут регулярные выражения javascript
Код:
var testString ='тестсхламом,';
testString = testString.replace(/[.,!?;]*$/, '');
alert (testString);
А не могли бы Вы разъяснить содержимое круглых скобок (за исключением содержимого квадратных). И как поместить в перечень "хлама" дискреционный перенос?
 
Статус
Закрыто для дальнейших ответов.