我在输出中添加了停用词和颜色。还使 dt 成为一个不可见的表。

云标题= “爱丽丝漫游仙境” ;
// 将所有文本放入一个变量中
TXT =加载文本文件( "c:\temp\alice.txt" ) ;
一个= [ => 0 ] ; // 默认值为零的关联数组
// 计算单词数。 JMP 有一个返回单词列表的 words() 函数,但它不是
// 能够区分单词内部和单词边缘的撇号。
// '我们是这个正则表达式的一个例子。就像'哦。
// '哦,你没办法,'猫说:'我们都疯了。 我生气了。你疯了。'
遥控=拍拍比赛(
TXT ,
拍拍重复(
(正则表达式( “[\w]+('[\w]+)?” ) >>单词+表达式(
单词=大写(单词) ;
一个[单词] ++;
“” ;
)) | (正则表达式( “[^\w]+” )) ,
1个,
9999999 ,
贪婪的
)
) ;
钥匙=一个<<获取密钥;
//显示(N 项(键));
值=一个<<获取值;
//显示(N 项( vals ));
dt =新表( “” ,
新建专栏( “单词” ,特点,设置值(钥匙) ) ,
新建专栏( “数数” ,数字, “连续的” ,格式( “最好的” , 12 ) ,设置值(值) ) ,
无形的
) ;
dt <<种类(经过(数数) ,命令(下降) ,替换表) ;
// 要忽略的词
停用词= { “这” , “曾是” , “不是” , “和” , “在” , “A” , “和” , “从” , “这” , “的” , “是” , “为了” , “到” ,
“一个” , “经过” , “它” , “或者” , “作为” , “有” , “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” , “后” , “任何” , “关于” , “公司” , “下一个” , “他们” , “如果” , “这些” , “然后” , “然而” , “我的” } ;
删除行= dt <<获取行在哪里(包含(停用词, :单词) ) ;
dt <<删除行(删除行) ;
新窗户( 《文字词云》 ,
轮廓框(云标题,
边框框(左边( 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个;
k = 1个;
天然橡胶=行( dt ) ;
最小字数= 8个;
大小乘数= 1个;
如果(天然橡胶< 100 ,
最小字数= 2个;
大小乘数= 2个;
) ;
尽管( dt :数数[排] >最小字数,
X =文本框( dt :单词[排] || “” ) ;
X <<设置字体大小(大小乘数*日志( dt :数数[排] ) * 4个) ;
X <<字体颜色(颜色列表[ k ]) ;
k ++;
如果( k >颜色,
k = 1个;
) ;
H <<附加( X ) ;
如果( H <<获取宽度> 700 ,
H = H 列表框() ;
v <<附加( H ) ;
) ;
排++;
等待( 0 ) ;
) ;
等待( 0 ) ;
关闭( dt ,没有保存) ;
纽约时报的外观很好,因为它很容易实现。

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