如何在 whoosh 中使用 n 元语法

2024-02-17

我正在尝试使用 n-grams 来使用 Whoosh 进行“自动完成式”搜索。不幸的是我有点困惑。我做了一个这样的索引:

if not os.path.exists("index"):
    os.mkdir("index")
ix = create_in("index", schema)

ix = open_dir("index")

writer = ix.writer()
q = MyTable.select()
for item in q:
    print 'adding %s' % item.Title
    writer.add_document(title=item.Title, content=item.content, url = item.URL)
writer.commit()

然后我搜索标题字段,如下所示:

querystring = 'my search string'

parser = QueryParser("title", ix.schema)
myquery = parser.parse(querystring)

with ix.searcher() as searcher:
    results = searcher.search(myquery)
    print len(results)

    for r in results:
        print r

效果很好。但我想在自动完成中使用它,并且它与部分单词不匹配(例如搜索“ant”将返回“ant”,但不会返回“antelope”或“anteater”)。这当然极大地阻碍了使用它进行自动完成。这嗖嗖页面 http://whoosh.readthedocs.org/en/latest/recipes.html说使用这个:

analyzer = analysis.NgramWordAnalyzer()
title_field = fields.TEXT(analyzer=analyzer, phrase=False)
schema = fields.Schema(title=title_field)

但我对此感到困惑。这似乎只是该过程的“中间”,当我构建索引时,我是否必须将标题字段包含为 NGRAM 字段(而不是 TEXT)?我该如何进行搜索?所以当我搜索“ant”时我会得到[“ant”,“anteater”,“antelope”]等?


我通过创建两个单独的字段解决了这个问题。一项用于实际搜索,一项用于建议。 NGRAM 或 NGRAMWORDS 字段类型可用于“模糊搜索”功能。在你的情况下,它会是这样的:

# not sure how your schema looks like exactly
schema = Schema(
    title=NGRAMWORDS(minsize=2, maxsize=10, stored=True, field_boost=1.0, tokenizer=None, at='start', queryor=False, sortable=False)
    content=TEXT(stored=True),
    url=title=ID(stored=True),
    spelling=TEXT(stored=True, spelling=True)) # typeahead field

if not os.path.exists("index"):
os.mkdir("index")
ix = create_in("index", schema)

ix = open_dir("index")

writer = ix.writer()
q = MyTable.select()
for item in q:
    print 'adding %s' % item.Title
    writer.add_document(title=item.Title, content=item.content, url = item.URL)
    writer.add_document(spelling=item.Title) # adding item title to typeahead field
    self.addContentToSpelling(writer, item.content) # some method that adds some content words to typeheadfield if needed. The same way as above.
writer.commit()

那么什么时候进行搜索:

origQueryString = 'my search string'
words = self.splitQuery(origQueryString) # use tokenizers / analyzers or self implemented
queryString = origQueryString # would be better to actually create a query
corrector = ix.searcher().corrector("spelling")
for word in words:
    suggestionList = corrector.suggest(word, limit=self.limit)
    for suggestion in suggestionList:
         queryString = queryString + " " + suggestion # would be better to actually create a query      

parser = QueryParser("title", ix.schema)
myquery = parser.parse(querystring)

with ix.searcher() as searcher:
     results = searcher.search(myquery)
     print len(results)

    for r in results:
        print r

希望你能明白。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 whoosh 中使用 n 元语法 的相关文章

  • 在PyGI中获取窗口句柄

    在我的程序中 我使用 PyGObject PyGI 和 GStreamer 在 GUI 中显示视频 该视频显示在Gtk DrawingArea因此我需要获取它的窗口句柄realize 信号处理程序 在 Linux 上 我使用以下方法获取该句
  • 为什么我的混淆矩阵只返回一个数字?

    我正在做二元分类 每当我的预测等于事实时 我发现sklearn metrics confusion matrix返回单个值 难道没有问题吗 from sklearn metrics import confusion matrix print
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • ValueError:请使用“Layer”实例初始化“TimeDistributed”层

    我正在尝试构建一个可以在音频和视频样本上进行训练的模型 但出现此错误ValueError Please initialize TimeDistributed layer with a Layer instance You passed Te
  • 如何删除 PyCharm 中的项目?

    如果我关闭一个项目 然后删除该项目文件夹 则在 PyCharm 重新启动后 会再次创建一个空的项目文件夹 只需按顺序执行以下步骤即可 他们假设您当前在 PyCharm 窗口中打开了该项目 单击 文件 gt 关闭项目 关闭项目 在 PyCha
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 定义Python源代码编码的正确方法

    PEP 263 http www python org dev peps pep 0263 定义如何声明Python源代码编码 通常 Python 文件的前两行应以以下内容开头 usr bin python coding
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 如何获取numpy.random.choice的索引? - Python

    是否可以修改 numpy random choice 函数以使其返回所选元素的索引 基本上 我想创建一个列表并随机选择元素而不进行替换 import numpy as np gt gt gt a 1 4 1 3 3 2 1 4 gt gt
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • numpy:高效执行数组的复杂重塑

    我正在将供应商提供的大型二进制数组读入 2D numpy 数组 tempfid M N load data data numpy fromfile file dirname fid dtype numpy dtype i4 convert
  • 如何使用 Homebrew 在 Mac 上安装 Python 2 和 3?

    我需要能够在 Python 2 和 3 之间来回切换 我如何使用 Homebrew 来做到这一点 因为我不想弄乱路径并陷入麻烦 现在我已经通过 Homebrew 安装了 2 7 我会用pyenv https github com yyuu
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1

