如何在sqlite中使用editdist3

bod*_*odo 5 sqlite gentoo levenshtein-distance

根据对另一个问题回答,在 sqlite 中,Levenshtein 距离是在名为editdist3. (也比较文档

现在,当我尝试使用它时,我得到的只是它不存在的错误:

???> sqlite3
SQLite version 3.11.1 2016-03-03 16:17:53
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE test (col1 TEXT);
sqlite> INSERT INTO test VALUES ('foobar');
sqlite> SELECT * FROM test WHERE editdist3(col1, 'f00bar') < 3;
Error: no such function: editdist3
Run Code Online (Sandbox Code Playgroud)

我在 Gentoo Linux 上使用 sqlite-3.11.1(默认) USE 标志icureadlinesecure-delete.

bod*_*odo 6

事实证明它editdist3包含在必须显式加载的 sqlite 扩展中。由于我在 Gentoo sqlite 包中没有\xe2\x80\x99 找到它,所以我还必须自己构建它。如文档所示所说:

\n\n
\n

pellfix1 虚拟表不包含在 SQLite 合并中,并且不属于任何标准 SQLite 构建的一部分。它是一个可加载的扩展。

\n
\n\n

首先我获取了源代码

\n\n
wget https://sqlite.org/2016/sqlite-src-3110100.zip\nunzip sqlite-src-3110100.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么它必须被编译

\n\n
gcc -shared -fPIC -Wall -Isqlite-src-3110100 sqlite-src-3110100/ext/misc/spellfix.c -o spellfix.so\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后可以加载

\n\n
.load ./spellfix\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,sqlite 会自动附加扩展名.so

\n\n

要在 python \xe2\x80\x93 中使用它,这是我的初衷 \xe2\x80\x93 ,需要完成以下操作:

\n\n
db = sqlite3.connect(\':memory:\')\n\ndb.enable_load_extension(True)\ndb.load_extension(\'./spellfix\')\ndb.enable_load_extension(False)\n
Run Code Online (Sandbox Code Playgroud)\n


归档时间:

查看次数:

2461 次

最近记录:

9 年,7 月 前