0

用户指南章节 6.1.5单词块单词是由空格、制表符或返回字符分隔或用双引号括起来的字符串。是否可以有额外的单词分隔符?

我有以下代码片段取自用户指南第 6.5.1 章“何时使用数组”,p。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

它计算“示例文本”字段中每个单词形式的出现次数。

我意识到单词后的句号被计为默认设置的单词的一部分。

如何更改将句号(和,或逗号)视为单词边界的设置?

4

3 回答 3

1

或者,您可以在处理之前简单地删除有问题的字符。这可以使用 REPLACE 函数或 "REPLACETEXT 函数来完成。REPLACETEXT 函数可以使用正则表达式匹配字符串,但比 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
于 2013-05-18T06:45:13.407 回答
1

我想你是在问一个关于分隔符的问题。一些定界符是内置的:

单词的空格,

项目的逗号,

返回 (CR) 为行。

创建您自己的自定义分隔符属性(itemDelimiter)的能力是该语言的一个强大功能,并且与“项目”有关。您可以将其设置为任何单个字符:

将 itemDelimiter 设置为“C”

回答“XXCXXCXX”中的项目数——称这个字符串为“theText”

结果将是“3”

正如其他人指出的那样,将一个字符串替换为另一个字符串的方法可以对自定义文本解析进行强大的控制:

将文本中的“C”替换为空格

产生“XX XX XX”

克雷格纽曼

于 2013-05-19T20:13:32.943 回答
0

正如用户指南在第 6.1.5 章中所说的 单词块 单词是由空格、制表符或返回字符分隔或用双引号括起来的字符串。

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
于 2013-05-18T06:30:36.320 回答