在 Whoosh 中匹配令牌内的查询
Match a query within token in Whoosh
我想使用 Whoosh 对文本进行搜索。现在这仅适用于完全匹配的标记(space 分隔)。我也想在标记内进行匹配(例如:在标记“added”中匹配 add)。我知道词干和变体,但这不是我要找的。感谢您的帮助!
from whoosh.index import create_in
from whoosh.fields import Schema, TEXT, KEYWORD, ID, STORED
from whoosh.qparser import QueryParser
schema = Schema(title=TEXT(), content=TEXT())
indexpath = (r"C:\Users\rettenma\.jupyter\JupyterWork"+
r"folder\Python_Repository\bin\index")
ix = create_in(indexpath, schema)
writer = ix.writer()
writer.add_document(title=u"First document",
content=u"This is the first document we've added!")
writer.commit()
with ix.searcher() as searcher:
query = QueryParser("content", ix.schema).parse("add")
results = searcher.search(query, terms=True)
print(results[0])
由于结果为空,这将引发错误。
http://whoosh.readthedocs.io/en/latest/api/query.html#whoosh.query.Regex
听起来你需要正则表达式。
[编辑开始]
希望这对您有所帮助:
以上是第一个捕获OP描述的单词的例子。但是,我注意到存在一个问题,因为 Regex 示例还会捕获任何包含 "add" 的单词,包括 Addendum、Daddy 等。注意到这一点后,我修改并重新分叉了正则表达式示例,link 如下:
[编辑完成]
这是一个额外测试的示例,以确保您可以捕捉到单词 "add" 的所有变体,例如"add" / "adds" / "added" / "additional"。本质上,任何包含 "add" + 单词其余部分的内容。
我想使用 Whoosh 对文本进行搜索。现在这仅适用于完全匹配的标记(space 分隔)。我也想在标记内进行匹配(例如:在标记“added”中匹配 add)。我知道词干和变体,但这不是我要找的。感谢您的帮助!
from whoosh.index import create_in
from whoosh.fields import Schema, TEXT, KEYWORD, ID, STORED
from whoosh.qparser import QueryParser
schema = Schema(title=TEXT(), content=TEXT())
indexpath = (r"C:\Users\rettenma\.jupyter\JupyterWork"+
r"folder\Python_Repository\bin\index")
ix = create_in(indexpath, schema)
writer = ix.writer()
writer.add_document(title=u"First document",
content=u"This is the first document we've added!")
writer.commit()
with ix.searcher() as searcher:
query = QueryParser("content", ix.schema).parse("add")
results = searcher.search(query, terms=True)
print(results[0])
由于结果为空,这将引发错误。
http://whoosh.readthedocs.io/en/latest/api/query.html#whoosh.query.Regex
听起来你需要正则表达式。
[编辑开始]
希望这对您有所帮助:
以上是第一个捕获OP描述的单词的例子。但是,我注意到存在一个问题,因为 Regex 示例还会捕获任何包含 "add" 的单词,包括 Addendum、Daddy 等。注意到这一点后,我修改并重新分叉了正则表达式示例,link 如下:
[编辑完成]
这是一个额外测试的示例,以确保您可以捕捉到单词 "add" 的所有变体,例如"add" / "adds" / "added" / "additional"。本质上,任何包含 "add" + 单词其余部分的内容。