2013-05-05 1 views
0

У меня есть список текстовых форм, полученных из текста. Этот список включает в себя собственные имена (например, Джон, Мэри, Эдинбург). В другом поле у ​​меня есть список собственных имен. Я хочу получить список всех форм слова без собственных имен.Как удалить слова из одного списка из другого списка (Установить операцию)

я на самом деле нужно allWordForms MINUS properNames

Массивы могут быть использованы как наборы. Но мы имеем только заданные операции Union и Intersect.

Сценарий до сих пор

on mouseUp 
    put field "allWordForms" into tWordForms 
    split tWordForms by return 
    -- tWordForms is now an array 

    put field "properNames" into tProperNames 
    split tProperNames by return 
    -- tProperNames is now an array 

    -- ..... 
    repeat 
    -- ..... 
    -- ..... 
    end repeat 

    combine tWordForms using return 

    put tWordForms into field "wordFormsWithoutProperNames" 

end mouseUp 

Как повторяющееся цикл выглядеть?

И вот пример.

поле "allWordForms" содержит

Mary 
and 
John 
came 
yesterday 
They 
want 
to 
move 
from 
Maryland 
to 
Petersbourough 

`

поле "properNames" содержит

John 
Mary 
Maryland 
Peter 
Petersbourough 

Желаемый результат должен иметь копию списка allWordForms с надлежащим имена удалены.

and 
came 
yesterday 
They 
want 
to 
move 
from 
to 

ответ

1

Это возможное решение;

on mouseUp 
    put field "allWordForms" into tWordForms 
    put field "properNames" into tProperNames 

    # replace proper names 
    repeat for each line tProperName in tProperNames 
     replace tProperName with empty in tWordForms 
    end repeat 

    # remove blank lines 
    replace LF & LF with LF in tWordForms 

    put tWordForms into field "wordFormsWithoutProperNames" 
end mouseUp 

другое решение, учитывающее вашу дополнительную информацию;

on mouseUp 
    put field "allWordForms" & LF into tWordForms 
    put field "properNames" into tProperNames 

    repeat for each line tProperName in tProperNames 
     replace tProperName & LF with empty in tWordForms 
    end repeat 

    put tWordForms into field "wordFormsWithoutProperNames" 
end mouseUp 
+0

я добавил пример к вопросу. Ваше решение дает в результате следующих строк (включая пустой в начале) 'и пришло вчера Они хотят чтобы движение от земли в sbourough'. Слова «Maryland» и «Petersborough» рубились, что не является ожидаемым результатом. Я хочу убедиться, что он работает с wordforms в целом. Вот почему я просил повторить цикл и предложил пойти на массивы. Массивы поддерживают заданные операции «Союз» и «Интерсект». Я ищу синтаксис livecode для реализации 'tAllWordForms минус tProperNames'. –

+0

Нет встроенной функции массива для достижения вашей цели, но второй пример работает по мере необходимости с вашими данными. – splash21

+0

Примечание: первое решение не работает надежно. –

0

Вы можете использовать фильтр контейнера без рисунка функции:

put field "allWordsForms" into tResult 
repeat for each line aLine in field "ProperNames" 
    filter tResult without aLine 
end repeat 
put tResult into field "wordFormsWithoutProperNames"