随机推荐

  • 如何获取d3中的变量属性

    如何使用 d3 返回变量的特定属性 例如 我想通过鼠标悬停来选择一个元素 并将选择传递给一个函数 但前提是该元素是id是一个特定的名字 像这样的东西吗 d3 select body on mouseover function if d3 s
  • 如何在提交按钮点击时调用谷歌验证码

    这是我的代码 document ready function submit click function var onloadCallback function submitlogin each function grecaptcha re
  • 结构内变量声明语句中的冒号运算符[重复]

    这个问题在这里已经有答案了 可能的重复 无符号温度 3 是什么意思 https stackoverflow com questions 2950029 what does unsigned temp3 means struct sample
  • 使用javascript重定向到html页面

    我有2个html页面 第一个是登录页面 第二个是登录时重定向到主页 必须在加载时执行 只有在登录后第一次加载页面时必须调用此方法 当我重新加载或刷新时 会再次调用此方法 1 can i refresh the page without ca
  • 在 ReactJs 中替换悬停时的元素

    在这段代码中 div class wrapper div class icon i i div div 每当用户将鼠标悬停在 图标 div 上时 此代码 i i 应该用这个替换 p Lorem ipsum p 我能够实现改变样式 但不知道如
  • 如何获得 ListView GridViewColumn 来填充网格中的剩余空间?

    我想创建一个 ListView 它有两列固定宽度和第三列来填充剩余空间 所以像这样
  • 如何使用 django 仅渲染 html 的一部分和数据

    我正在使用 ajax 对来自搜索结果的数据进行排序 现在我想知道是否可以只渲染 html 的一部分 以便我可以这样加载 result html nbsp load sort sortid sortid 我正在这样做 但我得到了整个 html
  • 将 printf 移动到不同的行会产生不同的输出? (C)

    在 C 中 当我移动此 printf 行时 printf f n 5 2 对于不同的线路 其输出会发生变化 有任何想法吗 代码如下 include
  • 如何将 apoc.load.csv 与 apoc.create.node 结合使用

    我需要导入 CSV 文件并从每条记录创建一个节点 我使用 APOC 是因为我可以在创建节点时使用 CSV 文件中的列来定义每个节点类型 这不起作用 CALL apoc load csv FILE C Temp Test Test Neo4j
  • 对于 Ajax 请求,省略 p:selectOneMenu 的验证

    我有一个 Jsf 页面 其中包含一个片段
  • winform应用主窗体

    我正在使用 asp net 和 C 开发一个应用程序 它使得使用母版页概念进行开发变得非常容易 现在我正在尝试开发一个Windows窗体应用程序 我真的需要在这里也有一个母版页 有没有诸如主表格之类的东西 谢谢 要在 winform 中模拟
  • 如何在textview中设置unicode以在android中显示表情符号?

    我从服务器获取一些 json 字符串格式的 Unicode 字符串 表情符号图标 我的问题很奇怪 过去两天我一直在努力解决这个问题 当我解析 json 并将所有 Unicode 字符串存储在ArrayList
  • 求树的最大深度

    我知道如何找到二叉树的深度 但我不能概括它适用于任何树 有人可以概述一下用于查找树 不一定是二叉树 深度的伪代码吗 int findDepthOfTree tree int deepest 0 for child of root node
  • 我使用的是哪个版本的 Objective-C?

    我如何知道什么版本Objective C我在用着 我正在使用带有 xCode 的 Mac 我之所以问这个问题是因为我有一本书 Objective C 3 0 并且它说你可以像这样声明一个多维数组 int num 新 int 2 2 当我尝试
  • jquery scrollpane ms ajax updatepanel 回发后不起作用

    我收到了一个网站的新设计 设计者在设计中使用了jquery 我正在将设计实现到 ASP NET Ajax 应用程序中 但我遇到了一个问题 我有一个带有更新面板和菜单的页面 单击菜单项时 用户控件将动态加载到更新面板上的占位符中 这使得页面没
  • MVC 站点地图提供程序和本地化

    今天我发现 对于我的网站 我可以使用从 Github 下载的适用于 MVC3 的 SiteMap 提供程序 因为我的 Web 应用程序是 MVC3 情况如下 我的申请是多语言的 我有一个单独的图书馆 其中包含所有资源 然后这个库被添加到我当
  • 重命名 ASP.NET Core Razor Pages 中的页面/共享目录

    我正在使用 ASP NET Core 5 Razor 页面 通用模板进去Pages Shared 但我需要将其重命名为Pages Foo 如何指示运行时查找文件Pages Foo 我认为这是可能的Startup ConfigureServi
  • OpenShift 上的 WebSocket 不适用于远程客户端

    我有一个无法解决的问题 我使用 socket io 或 WebSockets Node js 库在 openshift 卡带上实现了 Node js WebSockets 服务器 对于其中任何一个 结果都是相同的 使用在同一 openshi
  • 函数和子程序有什么区别?

    函数和子程序有什么区别 有人告诉我函数和子程序之间的区别如下 函数接受参数 在本地工作 不会改变任何值或使用其范围之外的任何值 高内聚 它还返回一些值 子例程直接使用调用者或调用它的代码段的值 并且不返回值 低内聚性 即将某些代码分支到其他
  • 如何在 whoosh 中使用 n 元语法

    我正在尝试使用 n grams 来使用 Whoosh 进行 自动完成式 搜索 不幸的是我有点困惑 我做了一个这样的索引 if not os path exists index os mkdir index ix create in inde