2009-12-09 5 views
2

Existe-t-il de bonnes alternatives à SQLite + FTS3 pour python?Python SQLite FTS3 alternatives?

Je suis en train d'itérer sur une série de documents texte, et je voudrais les classer en fonction de certaines requêtes de texte. Par exemple, je pourrais vouloir savoir si un document mentionne les mots «évaluation» ou «amélioré» dans les trois mots de «acheter». La syntaxe FTS3 pour cette requête est la suivante:

(rating OR upgraded) NEAR/3 buy 

C'est bien beau, mais si je l'utilise FTS3, cette opération semble assez cher. Le processus ressemble à ceci:

# create an SQLite3 db in memory 
conn = sqlite3.connect(':memory:') 
c = conn.cursor() 
c.execute('CREATE VIRTUAL TABLE fts USING FTS3(content TEXT)') 
conn.commit() 

Ensuite, pour chaque document, faire quelque chose comme ceci:

#insert the document text into the fts table, so I can run a query 
c.execute('insert into fts(content) values (?)', content) 
conn.commit() 

# execute my FTS query here, look at the results, etc 

# remove the document text from the fts table before working on the next document 
c.execute('delete from fts') 
conn.commit() 

Cela me semble assez cher.

L'autre problème que j'ai avec SQLite FTS est qu'il ne semble pas fonctionner avec Python 2.5.4. La syntaxe 'CREATE VIRTUAL TABLE' n'est pas reconnue. Cela signifie que je devrais passer à Python 2.6, ce qui implique de tester à nouveau de nombreux scripts et programmes existants pour s'assurer qu'ils fonctionnent sous 2.6.

Y a-t-il un meilleur moyen? Peut-être une bibliothèque différente? Quelque chose de plus rapide? Je vous remercie.

+0

Hmmm, semble que je dois résoudre ce premier (après mise à niveau vers Python 2.6.4): c.execute ('CREATE TABLE FTS VIRTUELS EN UTILISANT FTS3 (contenu TEXT)') sqlite3.OperationalError: aucun module de ce type: FTS3 –

+1

Voir http://stackoverflow.com/questions/1545479/force-python-to-forego-native-sqlite3-and-use-the-installed-latest-sqlite3-vers –

Répondre

2

Je vous suggère d'installer le module pysqlite2 séparément. Vous devez vous assurer que vous avez installé sqlite3 dans votre système qui devrait avoir le module FTS3 ;-)

Checkout http://code.google.com/p/pysqlite/downloads/list pour le dernier code (à partir du 13 avril, c'est la version 2.6.0). C'est la construction habituelle de setuptools. Il devrait également se plaindre si sqlite3 n'est pas installé - ou si ses bibliothèques ne sont pas installées dans l'emplacement habituel/usr/lib (64). Dans ce dernier cas, mettez à jour votre LD_LIBRARY_PATH et modifiez éventuellement setup.cfg pour spécifier les chemins d'en-tête/lib.

Goodluck, Paul