From ccde8805f5e64ccbe91b8f29f7f379aff19a94ca Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Tue, 4 Dec 2012 08:35:36 +0100 Subject: [PATCH] python api: allow specifying the stemming language --- src/doc/user/usermanual.sgml | 2 +- src/python/recoll/pyrecoll.cpp | 25 ++++++++++++++++++------- src/python/samples/recollq.py | 2 +- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/doc/user/usermanual.sgml b/src/doc/user/usermanual.sgml index c3695dd8..666327eb 100644 --- a/src/doc/user/usermanual.sgml +++ b/src/doc/user/usermanual.sgml @@ -3656,7 +3656,7 @@ CLASSES | | | execute(...) - | execute(query_string, stemming=1|0) + | execute(query_string, stemming=1|0, stemlang="stemming language") | | Starts a search for query_string, a Recoll search language string | (mostly Xesam-compatible). diff --git a/src/python/recoll/pyrecoll.cpp b/src/python/recoll/pyrecoll.cpp index 43de1940..9d199983 100644 --- a/src/python/recoll/pyrecoll.cpp +++ b/src/python/recoll/pyrecoll.cpp @@ -691,7 +691,7 @@ Query_sortby(recoll_QueryObject* self, PyObject *args, PyObject *kwargs) } PyDoc_STRVAR(doc_Query_execute, -"execute(query_string, stemming=1|0)\n" +"execute(query_string, stemming=1|0, stemlang=\"stemming language\")\n" "\n" "Starts a search for query_string, a Recoll search language string\n" "(mostly Xesam-compatible).\n" @@ -702,19 +702,30 @@ PyDoc_STRVAR(doc_Query_execute, static PyObject * Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs) { - LOGDEB(("Query_execute\n")); - static const char *kwlist[] = {"query_string", "stemming", NULL}; + LOGDEB1(("Query_execute\n")); + static const char *kwlist[] = {"query_string", "stemming", "stemlang", NULL}; char *sutf8 = 0; // needs freeing + char *sstemlang = 0; int dostem = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "es|i:Query_execute", + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "es|ies:Query_execute", (char**)kwlist, "utf-8", &sutf8, - &dostem)) { + &dostem, + "utf-8", &sstemlang)) { return 0; } - LOGDEB(("Query_execute: [%s]\n", sutf8)); + string utf8(sutf8); PyMem_Free(sutf8); + string stemlang("english"); + if (sstemlang) { + stemlang.assign(sstemlang); + PyMem_Free(sstemlang); + } + + LOGDEB(("Query_execute: [%s] dostem %d stemlang [%s]\n", sutf8, dostem, + stemlang.c_str())); + if (self->query == 0 || the_queries.find(self->query) == the_queries.end()) { PyErr_SetString(PyExc_AttributeError, "query"); @@ -724,7 +735,7 @@ Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs) // SearchData defaults to stemming in english // Use default for now but need to add way to specify language string reason; - Rcl::SearchData *sd = wasaStringToRcl(rclconfig, dostem ? "english" : "", + Rcl::SearchData *sd = wasaStringToRcl(rclconfig, dostem ? stemlang : "", utf8, reason); if (!sd) { diff --git a/src/python/samples/recollq.py b/src/python/samples/recollq.py index d6f4d44f..dc611373 100755 --- a/src/python/samples/recollq.py +++ b/src/python/samples/recollq.py @@ -19,7 +19,7 @@ def doquery(db, q): # Get query object query = db.query() # Parse/run input query string - nres = query.execute(q) + nres = query.execute(q, stemming = 1, stemlang="english") # Print results: print "Result count: ", nres