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 标志icu,readline和secure-delete.
事实证明它editdist3包含在必须显式加载的 sqlite 扩展中。由于我在 Gentoo sqlite 包中没有\xe2\x80\x99 找到它,所以我还必须自己构建它。如文档所示所说:
\n\n\npellfix1 虚拟表不包含在 SQLite 合并中,并且不属于任何标准 SQLite 构建的一部分。它是一个可加载的扩展。
\n
首先我获取了源代码
\n\nwget https://sqlite.org/2016/sqlite-src-3110100.zip\nunzip sqlite-src-3110100.zip\nRun Code Online (Sandbox Code Playgroud)\n\n那么它必须被编译
\n\ngcc -shared -fPIC -Wall -Isqlite-src-3110100 sqlite-src-3110100/ext/misc/spellfix.c -o spellfix.so\nRun Code Online (Sandbox Code Playgroud)\n\n最后可以加载
\n\n.load ./spellfix\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,sqlite 会自动附加扩展名.so。
要在 python \xe2\x80\x93 中使用它,这是我的初衷 \xe2\x80\x93 ,需要完成以下操作:
\n\ndb = sqlite3.connect(\':memory:\')\n\ndb.enable_load_extension(True)\ndb.load_extension(\'./spellfix\')\ndb.enable_load_extension(False)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2461 次 |
| 最近记录: |