我在輸出中添加了停用詞和顏色。還使 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/