Как удалить слова в одном списке из другого списка (операция Set)

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

Мне действительно нужно 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

person z--    schedule 05.05.2013    source источник


Ответы (2)


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

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
person splash21    schedule 05.05.2013
comment
Я добавил пример к вопросу. Ваше решение дает в результате следующие строки (включая пустую в начале) and came yesterday They want to move from land to sbourough. Слова Maryland и Petersborough обрезаются, что не является ожидаемым результатом. Я хочу убедиться, что он работает со словоформами в целом. Вот почему я просил цикл повторения и предложил использовать массивы. Массивы поддерживают операции над множествами Union и Intersect. Я ищу синтаксис livecode для реализации tAllWordForms minus tProperNames. - person z--; 05.05.2013
comment
Для достижения вашей цели нет встроенной функции массива, но второй пример работает с вашими данными по мере необходимости. - person splash21; 05.05.2013
comment
Второе решение работает нормально. Я тестировал его на Linux. Так как он использует НЧ. На винде тоже работает? - person z--; 06.05.2013

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

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