二进制文件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() |
![]() |
整理完的索引序表如下:
最终的查找结果如下: