2013-05-17 3 views
0

Руководство пользователя Глава 6.1.5 Слово Chunk Слово представляет собой строку символов, разделенных пробелами, вкладками или возвращаемыми символами или заключенными в двойные кавычки. Возможно ли иметь дополнительные разделители слов?Как установить разделители слов?

У меня есть следующий фрагмент кода, взятый из руководства пользователя главы 6.5.1 «Когда использовать массивы», стр. 184

on mouseUp 

    --cycle through each word adding each instance to an array 
    repeat for each word tWord in field "sample text" 
     add 1 to tWordCount[tWord] 
    end repeat 

    -- combine the array into text 
    combine tWordCount using return and comma 
    answer tWordCount 

end mouseUp 

Он подсчитывает количество вхождений каждой формы слова в поле «Пример текста».

Я понимаю, что полные остановки после слов считаются частью слова с настройкой по умолчанию.

Как изменить настройки, чтобы полная остановка (и, или запятая) считалась границей слов?

ответ

1

В качестве альтернативы вы можете просто удалить нарушающие символы перед обработкой. Это можно сделать, используя REPLACE функцию или функцию «ReplaceText. Функция ReplaceText может использовать регулярное выражение MatchString, но медленнее, чем функция REPLACE. Так вот я с помощью функции REPLACE.

on mouseUp 
    put field "sample" into twords 
    --remove all trailing puncuation and quotes 
    replace "." with "" in twords 
    replace "," with "" in twords 
    replace "?" with "" in twords 
    replace ";" with "" in twords 
    replace ":" with "" in twords 
    replace quote with "" in twords 
    --hyphenated words need to be seperated? 
    replace "-" with " " in twords 

    repeat for each word tword in twords 
     add 1 to twordcount[tword] 
    end repeat 
    combine twordcount using return and comma 
    answer twordcount 
end mouseUp 
+0

Это интересное решение. Интересно, какой из них быстрее. –

0

В руководстве пользователя говорится в главе 6.1.5 Слово ChunkСлово представляет собой строку символов, разграниченных пробела, табуляции или возврата символов или вложенных в двойные кавычки.

itemDelimiter но не wordDelimiter.

Знак пунктуации, который нужно удалить перед добавлением слова в массив подсчета слов.

Это может быть сделано с помощью функции effectiveWord.

function effectiveWord aWord 
    put last char of aWord into it 
    if it is "." then delete last char of aWord 
    if it is "," then delete last char of aWord 
    if it is ":" then delete last char of aWord 
    if it is ";" then delete last char of aWord 
    return aWord 
end effectiveWord 



on mouseUp 

    --cycle through each word adding each instance to an array 
    repeat for each word tWord in field "Sample text" 
     add 1 to tWordCount[effectiveWord(tWord)] 
    end repeat 

    -- combine the array into text 
    combine tWordCount using return and comma 
    answer tWordCount 

end mouseUp 
+0

Вы можете сделать это гораздо более эффективно с регулярным выражением: ReplaceText (MYVAR, "[^ A-Za-Z0-9]", пустой). – Mark

+0

Да, но это не работает для Unicode. –

+1

Тип текста, который вам кажется необходимым, может быть легко преобразован в текст ASCII. – Mark

1

Я думаю, что вы задаете вопрос о разделителях некоторых ограничители встроены:.

пространства для слов,

запятые для элементов,

возвращения (CR) для линий.

Способность создать собственное собственное свойство разделителя (itemDelimiter) является мощной функцией языка и относится к «элементам».Вы можете установить это любой одиночный символ:

установить itemDelimiter в «C»

ответ число элементов в «XXCXXCXX» --call этой строки «ЬЬеТехЬ»

Результат будет " 3"

Как уже отмечалось, метод замены одной строки на другую позволяет грозный контроль над пользовательской разборе текста:

заменить „C“ с пространством в ЬЬеТехЬ

выходы "XX XX XX"

Craig Newman

+0

Да, для элементов я могу установить разделители, и это очень полезно. Для слов, однако, оно установлено в пробел, вкладку или возврат. И это означает, что полная остановка сразу после слова считается частью этого слова. Мой вопрос касается самого простого способа получить «эффективные» слова, т. Е. Включены словоформы без пунктуации. –