永发信息网

python如何高级检索

答案:1  悬赏:30  手机版
解决时间 2021-02-23 00:58
上个检索实验中检索功能要求输出包含全部关键字的行,即各个关键字的“与”(AND)操作。本实验首先需要实现关键字的“或”(OR)操作,即某行只要出现了一个关键字就满足条件。实现程序,当输入的Query以“AND:”开始,则执行“与”检索;如果输入的Query以“OR:”开始,则执行“或”检索。默认情况(不以“AND:”或“OR:”开始),执行“与”检索。 本实验无需打印索引
最佳答案
$ python baidu_qa.py 
Enter Context, leave by empty line
    def __init__(self, datafile, default=None):
        self.datafile = datafile
        self.default = default
        self.data = shelve.BsdDbShelf(bsddb.open(self.datafile, 'c'))
    def __del__(self):
        self.data.sync()
        self.data.close()
    def __getitem__(self, k):
        return self.data.get(k, self.default)
    def __setitem__(self, k, v):
        self.data[k] = v


Enter and/or keywords to query
and default data
[9]
or get k v
[8, 9, 10, 11]
 

# coding: utf-8

import re

patt = re.compile("\w+")

def makeIndex():
    index, lineno = {}, 0
    while True:
        ln = raw_input()
        if ln:
            lineno += 1
            for word in patt.findall(ln):
                index.setdefault(word, []).append(lineno)
        else:
            break
    return index

def indexAndQuery(index, *args):
    found = None
    for word in args:
        got = index.get(word, [])
        if not got:
            return None
        if not found:
            found = set(got)
        else:
            found &= set(got)
        if not found:
            return None
    return list(found)

def indexOrQuery(index, *args):
    found = set()
    for word in args:
        found |= set(index.get(word, []))
    return list(found)

def lnparser(ln):
    words = patt.findall(ln.lower())
    if len(words)<2 or words[0] not in ('and','or'):
        # 输入的行不是以and, or开始, 或未给出待查单词
        return None
    else:
        return words[0], words[1:]

cmdswitch = {
    'and': indexAndQuery,
    'or': indexOrQuery,
}

print "Enter Context, leave by empty line"
index = makeIndex()
print "Enter and/or keywords to query"
while True:
    got = lnparser(raw_input())
    if not got:
        break
    print cmdswitch[got[0]](index, *got[1])
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
移动现在月底流量清不清零
大众帕萨特1 .8着火五秒钟后就熄火怎么回事
37度Love怎么去啊,有知道地址的么
成语组地名:难能可( ) ( )春白雪
水浒传13一17回简介
金钱用英语怎么说
请问swisse蔓越莓适合哪个年龄段的女性吃呢?
小朱烧烤地址有知道的么?有点事想过去
求泰妍17年新专音源
百色市猎豹三菱汽车修配商行地址有知道的么?
新帕萨特1.8t起动没反应显要放p档或n档
【求两直角边长分别为根号2和根号5的直角三角
明源商务宾馆这个地址在什么地方,我要处理点
木属性的女孩名字
在建筑工地受工伤了,没签定劳动合同,是包工
推荐资讯
梦见野外开的红花我哪来栽
卡罗拉水箱防冻液要多长时间更换
银行存款日记账记错了账本怎么改?
华为手机进不了fastboot模式该怎么处理
这种秋冬穿的裙子叫什么?里面一件长袖,外面
求2013年福大新生群.
胡在友诊所在什么地方啊,我要过去处理事情
潜艇怎样在水中行驶的
路路达摩托车行这个地址在什么地方,我要处理
小明小军参加口算比赛小明做对了90题,正确率
张子健《飞虎神鹰》什么时候上映?在哪个频道
在一平方米的墙壁上绘制学校规划图,采用下列
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?