2016-04-05 18 views
3

answer to another questionによると、sqliteでは、Levenshtein距離はeditdist3というSQL関数で実装されています。私はそれを使用しようとすると(もdocumentationの比較)sqliteで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 

私は、Gentoo Linux上のsqlite-3.11.1を使用しています(デフォルトの)USEフラグicureadline、およびsecure-deleteが付いています。

答えて

2

明示的にロードする必要があるsqlite拡張には、editdist3が含まれています。 Gentooのsqliteパッケージで見つけられなかったので、私自身もそれを構築しなければなりませんでした。 documentationが言うように:

spellfix1仮想テーブルは、SQLiteの合併 に含まれていないし、任意の標準のSQLiteビルドの一部ではありません。ロード可能な 拡張です。

最初に私はそれが

gcc -shared -fPIC -Wall -Isqlite-src-3110100 sqlite-src-3110100/ext/misc/spellfix.c -o spellfix.so 

をコンパイルする必要があり、最終的にそれが自動的にSQLiteの

.load ./spellfix 

注意をロードすることができ

wget https://sqlite.org/2016/sqlite-src-3110100.zip 
unzip sqlite-src-3110100.zip 

その後、ソースコードをフェッチ内線番号を追加します。。私の本来の意図だった - -

はpythonでそれを使用するために行われる次のようなニーズ:

db = sqlite3.connect(':memory:') 

db.enable_load_extension(True) 
db.load_extension('./spellfix') 
db.enable_load_extension(False)