Python wrapper for Stanford CoreNLP's SUTime Java library.
>> pip install setuptools_scm jpype1 # install pre-reqs
>> pip install sutime
>> # use package pom.xml to install all Java dependencies via Maven into ./jars
>> mvn dependency:copy-dependencies -DoutputDirectory=./jars
Run the following command to add the Spanish language model:
>> mvn dependency:copy-dependencies -DoutputDirectory=./jars -P spanish
SUTime currently supports only English, British and Spanish (Source).
This Python wrapper is prepared to support the other CoreNLP languages (e.g. German) as well as soon as they get added to SUTime.
The following command can be used to download the language models for arabic
, chinese
, english
, french
, german
, and spanish
:
>> mvn dependency:copy-dependencies -DoutputDirectory=./jars -P <language>
However, SUTime only supports a subset (default model and spanish
) of CoreNLP's languages and the other language models will get ignored.
import json
import os
from sutime import SUTime
if __name__ == '__main__':
test_case = u'I need a desk for tomorrow from 2pm to 3pm'
jar_files = os.path.join(os.path.dirname(__file__), 'jars')
sutime = SUTime(jars=jar_files, mark_time_ranges=True)
print(json.dumps(sutime.parse(test_case), sort_keys=True, indent=4))
Result:
[
{
"end": 26,
"start": 18,
"text": "tomorrow",
"type": "DATE",
"value": "2016-10-14"
},
{
"end": 42,
"start": 27,
"text": "from 2pm to 3pm",
"type": "DURATION",
"value": {
"begin": "T14:00",
"end": "T15:00"
}
}
]
Other examples can be found in the test directory.
SUTime(jars=None, jvm_started=False, mark_time_ranges=False, include_range=False,
jvm_flags=None, language='english')
"""
jars: List of paths to the SUTime Java dependencies.
jvm_started: Optional attribute to specify if the JVM has already been
started (with all Java dependencies loaded).
mark_time_ranges: Optional attribute to specify CoreNLP property
sutime.markTimeRanges. Default is False.
"Tells sutime to mark phrases such as 'From January to March'
instead of marking 'January' and 'March' separately"
include_range: Optional attribute to specify CoreNLP property
sutime.includeRange. Default is False.
"Tells sutime to mark phrases such as 'From January to March'
instead of marking 'January' and 'March' separately"
jvm_flags: Optional attribute to specify an iterable of string flags
to be provided to the JVM at startup. For example, this may be
used to specify the maximum heap size using '-Xmx'. Has no effect
if jvm_started is set to True. Default is None.
language: Optional attribute to select language. The following options
are supported: english (/en), british, spanish (/es). Default is
english.
"""
sutime.parse(input_str, reference_date=''):
"""Parses datetime information out of string input.
It invokes the SUTimeWrapper.annotate() function in Java.
Args:
input_str: The input as string that has to be parsed.
reference_date: Optional reference data for SUTime.
Returns:
A list of dicts with the result from the SUTimeWrapper.annotate()
call.
"""
- The team behind Stanford CoreNLP for their awesome work and tools for the NLP community
- Luis Nell (Github: originell) and team for maintaining JPype as interface between Python and Java
- René Springer: Support for reference date
- Constantine Lignos: Support for JVM flags, adoption of CircleCI 2.0, fix for mutable default argument, fix for test execution
- GPLv3+ (check the LICENSE file)