|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jerryxjr1220 于 2017-8-20 23:26 编辑
鱼C论坛Python精英挑战赛第二季赛程已经过半啦!感谢广大鱼油的热情参与!
本季挑战赛依旧会有精彩的题目供大家挑战,大量鱼币奖励等你赢取!
本期题目:文献检索之关键词检索
使用过文献检索系统的同学都知道,在文献检索中我们可以使用关键词进行检索,而且关键词与关键词之间可以用“与”、“或”、“非”的逻辑关系进行组合,并且可以用括号改变“与或非”的优先级顺序。
通常,我们用“&”表示“与”,其表示的含义为两个关键词同时出现在检索的文本中;用“|”表示“或”,其表示的含义为两个关键词有任一个出现在检索的文本中;用“!”表示“非”,其表示的含义为“!”后紧跟的一个关键词不出现在检索的文本中。它们三者默认的优先级顺序为“!”>“&”> “|”,我们可以用括号改变它们之间的优先级顺序。关键词与“&|!”之间用空格隔开,“!”之后的关键词可以省略空格。
例如,被检索的文本txt = 'one apple with two leaves, one is green and the other is yellow.'
我们用s1 = '(apple | others) & two' 进行搜索,返回的结果应该为 True
我们用s4 = '!green & (ones | two)' 进行搜索,返回的结果应该为 False
现在,请你设计一个函数,给定一个关键词字符串string,在txt中搜索是否能匹配,返回True或者False。
- def search(string, txt):
- '''Your code here!'''
- return True or False
复制代码
为了使更多鱼油能参与比赛,本题分为三个难度:
#简单难度:关键词字符串中没有括号
#中等难度:关键词字符串中只有单层括号,括号不嵌套
#困难难度:关键词字符串中有多层嵌套括号
备注:尽量避免使用eval函数,因为服务器上运行不了。
#Test sample
txt = 'one apple with two leaves, one is green and the other is yellow.'
s1 = '(apple | others) & two' #True
s2 = 'one & yellow & leaf' #False
s3 = '(!three | one & four) & !five' #True
s4 = '!green & (ones | two)' #False
s5 = '(big | !apple | the) & ((!yellow | !green) | others)' #False
比赛规则:
要求程序输出正确,运行效率高,并且程序简练优雅的获胜。比赛截止日期为8月20日24时。
优胜者优先从困难难度中选择产生,奖励100鱼币,由@小甲鱼 老师倾情赞助!
@冬雪雪冬 @SixPy @~风介~
|
|