我在输出中添加了停用词和颜色。还使 dt 成为一个隐形表。

cloud_title = “爱丽丝漫游仙境” ;
// 将所有文本放入一个变量中
文本=加载文本文件( “c:\temp\alice.txt” ) ;
啊= [ => 0 ] ; // 默认值为零的关联数组
// 计算单词。 JMP 有一个 words() 函数,它返回一个单词列表,但它不是
// 能够区分单词内部的撇号和单词边缘的撇号。
// 'we're 是这个正则表达式的一个例子。就像'哦。
// “哦,你没办法,”猫说:“我们都疯了。 我生气了。你疯了。'
rc =帕特匹配(
文本,
帕特重复(
(帕特正则表达式( “[\w]+('[\w]+)?” ) >>单词+表达式(
单词=大写(单词) ;
啊[单词] ++;
“” ;
)) | (帕特正则表达式( "[^\w]+" )) ,
1 ,
9999999 ,
贪婪的
)
) ;
钥匙=啊<<获取密钥;
//显示(N个项目(键));
瓦尔斯=啊<<获取值;
//显示(N个项目(vals));
dt =新表( “” ,
新列( “单词” ,特点,设定值(钥匙) ) ,
新列( “数数” ,数字, “连续的” ,格式( “最好的” , 12 ) ,设定值(瓦尔斯) ) ,
无形的
) ;
dt <<种类(经过(数数) ,命令(下降) ,更换表) ;
// 要忽略的单词
停用词= { “这” , “曾是” , “不是” , “和” , “上” , “一个” , “和” , “从” , “这个” , “的” , “是” , “为了” , “至” ,
“一个” , “经过” , “它” , “或者” , “作为” , “有” , “0” , “1” , “2” , “3” , “4” , “5” , “6” , “7” , “8” , “9” , “在” , “是” , “在” ,
“做过” , “那” , “不” , “还” , “是” , “可能” , “但” , “有” , “她” , “她” , “他” , “他的” , “到过” , “00” ,
“01” , “02” , “03” , “04” , “05” , “06” , “07” , “08” , “09” , “10” , “11” , “12” , “13” , “14” , “15” , “16” , “17” ,
“18” , “19” , “20” , “21” , “22” , “23” , “24” , “25” , “26” , “27” , “28” , “29” , “30” , “31” , “在哪里” ,
“IE” , “乙” , “C” , “D” , “E” , “F” , “G” , “H” , “我” , “J” , “K” , “大号” , “米” , “N” , “哦” , “P” , “问” , “R” ,
“S” , “T” , “你” , “V” , “W” , “X” , “是” , “Z” , “有” , “喜欢” , “德” , “那里” , “全部” , “得到” ,
“WHO” , “后” , “任何” , “关于” , “公司” , “下一个” , “他们” , “如果” , “这些” , “然后” , “然而” , “我的” } ;
del_rows = dt <<获取行在哪里(包含(停用词, :单词) ) ;
dt <<删除行( del_rows ) ;
新窗户( 《文字词云》 ,
大纲框( cloud_title ,
边框框(剩下( 10 ) ,正确的( 10 ) ,最佳( 10 ) ,底部( 10 ) , v = V 列表框() )
)
) ;
H = H 列表框() ;
// 脚本指南中的“好”颜色列表,第 341 页
颜色列表=
[ 0 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 ,
31 , 35 , 36 , 37 , 38 , 39 , 40 , 43 , 44 , 45 , 46 , 47 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 ] ;
颜色=行(颜色列表) ;
排= 1 ;
ķ = 1 ;
天然橡胶=行( dt ) ;
min_words = 8 ;
size_multiplier = 1 ;
如果(天然橡胶< 100 ,
min_words = 2 ;
size_multiplier = 2 ;
) ;
尽管( dt :数数[排] > min_words ,
X =文本框( dt :单词[排] || " " ) ;
X <<设置字体大小( size_multiplier *日志( dt :数数[排] ) * 4 ) ;
X <<字体颜色(颜色列表[ ķ ]) ;
ķ ++;
如果( ķ >颜色,
ķ = 1 ;
) ;
H <<附加( X ) ;
如果( H <<获取宽度> 700 ,
H = H 列表框() ;
v <<附加( H ) ;
) ;
排++;
等待( 0 ) ;
) ;
等待( 0 ) ;
关( dt ,节省) ;
纽约时报的外观很好,因为它很容易实现。

这是一些JSL
/* 下面的 loadtextfile 从http://www.gutenberg.org/它说...
古腾堡计划的爱丽丝梦游仙境,刘易斯卡罗尔
这本电子书可供任何人在任何地方免费使用
几乎没有任何限制。您可以复制、赠送或
根据包含的 Project Gutenberg 许可条款重新使用它
通过这本电子书或在线访问www.gutenberg.org
书名:爱丽丝梦游仙境
作者:刘易斯卡罗尔
发布日期:2008 年 6 月 25 日 [电子书 #11]
发行日期:1994 年 3 月
[最后更新时间:2011 年 12 月 20 日]
英语语言
*/
txt = 加载文本文件("c:\path\Alice.txt " ); 长度( txt );
aa = [=> 0]; // 默认值为零的关联数组
// 计算单词。JMP 有一个 words() 函数,它返回一个单词列表,但它不是
// 能够区分单词内部的撇号和单词边缘的撇号。
// 'we're 是这个正则表达式的一个例子。就像'哦。
// “哦,你没办法,”猫说:“我们都疯了。 我生气了。你疯了。'
rc = Pat Match( txt, Pat Repeat( (Pat Regex( "[\w]+('[\w]+)?" ) >> word +
Expr(word = Uppercase(word);aa[word]++;"";)) |
(Pat Regex( "[^\w]+" )), 1, 9999999, GREEDY ));
键 = aa << getkeys; N 项(键);
vals = aa << getvalues; N 项(vals);
dt = 新表(“无标题”,
新列(“单词”,字符,设置值(键)),
新列(“计数”,数字,“连续”,格式(“最佳”,12),设置值(vals))
);
dt2 = dt << 排序(按(计数),排序(降序));
关闭(dt,nosave);
dt = dt2;
新窗口(“单词”,边框框(左(10),右(10),顶部(10),底部(10),v = V列表框()));
h = H 列表框(); v << 附加(h);
行 = 12; // 通过检查
While(dt:count[row] > 8,
x = 文本框(dt:word[row] || " " );
x << setfontsize( Log( dt:count[row] ) * 4 );
h << 附加(x);
if( h << getwidth > 700, h = H 列表框(); v << append( h ); );
行++;
等待(0);
);
PatMatch 语句使用一些正则表达式来识别文本中的单词,将它们大写,并将它们用作关联数组的键。如果关联数组元素不存在,则它们默认为零(请参阅 =>0),因此对于单词的第一个实例不需要特别努力。PatMatch 中的 PatRepeat 处理整个字符串。在重复中,两个正则表达式交替处理单词和单词之间的内容。在第一个正则表达式中,expr 用于对每个匹配的单词执行一些 JSL。expr 做的最后一件事是评估一个空字符串,该字符串将始终在当前位置匹配。这个 PatMatch 在大约两秒钟内处理了大约 150K 个字符,包括将单词计数到关联数组中。
数据表由键值对构建并排序,然后创建一个带有垂直列表框的窗口,其中包含一堆水平列表框。水平列表框从左到右填充了单词。添加每个单词后,wait(0) 允许窗口更新,因此水平文本框的宽度将是正确的(并且您可以观看它。)当框超过 700 像素时,开始一个新行。
从第 12 行开始,跳过她在 I 中对你说的“与”。当排序计数低于 8 个实例时停止。使用对数变换; Alice 有 386 个实例。
正如 Xan 所指出的,只有后缀、前缀或同义词不同的单词存在问题。可能还有其他一些问题。
Jabberwocky 在《镜花水月》中。Slithy Toves 不在这里。
更新:可能不应该每次都从链接中获取文本。将 loadtextfile 指向您计算机上的某个文件,可能是从http://www.gutenberg.org/