精华内容
下载资源
问答
  • 信息检索布尔模型
    2014-03-26 10:01:26
    学习 布尔模型之前首先让我们了解一下模型的基本概念为后面的学习奠定基础。模型是采用数学工具对现实世界某种事物或某种运动的抽象描述,面对相同的输入,模型输出应能够无限地逼近现实世界的输出(如:天气预报模型)。 信息检索模型就是表示文档与用户查询以及查询与文档的关系框架。下图是常用的信息检索模型以及所支撑其的相关数学背景。

    信息检索模型以及支撑的数学背景
    信息检索模型以及支撑的数学背景
    布尔模型描述:

    文档(用D表示)—— 一个文档被表示为关键字的集合;
    查询式(用Q表示)—— 用于表示用户查询的关键词的布尔组合,并用“与(And)、或(or)、非(Not)”链接起来,且用括号知名优先次序;
    举例
    下面有2个文档:

    文档1:a b c f g h;
    文档2:a f b x y z;
    用户想找出出现a或者b但一定要出现z的文档。当然我们仔细一看,结果显而易见是文档2符合用户的需求。但是对于计算机布尔排序模型它是怎么实现的呢 ?

    将查询表示为布尔表达式Q=(a∨b) ∧z,并转换成析取范式qDNF=(1, 0,1) ∨(0,1,1) ∨(1,1,1);
    文档1和文档2的三元组对应值分别为(1,1,0)和(1,1,1);
    经过匹配,将文档2返回;
    布尔模型的优点:

    通过使用复杂的布尔表达式,可以很方便地控制查询结果,经过某种训练的用户可以容易地写出布尔查询表达式;
    相当有效的实现方法,相当于识别包含了一个某个特定term的文档式;
    布尔模型问题:

    不支持部分匹配,而完全匹配会导致太多或者太少的,非常刚性: ―与”意味着全部; ―或”意味着任何一个;
    很难控制被检索的文档数量原则上讲,所有被匹配的文档都将被返回;
    很难对输出进行排序;
    如果一篇文档被用户确认为相关或者不相怎样,相应地修改查询式呢。

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28519454/viewspace-1129651/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/28519454/viewspace-1129651/

    更多相关内容
  • 信息检索导论1】布尔模型

    千次阅读 2022-04-28 16:49:33
    信息检索导论

    1.Information Retrieval

    定义:
    Information retrieval (IR) is finding material (usually documents) of an unstructured nature (usually text) that satisfies an information need from within large collections (usually stored on computers).
    web search

    • 数量庞大
    • 需要索引
    • 反欺诈
    • 利用超链接

    personal information retrieval:

    • eg:Email
    • 分类
    • 垃圾邮件过滤
    • 存储大量类别
    • 维护免费
    • 磁盘空间

    enterprise,institutional, and domain-specific search

    • stored on centralized file systems

    线性查找:grep

    • 在文本中查某个词足够了,但有其他需求

    其他需求:

    • 数据量大而多,快速处理
    • flexible matching operations
    • 排序

    布尔模型

    • query:布尔表达式

    任务:

    • ad hoc retrieval task.
      • 输入query,输出doc列表(排序后)

    评估

    • precision
    • recall

    专有名词

    • term:索引的单元,如词、词组、潜在词等
    • document:检索的单位,如网站列表,也可能是某一章节
    • collection或者corpus:doc的集合
    • information need
      • 用户向计算机传递的需求
      • 可能并不精确
    • relevant:如果用户认为包含与其个人信息需求相关的信息

    1.1 term-document matrix

    在这里插入图片描述
    词袋->doc向量:每列一个doc向量,每行一个term向量
    query:Brutus AND Caesar AND NOT Calpurnia,
    在这里插入图片描述
    答案:Antony and Cleopatra and Hamlet
    问题

    • 稀疏,词表大难以存储–>倒排索引

    1.2 倒排索引

    在这里插入图片描述

    INVERTED INDEX

    • dictionary(vacabulary):
      • 内存
      • key:term列表,也排序了,也会记录postings的长度(doc freq)
      • value:postings list/postings:排好序的,按doc id,出线相关词的freq,…
    • postings
      • posting记录:docid,term在doc中出现的位置、freq,…
      • 存储:disk
        • 固定长度:不行,浪费
        • linked list:链表,
          • 便于插入,
          • 便于扩展到advanced indexing strategies
            • skip list,需要新的指针
          • 问题:要存储指针
        • 可变数组
          • 顺序存储,遍历快
          • 无需存储指针,指针可以是offset
        • 混合
          • 不变数组的链表

    建立:

    • Collect the documents to be indexed:
    • 分词
    • normalized
    • index
      • merge:相同term的相同doc合并
        在这里插入图片描述

    1.3 Processing Boolean queries

    1. 得到每个term的postings
    2. OR:则两个表融合,取并集,AND:取交集,转化为AND链接的形式

    取交集:(标准方法)
    在这里插入图片描述
    问题:取交集时,常数复杂度,但这个常数很大
    解决:

    • 先按doc freq排序(posting的长度),先合并短的
      • 最终结果的长度不会超过最短的列表
      • 这是保存doc freq.的原因
      • 先算OR,再算AND
        在这里插入图片描述
    • 先算短的,然后保存到中间结果
      • 每次下一个输入与中间结果求交集
      • 问题:不对称
        • 中间结果:内存;下一个输入:disk
        • 但下一个输入可能比中间结果大得多(两个数量级?)
      • 加速合并过程
        • 中间结果的doc在长positng中二分查找合并
        • 长postings采用哈希存储
        • 上述无法用于压缩后的positngs
      • 都是常见词,仍可以用标准法

    带中间结果的求交集:
    在这里插入图片描述

    1.4 对基本布尔操作的扩展和有序检索

    布尔检索和有序检索(排序检索模型)对应

    布尔检索:

    • query:精确的逻辑表达式
    • 结果:无序
    • 布尔操作符的扩展
      • 邻近操作符:term的距离在文档中接近(中间含有几个词,来表征接近的程度
    • 专业人士更喜欢布尔检索:查询精确,控制力和透明度
      • 排序:按时间。。。

    有序检索

    • query:不像逻辑表达式这么精确,采用一个或多个词构建(自由文本查询)
    • 结果:有序

    要点

    • term:提供,容忍拼写错误,词语表达不一致(语义相同)
    • 复合词和短语:(Gates Near Microsoft)
    • 相似度:布尔查询仅记录存在与否,但是我们需要得到文档相关的可靠程度
      • 词项频率:term在doc中的频率高,权重高
    • 排序

    ad hoc search:

    • 大搜、电商搜索。。。
    • 部分支持布尔操作,专业人士喜欢,大多人用的少
    展开全文
  • 现代信息检索——布尔检索

    千次阅读 多人点赞 2021-09-11 19:37:29
    布尔检索概述2. 布尔索引方法2.1. 关联矩阵索引2.2. 倒排索引2.2.1. 倒排索引概述2.2.2. 倒排索引建立3. 布尔查询的处理3.1. 布尔查询在倒排表上的操作3.2. AND查询的处理3.3. 布尔查询在倒排表上的优化4. 布尔检索...

    1. 布尔检索概述

    针对布尔查询的检索,布尔查询是指利用 AND, OR 或者 NOT操作符将词项连接起来的查询。

    例如检索需求:哪些文档包含了Brutus及Caesar二词但不包含Calpurnia一词?
    布尔表达式:Brutus AND Caesar AND NOT Calpurnia

    2. 布尔索引方法

    2.1. 关联矩阵索引

    对于规模较小的的文档集(每一个文档中的词项少,文档数量少)。可以对文档集构建词项-文档(term-doc)的关联矩阵,如下图:
    在这里插入图片描述
    在上图中,每一列都是一个关联向量,该向量内的0、1分别表示在文档(蓝色)中是否出现某词项(褐色)。同样的,每一行中的0、1也可以表示该词项(褐色)在文档(蓝色)中出现。
    在这里插入图片描述

    有了这样一个关联矩阵后,就可以进行布尔查询了,回到一开始提到的布尔表达式:Brutus AND Caesar AND NOT Calpurnia,很容易就找出:
    在这里插入图片描述

    同时满足既有Brutus,又有Caesar,同时没有Calpurnia的文档是Antony and CleopatraHamlet

    2.2. 倒排索引

    2.2.1. 倒排索引概述

    但是我们很容易发现,一旦文档集变大,关联矩阵的实用性将大大降低。假定现在有一百万篇文档(1M),每篇有1000个词(1K),每个词平均有6个字节,那么所有文档将约占6GB 空间。同时由于庞大的词项数,导致关联矩阵高度稀疏,使关联矩阵的搜索效率不高。

    基于此,提出了倒排索引来解决关联矩阵的问题。所谓倒排,是对于关联矩阵而言的,在关联矩阵中,我们统计的是一个文档内出现的词项,这种方法稀疏度高(0很多)。所以我们转换思路,统计一个词项在哪些文档中出现过。

    首先,将文档名用文档ID代替,然后按某词出现文档ID序号从小到大排列,例如:
    在这里插入图片描述
    这样建立的索引不再稀疏,同时也无需使用连续空间存储。

    2.2.2. 倒排索引建立

    (1) 文本预处理

    • 词条化(Tokenization)
      将字符序列切分为词条,例如将“You are welcome.” 切分为 you、are、welcome三个词条。也需要解决诸如 “John’s”('s怎样处理?),“state-of-the-art” 算一个还是四个词条?的问题;
    • 规范化(Normalization)
      将文档和查询中的词项映射到相同的形式,例如U.S.A. 和 USA应当看做同一个词;
    • 词干还原(Stemming)
      将同一词汇的不同形式还原到词根,例如authorize, authorization是同一词根,在检索时应当都列出,避免用户在检索时可能出现的描述不准确现象;
    • 停用词去除(Stopwords removal)
      去除高频但意义不大词项,例如the、a、to、of。

    (2) 建立词条序列
    简单来说就是将预处理后的词条和它们所属的文档一起建立<词条, 文档ID>二元组:
    在这里插入图片描述

    (3) 词条排序
    首先将词条按某种方法进行排序,例如英文可以根据字母表进行排序;然后对排序后的列表再按文档ID进行排序,确保同一词条对应的ID较小的文档可以排在前面。
    在这里插入图片描述
    (4) 建立词典和倒排记录表
    将出现多次的词项合并,并记录其出现的频数(在几个文档中出现过),之后按文档ID从小到大的顺序建立倒排记录表,并与词典进行链接:
    在这里插入图片描述
    至此,倒排索引已经建立完毕。

    3. 布尔查询的处理

    3.1. 布尔查询在倒排表上的操作

    • AND (Brutus AND Caesar)
      两个倒排表的交集
    • OR (Brutus OR Caesar)
      两个倒排表的并集
    • NOT (Brutus AND NOT Caesar)
      两个倒排表的减集

    3.2. AND查询的处理

    考虑实现布尔查询表达式:Brutus AND Caesar

    首先应该在词典中定位 Brutus和Caesar,并返回两个词项的倒排表。
    在这里插入图片描述

    然后为每个倒排表定义一个定位指针,两个指针同时从前往后扫描,每次比较当前指针对应的倒排记录,然后再向后移动指向文档ID较小的那个指针在文档ID相等时同时两个指针,直到某一个倒排表被检索完毕。

    这样就能轻易找出符合Brutus AND Caesar的文档,有:文档1、文档2和文档4。

    OR和NOT的同理类似,只是对倒排表的操作不同。注意NOT操作不能简单理解为某一词项的补集,因为补集可能会很大,必须是两个倒排表的减集。

    3.3. 布尔查询在倒排表上的优化

    有两个简单的优化方法:

    1. 倒排表的文档ID升序排列
      正如在AND操作中演示的那样,文档ID升序排列可以尽量地提前结束对倒排表的操作,而不需要对两个倒排表从头到尾进行检索。
    2. 优先处理词频小的词项
      在复杂布尔表达式中,例如(tangerine OR trees) AND (marmalade OR skies) AND (kaleidoscope OR eyes),优先合并词频小的词项,生成文档数量少的词项,有利于结合上面的优化方法尽量地提前结束对倒排表的操作。

    4. 布尔检索的优缺点

    优点

    • 构建简单,或许是构建IR系统的一种最简单方式;
    • 易被接收,仍是目前最主流的检索方式之一;
    • 操作专业化,对于非常清楚想要查什么、能得到什么的用户而言,布尔检索是个强有力的检索工具。

    缺点

    • 布尔查询构建复杂,不适合普通用户。如果构建不当, 检索结果就会过多或者过少;
    • 没有充分利用词项的频率信息;
    • 不能对检索结果进行排序。
    展开全文
  • 文本信息检索——布尔模型和TF-IDF模型1. 布尔模型​如要检索“布尔检索”或“概率检索”但不包括“向量检索”方面的文档,其相应的查询表达式为:Q=检索 and (布尔or 概率 not向量),那么Q可以在其相应的(检索,布尔...

    文本信息检索——布尔模型和TF-IDF模型

    1. 布尔模型

    ​如要检索“布尔检索”或“概率检索”但不包括“向量检索”方面的文档,其相应的查询表达式为:Q=检索 and (布尔or 概率 not向量),那么Q可以在其相应的(检索,布尔,概率,向量)标引词向量上取(1,1,0,0)(1,0,1,0)(1,1,1,0),那么文档Dj的向量如果与这中间一个相等,那么即可认为他们之间存在相似关系,而这种相互关系也是布尔值,即sim(Q,Dj)只能为0或1。

    2.TF-IDF模型

    ​在某个一共有一千词的网页中“原子能”、“的”和“应用”分别出现了 2 次、35 次 和 5 次,那么它们的词频TF就分别是 0.002、0.035 和 0.005。 我们将这三个数相加,其和 0.042 就是相应网页和查询“原子能的应用”。

    一个词预测主题能力越强,权重就越大,反之,权重就越小。我们在网页中看到“原子能”这个词,或多或少地能了解网页的主题。我们看到“应用”一次,对主题基本上还是一无所知。因此,“原子能“的权重就应该比应用大。

    应删除词的权重应该是零。

    2.1权重计算

    我们假定中文网页数是D=10亿,应删除词“的”在所有的网页中都出现,即|{𝑗:𝑡_𝑖 "∈" 𝑑_𝑗}|=10亿,那么它的idf=log(10亿/10亿)= log (1) =0

    假如专用词“原子能”在两百万个网页中出现,即|{𝑗:𝑡_𝑖 "∈" 𝑑_𝑗}| =200万,则它的权重

    ​ idf=log(500) =6.2

    假定通用词“应用”,出现在五亿个网页中,它的权重

    ​ idf = log(2)= 0.7。

    最终获得某一网页的TF-IDF计算如下

    0.002(tf)6.2(idf)+ 0.035(tf)0(idf)+0.005(tf)*0.7(idf)

    3.实现代码

    布尔模型

    def regularization(s):

    ss = s.split(' ')

    expression = []

    target = {}

    for i in ss:

    if i != "and" and i != "or" and i != "not" and i != "(" and i != ")":

    if i[0] == "(":

    expression.append("(")

    expression.append(i[1:])

    target[i[1:]] = 0

    elif i[-1] == ")":

    expression.append(i[:-1])

    expression.append(")")

    target[i[:-1]] = 0

    else:

    expression.append(i)

    target[i] = 0

    else:

    expression.append(i)

    return target, expression

    def analysis(line):

    output = []

    # 去除每行的换行符

    t_line = line.strip('\n')

    # 按空格分开每个词

    words = t_line.split(' ')

    for word in words[1:]:

    if word == "":

    continue

    # 按/分开标记和词

    t_word = word.split('/')

    # 左方括号去除

    tf_word = t_word[0].split('[')

    if len(tf_word) == 2:

    f_word = tf_word[1]

    else:

    f_word = t_word[0]

    # 若不在列表中

    if f_word not in output:

    output.append(f_word)

    big_word1 = t_line.split('[')

    for i in range(1, len(big_word1)):

    big_word2 = big_word1[i].split(']')[0]

    words = big_word2.split(' ')

    big_word = ""

    for word in words:

    # 按/分开标记和词

    t_word = word.split('/')

    big_word = big_word + t_word[0]

    # 若不在列表中

    if big_word not in output:

    output.append(big_word)

    return output

    def getValue(target, reg):

    # 逆波兰

    RPN = []

    stack = []

    stack.append("#")

    for i in reg:

    if i in target.keys():

    RPN.append(target[i])

    elif i == "(":

    stack.append(i)

    elif i == ")":

    while stack[-1] != "(":

    RPN.append(stack.pop())

    stack.pop()

    elif i == "not":

    while stack[-1] == "not":

    RPN.append(stack.pop())

    stack.append(i)

    elif i == "and":

    while stack[-1] == "not" or stack[-1] == "and":

    RPN.append(stack.pop())

    stack.append(i)

    else:

    while stack[-1] == "not" or stack[-1] == "and" or stack[-1] == "or":

    RPN.append(stack.pop())

    stack.append(i)

    while len(stack) != 1:

    RPN.append(stack.pop())

    # 计算逆波兰式

    ans = []

    for i in RPN:

    if i == 0 or i == 1:

    ans.append(i)

    elif i == "not":

    ans.append(1 ^ ans.pop())

    elif i == "and":

    op1 = ans.pop()

    op2 = ans.pop()

    ans.append(op1 and op2)

    elif i == "or":

    op1 = ans.pop()

    op2 = ans.pop()

    ans.append(op1 or op2)

    return ans[0]

    if __name__ == '__main__':

    booltext = input("输入布尔表达式:")

    target, reg = regularization(booltext)

    key_target = target.keys()

    num = 0

    with open('语料库.txt', mode='r', encoding='UTF-8') as f:

    for line in f.readlines():

    if num >=10:

    break

    for i in key_target:

    target[i] = 0

    if line is not None and line != "\n":

    output = analysis(line)

    for i in key_target:

    if i in output:

    target[i] = 1

    if getValue(target, reg):

    print(line)

    num = num + 1

    f.close()

    TF-IDF模型

    getWeight.py(提前计算权重)

    import sys

    output = {}

    with open('语料库.txt', mode='r', encoding='UTF-8') as f:

    for line in f.readlines():

    if line is not None and line != "\n":

    t_line = line.strip('\n')

    words = t_line.split(' ')

    word_w = []

    for word in words[1:]:

    if word == "":

    continue

    t_word = word.split('/')

    # 左方括号

    tf_word = t_word[0].split('[')

    if len(tf_word) == 2:

    f_word = tf_word[1]

    else:

    f_word = t_word[0]

    if f_word not in word_w:

    word_w.append(f_word)

    for f_word in word_w:

    if f_word in output.keys():

    output[f_word] = output[f_word]+1

    else:

    output[f_word] = 1

    f.close()

    with open('outputWeight.txt', mode='w', encoding='UTF-8') as f:

    while output:

    minNum = sys.maxsize

    minName = ""

    for key, values in output.items():

    if values < minNum:

    minNum = values

    minName = key

    f.write(minName+": "+str(minNum)+"\n")

    del output[minName]

    f.close()

    TF-IDF.py

    import math

    def analysis(line):

    output = []

    # 去除每行的换行符

    t_line = line.strip('\n')

    # 按空格分开每个词

    words = t_line.split(' ')

    for word in words[1:]:

    if word == "":

    continue

    # 按/分开标记和词

    t_word = word.split('/')

    # 左方括号去除

    tf_word = t_word[0].split('[')

    if len(tf_word) == 2:

    f_word = tf_word[1]

    else:

    f_word = t_word[0]

    # 若不在列表中

    if f_word not in output:

    output.append(f_word)

    big_word1 = t_line.split('[')

    for i in range(1, len(big_word1)):

    big_word2 = big_word1[i].split(']')[0]

    words = big_word2.split(' ')

    big_word = ""

    for word in words:

    # 按/分开标记和词

    t_word = word.split('/')

    big_word = big_word + t_word[0]

    # 若不在列表中

    if big_word not in output:

    output.append(big_word)

    return output

    def getValue(target, reg):

    # 逆波兰

    RPN = []

    stack = []

    stack.append("#")

    for i in reg:

    if i in target.keys():

    RPN.append(target[i])

    elif i == "(":

    stack.append(i)

    elif i == ")":

    while stack[-1] != "(":

    RPN.append(stack.pop())

    stack.pop()

    elif i == "not":

    while stack[-1] == "not":

    RPN.append(stack.pop())

    stack.append(i)

    elif i == "and":

    while stack[-1] == "not" or stack[-1] == "and":

    RPN.append(stack.pop())

    stack.append(i)

    else:

    while stack[-1] == "not" or stack[-1] == "and" or stack[-1] == "or":

    RPN.append(stack.pop())

    stack.append(i)

    while len(stack) != 1:

    RPN.append(stack.pop())

    # 计算逆波兰式

    ans = []

    for i in RPN:

    if i == 0 or i == 1:

    ans.append(i)

    elif i == "not":

    ans.append(1 ^ ans.pop())

    elif i == "and":

    op1 = ans.pop()

    op2 = ans.pop()

    ans.append(op1 and op2)

    elif i == "or":

    op1 = ans.pop()

    op2 = ans.pop()

    ans.append(op1 or op2)

    return ans[0]

    def getW():

    word_list = {}

    with open('outputWeight.txt', mode='r', encoding='UTF-8')as f:

    for line in f.readlines():

    if line is not None:

    word = line.split(':')

    word_list[word[0]]=word[1]

    f.close()

    return word_list

    def BMM(origin_sentence):

    MAX_WORD = 19

    word_list = []

    with open('output.txt', mode='r', encoding='UTF-8')as f:

    for line in f.readlines():

    if line is not None:

    word = line.split(':')

    word_list.append(word[0])

    f.close()

    ans_word = []

    while len(origin_sentence) != 0:

    len_word = MAX_WORD

    while len_word > 0:

    # 从后读取最大词长度的数据,若该数据在字典中,则存入数组,并将其去除

    if origin_sentence[-len_word:] in word_list:

    ans_word.append(origin_sentence[-len_word:])

    len_sentence = len(origin_sentence)

    origin_sentence = origin_sentence[0:len_sentence - len_word]

    break

    # 不在词典中,则从后取词长度-1

    else:

    len_word = len_word - 1

    # 单词直接存入数组

    if len_word == 0:

    if origin_sentence[-1:] != ' ':

    ans_word.append(origin_sentence[-1:])

    len_sentence = len(origin_sentence)

    origin_sentence = origin_sentence[0:len_sentence - 1]

    return ans_word

    if __name__ == '__main__':

    w = getW()

    sentence = input("输入短语:")

    words = BMM(sentence)

    ans = []

    # 计算总文档数(一行一文档)

    count = 0

    for index, line in enumerate(open('语料库.txt', 'r', encoding='UTF-8')):

    count += 1

    with open('语料库.txt', mode='r', encoding='UTF-8') as f:

    for line in f.readlines():

    score = 0

    if line is not None and line != "\n":

    out = analysis(line)

    for word in words:

    # TF-IDF计算

    score = score + out.count(word) / len(out) * math.log(count*1.0/int(w[word]))

    ans.append((line, score))

    f.close()

    new_ans = sorted(ans, key=lambda a: a[1], reverse=True)

    for i in range(10):

    print(new_ans[i])

    4.实现效果

    c2b5c4154767b0d40f50cad2f8f5fcab.png

    929559dc68bb132d6304333acfb83bc3.png

    44b22e33badad715f32a0578eab37556.png

    展开全文
  • 信息检索(IR)—信息检索模型(一)

    千次阅读 2020-05-07 14:02:22
    信息检索(IR)—信息检索模型(一) 1. 信息检索模型的概念和分类 1.1 信息检索模型的概念 信息检索模型是一个四元组[D,Q,F,R(qi,dj)][D,Q,F,R(q_i,d_j)][D,Q,F,R(qi​,dj​)]所组成,其中D:表示文档集,Q表示用户的...
  • 布尔模型(Boolean Model) 要从文档集合D={d1,d2,…,dn}中检索出: 包含"北京妹纸",或者"杭州妹纸, "但不包括"日本妹纸"的文档。 假设D = {“北京的妹纸豪爽”,“北京是中国首都,而东京不是日本首都,一个妹纸说”,...
  • 检索模型即是判断文本是否与查询相关和对相关文本进行排序的数学模型,而且根据相关度判别方法的不同,发展出了不同的信息...总的说来,主要可分为向量模型、概率模型、布尔模型等。本文对这三种模型进行了调查和总结。
  • 2.什么是检索模型 IR的核心问题:预测哪些文档是相关的,哪些文档是不相关的。主要工作在于排序这个核心的问题,如何计算这个排序从而处理文档的相关性。 检索模型描述了如下这些细节 文档表示( Docume...
  • 布尔文献检索模型简介

    千次阅读 2019-08-01 16:36:25
    在没有网络的时候,手头能访问的...为了可以得到更准确、更相关的搜索结果,适合的信息检索数学模型是必不可少的。 布尔逻辑将是建立最早的模型,也是目前应用最广泛的检索技术。它是通过布尔逻辑运算符:逻辑与(A...
  • 信息检索导论 第一章内容总结
  • 对现有信息检索系统难以按查询需求处理检索文档的问题,提出了一种基于相关反馈的信息检索模型,分析了查询词分解,推导了相关反馈机制和正规化过程,并进一步阐述了文档提取方法。提出的模型通过相关反馈和查询词...
  • ①是否采用布尔搜索 ②输入查询文档或布尔表达式 4.2输出: 5、讨论和分析 ①向量空间算法是根据关键词进行判断的,对于本实验中的一词多义问题难以处理(gold既指金色也指黄金) ②构建的布尔搜索模型较为原始,仅...
  • 信息检索中,关于布尔检索和倒排索引部分。
  • 布尔检索模型

    万次阅读 2017-10-08 20:53:01
    最近在看《Introduction to Information Retrieval》(中文版为《信息检索导论》,下文简称为“IR”),是最经典的信息检索书籍之一了。由于淞姐要求我细读这本书然后跟同事分享,就有了这个版块,之后会陆续添加...
  • 如果用以下布尔模型, 会加快检索速度. 取横向量, 再进行bitwise运算。 Brutus AND Caesar AND NOT Calpurnia 110100 AND 110111 AND 101111 = 100100 这样可以极快的得到结果, 第一部和第四部作品满足条件。 ...
  • 这是有关布尔检索及其技术的更多信息的良好 。要求已安装 用于索引和搜索以数字命名的组成文档的语料库(例如 NLTK 数据中的路透社语料库)索引$ python index.py -i <directory> -d <dictionary> -p <postings> 是...
  • 本篇主要是掌握和测试布尔模型和向量模型在信息检索中应用的基本方法,计算出一些参数值,辅助搜索引擎去对最终各查询结果计算权值,排序。 首先介绍几个概念: 1. df(document frequency):总文档中包含每个 term...
  • 信息检索(IR)—信息检索模型(二)

    千次阅读 2020-05-07 22:05:58
    在之前的文章中,我们介绍了信息检索中的布尔模型,在布尔模型中我们基于关键词的布尔表达式进行匹配,在匹配的过程的中,我们只能够保证关键词的逻辑关系是否符合布尔表达式,但是确不能确定无法区别出结果的差异性...
  • 文章目录信息检索举个例子(词项-文档关联矩阵一个题目)相关术语及概念倒排索引倒排索引示例倒排索引构建布尔查询处理(案例)两个倒排记录表的合并算法查询优化基本布尔操作的拓展和有序检索模型 信息检索   信息...
  • 信息检索 构建信息检索系统和相关算法。 Java 网络爬虫:使用作为起始种子实现网络爬虫... Python 中的搜索引擎:为给定的 25 个查询集实现了五种不同的检索模型,并评估每个模型返回的前 1000 位文档列表。 此外,构
  • 信息检索模型

    2021-06-23 12:07:54
    布尔模型 优点 缺点 向量空间模型 模型描述 索引项 出现次数 TF-IDF 概率模型 二值独立模型(BIM) 二值(等价于布尔值):文档和查询都表示为此项出现与否的不二向量 词项在文档中的出现是相互独立的 ...
  • 布尔模型(Boolean Model)

    千次阅读 2021-07-01 14:41:13
    布尔模型描述 文档D表示:一个文档被表示为关键词的集合 查询式Q表示:查询式(Queries)被表示为关键词的布尔组合,用“与、或、非”连接起来,并用括弧指示优先次序 匹配F:一个文档当且仅当它能够满足布尔查询式时,...
  • IR:检索模型

    2021-08-25 22:40:54
    # 信息检索模型 信息检索的主题之一是定义一个无须工程师提炼规则的模型。这样的检索模型(retrieval model)应该尽可能准确地捕获相关性的概念。给定一组搜索结果,检索模型将对它们进行排序:结果越相关,分数越...
  • 信息检索笔记(一):布尔检索

    千次阅读 2018-04-18 13:04:26
    信息检索导论》学习笔记一、布尔检索二、倒排索引三、索引优化1、布尔索引模型概述布尔模型:对于关键词表示的文档使用布尔查询表达式进行查询,当且仅当文档满足布尔表达式时才将其检索出来,二值匹配,是或不是2...
  • [《从Lucene到Elasticsearch全文检索到实战》]
  • 布尔模型3. 倒排索引 1. 一些基础概念 两个检索有效性参数: IDF逆向文件频率 (Inverse Document Frequency) for term Tj dfjdf_jdfj​ (document frequency of term Tj) is number of documents in which Tj ...
  • #简单信息检索系统 (SIRS) 简单信息检索系统是圣母大学数据科学组的产品。... ##文档##解析器###Tokenizer ##索引器###倒排索引###直接索引##询问##检索模型###布尔模型##搜索引擎网络应用程序
  • 网络信息检索(二)扩展检索模型

    千次阅读 2020-03-11 16:32:33
    文章结构总览布尔模型扩展(1)模糊集合模型① 查询词扩展(2)扩展布尔模型3.向量空间模型扩展(1)广义向量空间模型(2)潜语义索引模型(3)词向量4.概率模型的扩展(1)语言模型 总览 布尔模型扩展 需要改进...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,686
精华内容 5,874
关键字:

信息检索布尔模型