Jython & Clojure


Jython 2.7.2 comes bundled with the default installation of OpenRefine 3.4.1. You can add libraries and code by following this tutorial. A large number of Python files (.py or .pyc) are compatible.

Python code that depends on C bindings will not work in OpenRefine, which uses Java / Jython only. Since Jython is essentially Java, you can also import Java libraries and utilize those.

You will need to restart OpenRefine, so that new Jython or Python libraries are initialized during startup.

OpenRefine now has most of the Jsoup.org library built into GREL functions for parsing and working with HTML and XML elements.


Expressions in Jython must have a return statement:

return value[1:-1]
return rowIndex%2

Fields have to be accessed using the bracket operator rather than dot notation:

return cells["col1"]["value"]

For example, to access the edit distance between a reconciled value and an original cell value using recon variables:

return cell["recon"]["features"]["nameLevenshtein"]

To return the lower case of value (if the value is not null):

if value is not None:
return value.lower()
return None


Full documentation on the Jython language can be found on its official site: http://www.jython.org.


Clojure 1.10.1 comes bundled with the default installation of OpenRefine 3.4.1. At this time, not all variables can be used with Clojure expressions: only value, row, rowIndex, cell, and cells are available.

For example, functions can take the form

(.. value (toUpperCase) )

Or can look like

(-> value (str/split #" ") last )

which functions like value.split(" ") in GREL.

For help with syntax, see the Clojure website's guide to syntax.

User-contributed Clojure recipes can be found on our wiki at https://github.com/OpenRefine/OpenRefine/wiki/Recipes#11-clojure.

Full documentation on the Clojure language can be found on its official site: https://clojure.org/.

Last updated on by allanaaa