实验目的:
掌握跳表指针(skip pointers)技术、邻近搜索(proximity search)技术、编辑距离(edit distance)计算方法、基于发音的矫正技术(phonetic correction)等,了解PorterStemmer开源程序的简单调用。
实验要求:
(1). 考虑利用如下带有跳表指针的倒排记录表

和两个中间结果表(如下所示,不存在跳表指针)分别进行合并操作。
3 5 9 96 99 100 101
25 60 120 150
采用教材《Introduction to Information Retrieval》第37页Figure 2.10中所描述的基于跳表指针(skip pointers)的倒排记录表(postings lists)合并算法,请问:
a.跳表指针实际跳转的次数分别是多少(也就是说,指针p1的下一步将跳到skip(p1))?
b.当两个表进行合并时,倒排记录之间的比较次数分别是多少?
c.如果不使用跳表指针,那么倒排记录之间的比较次数分别是多少?
(2). 下面给出的是一个位置索引的一部分,格式为:
<position1, position2, …>; doc2: <position1, position2, …>; …
angels: 2: <36,174,252,651>; 4: <12,22,102,432>; 7: <17>;
fools: 2: <1,17,74,222>; 4: <8,78,108,458>; 7: <3,13,23,193>;
fear: 2: <87,704,722,901>; 4: <13,43,113,433>; 7: <18,328,528>;
in: 2: <3,37,76,444,851>; 4: <10,20,110,470,500>; 7: <5,15,25,195>;
rush: 2: <2,66,194,321,702>; 4: <9,69,149,429,569>; 7: <4,14,404>;
to: 2: <47,86,234,999>; 4: <14,24,774,944>; 7: <199,319,599,709>;
tread: 2: <57,94,333>; 4: <15,35,155>; 7: <20,320>;
where: 2: <67,124,393,1001>; 4: <11,41,101,421,431>; 7: <16,36,736>;
请问哪些文档和以下的查询匹配?其中引号内的每个表达式都是一个短语查询。
a.“angels fear”
b.“angels fear to tread”
c.“angels fear to tread”AND“fools rush in”
(3). 阅读教材《Introduction to Information Retrieval》第37页Figure 2.10中所描述的基于跳表指针(skip pointers)的倒排记录表(postings lists)合并算法,并用Java语言或其他常用语言实现该算法。要求在题(1)的例子上验证算法的正确性。
(4).阅读教材《Introduction to Information Retrieval》第42页Figure 2.12中所描述的邻近搜索(proximity search)中的两个倒排记录表(postings lists)的合并算法,并用Java语言或其他常用语言实现该算法,并按要求做适当改进。要求使用附件“HW2.txt”中的60个文档(每行表示一个document,按空格切词,文档中的单词全部转换为小写)建立positional index,两个词项之间的间距(注:相邻的两个词项的间距为1)的形式包括以下三种情形(x是一个正整数):“-x”、“+x”和“x”,其中,“-x”表示第一个词项在第二个词项的左侧且间隔在x之内,“+x”表示第一个词项在第二个词项的右侧且间隔在x之内,“x”表示第一个词项与第二个词项的间隔(左侧和右侧均可)在x之内。要求在以下例子上验证算法的正确性:
(ranking, filtering, -4), (ranking, filtering, -5), (ranking, filtering, -6), (ranking, filtering, -7), (heterogeneous, learning, +2), (recommendation, bias, 2)。
(5).阅读教材《Introduction to Information Retrieval》第59页Figure 3.5中所描述的基于动态规划(dynamic programming)来计算两个字符串的编辑距离(edit distance)的算法,并用Java语言或其他常用语言实现该算法。要求计算以下15组单词的编辑距离:
(business, buisness)
(committee, commitee)
(conscious, concious)
(definitely, definately)
(fluorescent, florescent)
(forty, fourty)
(government, goverment)
(idiosyncrasy, idiosyncracy)
(immediately, immediatly)
(millennium, millenium)
(noticeable, noticable)
(tendency, tendancy)
(truly, truely)
(weird, wierd)
(privilege, privledge)
实验过程:
(1). 考虑利用如下带有跳表指针的倒排记录表

和两个中间结果表(如下所示,不存在跳表指针)分别进行合并操作。
3 5 9 96 99 100 101
25 60 120 150
采用教材《Introduction to Information Retrieval》第37页Figure 2.10中所描述的基于跳表指针(skip pointers)的倒排记录表(postings lists)合并算法,请问:
a.跳表指针实际跳转的次数分别是多少(也就是说,指针p1的下一步将跳到skip(p1))?
b.当两个表进行合并时,倒排记录之间的比较次数分别是多少?
c.如果不使用跳表指针,那么倒排记录之间的比较次数分别是多少?
a.跳表指针实际跳转的次数分别是多少(也就是说,指针p1的下一步将跳到skip(p1))?
1、和3 5 9 96 99 100 101进行合并操作:
实际跳转次数为2次,分别为24→75和75→92
2、和25 60 120 150进行合并操作:
实际跳转次数为3次,分别为3→24,75→92和92→115

实验涉及了倒排记录表的合并,利用跳表指针减少比较次数,位置索引的邻近搜索以及计算编辑距离的动态规划算法。实验中给出了具体的操作示例和匹配文档的判断,强调了算法在处理文本数据时的效率和准确性。此外,还讨论了算法在不同场景下的应用和优化可能性。
最低0.47元/天 解锁文章
599

被折叠的 条评论
为什么被折叠?



