sqlite全文搜索标记器的python绑定

sqlitefts的Python项目详细描述


travisci build statusappveyor build status

sqlitefts python

sqlitefts python为SQLite Full-Text search(FTS3/4)FTS5的标记赋予器提供绑定。它允许您用python编写标记器。

sqlite有全文搜索功能fts3/fts4和fts5,还有一些predefined tokenizers for FTS3/4,还有predefined tokenizers for FTS5。 它易于使用,并且有足够的功能。python有一个内置的sqlite模块, 使其易于使用和部署。全文搜索不需要其他任何东西。

但是…对于包括日语在内的一些语言来说,预定义的标记器是不够的。同时,编写自己的标记器也不容易。 这个模块提供了使用python和CFFI编写标记器的能力,这样就不需要c编译器来编写标记器。

它还具有排序函数,它是基于A8的,实用函数添加了辅助函数,还有一个辅助函数实现。

注意:使用此模块的所有连接都应显式关闭。由于gc行为,当程序终止时,如果连接保持打开状态,则可能会崩溃。

样本标记器

由于fts3/4和fts5存在差异,因此定义了两个不同的基类。

  • fts3/4的标记器可以通过fts3tokenizeradaptor与fts5一起使用。
  • 如果不使用'flags',fts5的标记器可以与fts3/4一起使用。

富时3/4:

import sqlitefts as fts

class SimpleTokenizer(fts.Tokenizer):
    _p = re.compile(r'\w+', re.UNICODE)

    def tokenize(self, text):
        for m in self._p.finditer(text):
            s, e = m.span()
            t = text[s:e]
            l = len(t.encode('utf-8'))
            p = len(text[:s].encode('utf-8'))
            yield t, p, p + l

tk = sqlitefts.make_tokenizer_module(SimpleTokenizer())
fts.register_tokenizer(conn, 'simple_tokenizer', tk)

富时5指数:

from sqlitefts import fts5

class SimpleTokenizer(fts5.FTS5Tokenizer):
    _p = re.compile(r'\w+', re.UNICODE)

    def tokenize(self, text, flags=None):
        for m in self._p.finditer(text):
            s, e = m.span()
            t = text[s:e]
            l = len(t.encode('utf-8'))
            p = len(text[:s].encode('utf-8'))
            yield t, p, p + l

tk = fts5.make_fts5_tokenizer(SimpleTokenizer())
fts5.register_tokenizer(conn, 'simple_tokenizer', tk)

要求

  • Python 2.7, Python 3.3+, and PyPy2.7, PyPy3.2+
  • CFFI
  • FTS3/4 and/or FTS5 enabled SQLite3 or APSW (for Windows, you may need to download and replace sqlite3.dll)
    • SQLite 3.11.x have to be compiled with -DSQLITE_ENABLE_FTS3_TOKENIZER to enable 2-arg fts3_tokenizer
    • SQLite 3.10.2 and older versions do not have extra requirements. 2-arg fts3_tokenizer is always avaiable.
    • SQLite 3.12.0 and later vesrions do not have extra requirements. 2-arg fts3_tokenizer can be enabled dynamically.

apsw用户注意:apsw合并构建不公开此模块中使用的sqlite api,因此即使libsqlite3.so/sqlite3.dll对sqlite没有运行库依赖关系,它也是必需的。apsw本地构建已经依赖于共享库。详细信息:可以通过connection.config调用sqlite3_db_config,但它拒绝sqlite_dbconfig_enable_fts3_tokenizer注册新的tokenizer。在APSW 3.21.0-R1测试。

许可证

此软件是在麻省理工学院的许可下发布的,请参阅许可证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
数组Java For Loop没有输出(我认为)它应该如何输出   java Maven可以在一个模块中打包两个jar,使用相同的文件名但不同的图表集吗?   java OData读取单个实体最佳实践   java为什么我的代码在以下条件下返回false?   java QueryDsl投影元素集合   在为Java Swing元素实现ActionListener时,如何解决静态引用错误?   libGDX设置允许我使用java8,它在Android中崩溃   如何将日期从shell脚本传递到java即时数据类型   java如何向JList添加复选框和图像   java如何编写这个Listview?   java Eclipse每项目构建设置   java如何将spring引导应用程序指向外部jar的logback。xml   java更改EditText的下划线/样式。。。。。不是链接,而是水平滚动文本   java JPQL:使用复合键建模具有多个关系的查询实体   javascript如何获取Java中的最后32个字节   sql检查Java Derby中是否存在架构   java如何从视图中获取MVC Spring控制器中jstl select的所有项   java gson在需要对象时遇到空数组问题