统计文本数据中的单词频率并建立索引

二进制文件Articl中,存储了一些文本数据,现在需要统计这些文本中每个单词的使用数目,并建立每个单词使用的索引。将结果存储在二进制文件Article_index中,并找出哪些文本同时使用了will和about这两个单词。

解答:

A B C D E
1 =file("Article.btx") =create(Word,Count,Index)    
2 =A1.cursor@b()      
3 for A2 =A3.Text =len(B3)  
4   =C3.(mid(B3,#,1)) =B4.(if(isalpha(~),lower(~)," "))  
5   =C4.select(~!=" "||~[-1]!=" ") =B5.concat().split(" ")  
6   =C5.groups(string(~):Word;count(~):Count) =B6.len()  
7   =B1.len() >i1=min(1,B7) >i2=1
8   for i2<=C6 =B1.m(i1) =B6(i2)
9     =cmp(C8.Word,D8.Word)  
10     if i1==0||C9>0 >B1.insert(i1,D8.Word,D8.Count,[#A3])
11       =i2=i2+1  
12       >i1=if(i1>0 && i1<B7,i1+1,0)  
13     else if C9<0 >i1=if(i1>0 && i1<B7,i1+1,0)
14     else >B1.modify(i1,Count+D8.Count:Count,Index|#A3:Index)
15       >i2=i2+1
16       >i1=if(i1>0&&i1<B7,i1+1,0)  
17 =file("Article_index.btx") >A17.export@b(B1)    

问题中未限定内存,一般情况下,英语单词的数量是有限的,因此在计算汇总时,直接用序表存储索引表。有了二进制索引文件Article_index,我们就可以根据一个或多个关键词,找出相关文本:

A B C D
1 =file("Article.btx") =file("Article_index.btx")  
2 =B1.import@b() [about,will]  
3 =A2.(Word).pos(B2) =A2(A3).(Index).isect()  
4 =A1.cursor@b() [] 0
5 for B3 >A4.skip(A5-C4-1) >C4=A5
6   >B4=B4|A4.fetch(1)  
7 >A4.close()    

整理完的索引序表如下:

最终的查找结果如下: