python api: allow specifying the stemming language

This commit is contained in:
Jean-Francois Dockes 2012-12-04 08:35:36 +01:00
parent 4c950fd6f8
commit 4ca419ce2b
3 changed files with 20 additions and 9 deletions

View File

@ -3656,7 +3656,7 @@ CLASSES
| |
| |
| execute(...) | 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 | Starts a search for query_string, a Recoll search language string
| (mostly Xesam-compatible). | (mostly Xesam-compatible).

View File

@ -691,7 +691,7 @@ Query_sortby(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
} }
PyDoc_STRVAR(doc_Query_execute, PyDoc_STRVAR(doc_Query_execute,
"execute(query_string, stemming=1|0)\n" "execute(query_string, stemming=1|0, stemlang=\"stemming language\")\n"
"\n" "\n"
"Starts a search for query_string, a Recoll search language string\n" "Starts a search for query_string, a Recoll search language string\n"
"(mostly Xesam-compatible).\n" "(mostly Xesam-compatible).\n"
@ -702,19 +702,30 @@ PyDoc_STRVAR(doc_Query_execute,
static PyObject * static PyObject *
Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs) Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
{ {
LOGDEB(("Query_execute\n")); LOGDEB1(("Query_execute\n"));
static const char *kwlist[] = {"query_string", "stemming", NULL}; static const char *kwlist[] = {"query_string", "stemming", "stemlang", NULL};
char *sutf8 = 0; // needs freeing char *sutf8 = 0; // needs freeing
char *sstemlang = 0;
int dostem = 1; 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, (char**)kwlist, "utf-8", &sutf8,
&dostem)) { &dostem,
"utf-8", &sstemlang)) {
return 0; return 0;
} }
LOGDEB(("Query_execute: [%s]\n", sutf8));
string utf8(sutf8); string utf8(sutf8);
PyMem_Free(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 || if (self->query == 0 ||
the_queries.find(self->query) == the_queries.end()) { the_queries.find(self->query) == the_queries.end()) {
PyErr_SetString(PyExc_AttributeError, "query"); PyErr_SetString(PyExc_AttributeError, "query");
@ -724,7 +735,7 @@ Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
// SearchData defaults to stemming in english // SearchData defaults to stemming in english
// Use default for now but need to add way to specify language // Use default for now but need to add way to specify language
string reason; string reason;
Rcl::SearchData *sd = wasaStringToRcl(rclconfig, dostem ? "english" : "", Rcl::SearchData *sd = wasaStringToRcl(rclconfig, dostem ? stemlang : "",
utf8, reason); utf8, reason);
if (!sd) { if (!sd) {

View File

@ -19,7 +19,7 @@ def doquery(db, q):
# Get query object # Get query object
query = db.query() query = db.query()
# Parse/run input query string # Parse/run input query string
nres = query.execute(q) nres = query.execute(q, stemming = 1, stemlang="english")
# Print results: # Print results:
print "Result count: ", nres print "Result count: ", nres