Repository: Acreom/quickadd Branch: master Commit: 0b3bfc26a734 Files: 69 Total size: 624.0 KB Directory structure: gitextract_m6r5n4y6/ ├── .codecov.yml ├── .editorconfig ├── .github/ │ └── ISSUE_TEMPLATE.md ├── .gitignore ├── .pyup.yml ├── .travis.yml ├── AUTHORS.rst ├── CONTRIBUTING.rst ├── HISTORY.rst ├── LICENSE ├── MANIFEST.in ├── Makefile ├── README.rst ├── ctparse/ │ ├── __init__.py │ ├── corpus.py │ ├── count_vectorizer.py │ ├── ctparse.py │ ├── loader.py │ ├── models/ │ │ ├── __init__.py │ │ ├── dummy.py │ │ └── model.pbz │ ├── nb_estimator.py │ ├── nb_scorer.py │ ├── partial_parse.py │ ├── pipeline.py │ ├── py.typed │ ├── rule.py │ ├── scorer.py │ ├── time/ │ │ ├── __init__.py │ │ ├── auto_corpus.py │ │ ├── corpus.py │ │ ├── postprocess_latent.py │ │ └── rules.py │ ├── timers.py │ └── types.py ├── datasets/ │ ├── README.rst │ └── timeparse_corpus.json ├── docs/ │ ├── Makefile │ ├── authors.rst │ ├── conf.py │ ├── contributing.rst │ ├── ctparse.rst │ ├── ctparse.time.rst │ ├── dataset.rst │ ├── history.rst │ ├── index.rst │ ├── installation.rst │ ├── make.bat │ ├── modules.rst │ ├── readme.rst │ └── usage.rst ├── mypy.ini ├── requirements.txt ├── requirements_dev.txt ├── scripts/ │ └── train_default_model.py ├── setup.cfg ├── setup.py ├── tests/ │ ├── __init__.py │ ├── test_corpus.py │ ├── test_count_vectorizer.py │ ├── test_ctparse.py │ ├── test_partialparse.py │ ├── test_regressions.py │ ├── test_rule.py │ ├── test_scorer.py │ ├── test_time_rules.py │ ├── test_timers.py │ └── test_types.py └── tox.ini ================================================ FILE CONTENTS ================================================ ================================================ FILE: .codecov.yml ================================================ comment: off ================================================ FILE: .editorconfig ================================================ # http://editorconfig.org root = true [*] indent_style = space indent_size = 4 trim_trailing_whitespace = true insert_final_newline = true charset = utf-8 end_of_line = lf [*.bat] indent_style = tab end_of_line = crlf [LICENSE] insert_final_newline = false [Makefile] indent_style = tab ================================================ FILE: .github/ISSUE_TEMPLATE.md ================================================ * ctparse - Parse natural language time expressions in pytho version: * Python version: * Operating System: ### Description Describe what you were trying to get done. Tell us what happened, what went wrong, and what you expected to happen. ### What I Did ``` Paste the command(s) you ran and the output. If there was a crash, please include the traceback here. ``` ================================================ FILE: .gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg .idea/ # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # dotenv .env # virtualenv .venv venv/ ENV/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ # pytest .pytest_cache/ # system .DS_Store # vscode .vscode ================================================ FILE: .pyup.yml ================================================ # autogenerated pyup.io config file # see https://pyup.io/docs/configuration/ for all available options update: insecure ================================================ FILE: .travis.yml ================================================ language: python sudo: required dist: xenial python: - 3.8 - 3.7 - 3.6 install: pip install -U tox-travis codecov script: tox after_success: codecov ================================================ FILE: AUTHORS.rst ================================================ ======= Credits ======= Development Lead ---------------- * Sebastian Mika Contributors ------------ * Gabriele Lanaro ================================================ FILE: CONTRIBUTING.rst ================================================ ============ Contributing ============ Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. You can contribute in many ways: Add Rules & Increase Coverage ----------------------------- If you find an expressions that ``ctparse`` can not resolve correctly but you feel it should do, you can adjust the existing rules or add a new one. The following steps are probably a helpful guideline. * Add your case to the ``corpus.py`` file and run the corpus tests using ``py.test tests/test_run_corpus.py``. Now basically two things can happen: #. **The tests pass**, which means ``ctparse`` can correctly resolve the expression. It might not score it highest. To check this, rebuild the model and try parsing the expression again: .. code:: bash make train To avoid issues with reloading, please restart the python interpreter after regenerating the model. If this fixes the issue please commit the updated ``corpus.py`` and the updated model as a pull request (PR) on GitHub, see this guide for more information on what pull requests are and how to create them https://help.github.com/articles/creating-a-pull-request/. The scoring can be influenced by adding more structurally identical examples to the corpus. Seeing more samples where a specific sequence of rule applications leads to the correct ranking will drive the model to favor these. This comes, however, at the potential price of downranking certain other production sequences. Although it would generally be considered more favorable to add varying test cases (e.g. in different languages, slight variation) to the corpus, the same string can also just be duplicated to achive this *implict up-weightning* effect. The examples that are intended to influence the scoring, as opposed to the ones used to develop new rules, are usually appended to the file ``auto_corpus.py```. #. **The tests fail**: if this is because not all tests in the corpus pass, i.e. you get an error message like the following:: ctparse.py 527 WARNING failure: target "Time[]{2019-X-X X:X (X/X)}" never produced in "2019" ctparse.py 532 WARNING failure: "Time[]{2019-X-X X:X (X/X)}" not always produced * If the tests fail, run ``ctparse`` in debug mode to see what goes wrong: .. code:: python import logging from ctparse import ctparse from ctparse.ctparse import logger from datetime import datetime logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.DEBUG) # Set reference time ts = datetime(2018, 3, 12, 14, 30) r = list(ctparse('May 5th', ts=ts, debug=True)) This gives you plenty of debugging output. First you will see the individual regular expressions that were matched (and the time this took):: ================================================================================ -> matching regular expressions regex: RegexMatch[0-3]{114:May} regex: RegexMatch[4-5]{133:5} regex: RegexMatch[4-7]{135:5th} regex: RegexMatch[4-5]{134:5} regex: RegexMatch[4-5]{148:5} time in _match_regex: 1ms ================================================================================ Each line has the form ``regex: RegexMatch[0-3]{114:May}`` and describes the matched span in the text ``[0-3]``, the ID of the matching expression ``114`` and the surface string that the expression matched ``May``. If relevant parts of your expression were not picked up, this is an indicator that you should either modify an existing regular expression or need to add a new rule (see below). Next you see the unique sub-sequences constructed based on these regular expressions (plus again the time used to build them):: ================================================================================ -> building initial stack regex stack (RegexMatch[0-3]{114:May}, RegexMatch[4-7]{135:5th}) regex stack (RegexMatch[0-3]{114:May}, RegexMatch[4-5]{148:5}) regex stack (RegexMatch[0-3]{114:May}, RegexMatch[4-5]{134:5}) regex stack (RegexMatch[0-3]{114:May}, RegexMatch[4-5]{133:5}) time in _regex_stack: 0ms initial stack length: 4 stack length after relative match length: 1 stack length after max stack depth limit: 1 ================================================================================ This is followed by a summary of how many applicable rules there are per initial stack element:: ================================================================================ -> checking rule applicability of 75 total rules 20 are applicable in (RegexMatch[0-3]{114:May}, RegexMatch[4-7]{135:5th}) time in _filter_rules: 0ms ================================================================================ ================================================================================ -> checking rule applicability of 75 total rules 20 are applicable in (RegexMatch[0-3]{114:May}, RegexMatch[4-5]{148:5}) time in _filter_rules: 0ms ================================================================================ ... Again, if you do not see any sequence that captures all relevant parts of your input, you may need to modify the regular expressions or add new ones via rules. Finally you see a list of productions that are applied to stack elements, where for each applicable rule the rule name and the new stack sequence are printed, e.g.:: -------------------------------------------------------------------------------- producing on (RegexMatch[0-3]{114:May}, RegexMatch[4-7]{135:5th}), score=-0.13 ruleMonthMay -> (Time[0-3]{X-05-X X:X (X/X)}, RegexMatch[4-7]{135:5th}), score=1.41 ruleDOM2 -> (RegexMatch[0-3]{114:May}, Time[4-7]{X-X-05 X:X (X/X)}), score=1.38 added 2 new stack elements, depth after trunc: 2 -------------------------------------------------------------------------------- If no productions could be applied to a stack element the emitted results are printed:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ no rules applicable: emitting => Time[0-7]{2018-05-05 X:X (X/X)}, score=15.91, -------------------------------------------------------------------------------- If the desired production does not show up, but the regular expressions look fine and the initial stack elements as well, try increasing the ``max_stack_depth`` parameter, i.e. run ``ctparse(..., max_stack_depth=0)``. Also make sure that the ``timeout`` parameter is not set. Maybe ``ctparse`` is able to generate the resolution but it is too deep in the stack. Adding a rule ~~~~~~~~~~~~~ When adding rules try to follow these guidelines: 1. Be as general as possible: instead of writing one long regular expression that matches only a specific case, check whether you can rather divide your pattern in production parts + some regular expressions. For example, if you have a very specific way to speficy the year of a date in mind, it might do no harm to just allow anything that with ``predicate('hasDate')`` plus your specific year expression, i.e. .. code:: python @rule(predicate('hasDate'), r'your funky year') 2. Keep your regex as general as possible, but avoid regular expressions that are likely to generate many "false positives". Often that can be prevented by using positive or negative lookaheads and lookbehinds to keep the context sane (see `Lookaround `_ on the excellent regular-expression.info site). 3. Make sure your production covers corner cases and matches the ``ctparse`` opinion to resolve to times in the near future but - unless explicit -- never in the past (relative to the reference time). Also make sure it favors the close future over the further future. Other Types of Contributions ---------------------------- Report Bugs ~~~~~~~~~~~ Report bugs at https://github.com/comtravo/ctparse/issues. If you are reporting a bug, please include: * Your operating system name and version. * Any details about your local setup that might be helpful in troubleshooting. * Detailed steps to reproduce the bug. Fix Bugs ~~~~~~~~ Look through the GitHub issues for bugs. Anything tagged with "bug" and "help wanted" is open to whoever wants to implement it. Implement Features ~~~~~~~~~~~~~~~~~~ Look through the GitHub issues for features. Anything tagged with "enhancement" and "help wanted" is open to whoever wants to implement it. Write Documentation ~~~~~~~~~~~~~~~~~~~ ctparse - Parse natural language time expressions in pytho could always use more documentation, whether as part of the official ctparse - Parse natural language time expressions in pytho docs, in docstrings, or even on the web in blog posts, articles, and such. Submit Feedback ~~~~~~~~~~~~~~~ The best way to send feedback is to file an issue at https://github.com/comtravo/ctparse/issues. If you are proposing a feature: * Explain in detail how it would work. * Keep the scope as narrow as possible, to make it easier to implement. * Remember that this is a volunteer-driven project, and that contributions are welcome :) Get Started! ------------ Ready to contribute? Here's how to set up `ctparse` for local development. 1. Fork the `ctparse` repo on GitHub. 2. Clone your fork locally:: $ git clone git@github.com:your_name_here/ctparse.git 3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:: $ mkvirtualenv ctparse $ cd ctparse/ $ python setup.py develop 4. Create a branch for local development:: $ git checkout -b name-of-your-bugfix-or-feature Now you can make your changes locally. 5. When you're done making changes, check that your changes pass flake8 and the tests, including testing other Python versions with tox:: $ flake8 ctparse tests $ python setup.py test or py.test $ tox To get flake8 and tox, just pip install them into your virtualenv. 6. Commit your changes and push your branch to GitHub:: $ git add . $ git commit -m "Your detailed description of your changes." $ git push origin name-of-your-bugfix-or-feature 7. Submit a pull request through the GitHub website. Pull Request Guidelines ----------------------- Before you submit a pull request, check that it meets these guidelines: 1. The pull request should include tests. 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst. 3. The pull request should work for Python 3.6., 3.7. and 3.8. Check https://travis-ci.org/comtravo/ctparse/pull_requests and make sure that the tests pass for all supported Python versions. Tips ---- To run a subset of tests:: $ py.test tests.test_ctparse Deploying --------- A reminder for the maintainers on how to deploy. Make sure all your changes are committed (including an entry in HISTORY.rst). Then run on the ``master`` branch:: $ bumpversion patch # possible: major / minor / patch $ git push $ git push --tags $ make release You will need a username and password to upload to pypi (might be automated on Travis). ================================================ FILE: HISTORY.rst ================================================ ======= History ======= 0.3.0 (2021-02-01) ------------------ * Removed latent rules regarding times (latent rules regarding dates are still present) * Added latent_time option to customize the new behavior, defauld behavior is backwards-compatible 0.2.1 (2020-05-27) ------------------ * Update development dependencies * Add flake8-bugbear and fixed issues 0.2.0 (2020-04-23) ------------------ * Implemented new type `Duration`, to handle lengths of time * Adapted the dataset to include `Duration` * Implemented basic rule to merge `Duration`, `Time` and `Interval` in simple cases. * Created a make target to train the model `make train` 0.1.0 (2020-03-20) ------------------ * Major refactor of code underlying predictive model * Based on a contribution from @bharathi-srini: replace naive bayes from sklearn by own implementation * Thus remove dependencies on numpy, scipy, scikit-learn * Predictions are much faster: 97/s in the old vs. 239/s in the new code base * Performance identical * Deprecate support for python 3.5, add 3.8 * Add more strict type checking rules (mypy.ini) * Force black code formatting, make this a linter step, "black" all code 0.0.47 (2020-02-28) ------------------- * Allow overlapping matches of regular expression when generating inital stack of "tokens" 0.0.46 (2020-02-26) ------------------- * Implemented heuristics to detect (albeit imperfectly) military times 0.0.44 (2019-11-05) ------------------- * Released time corpus * Implemented training model using ctparse corpus 0.0.43 (2019-11-01) ------------------- * Added slash as a general separator * Added ruleTODTOD (to support expression like afternoon/evening) 0.0.42 (2019-10-30) ------------------- * Removed nb module * Fix for two digit years * Freshly retrained model binary file 0.0.41 (2019-10-29) ------------------- * Fix run_corpus refactoring bug * Implemented retraining utilities 0.0.40 (2019-10-25) ------------------- * update develop dependencies * remove unused Protocol import from typing_extensions 0.0.39 (2019-10-24) ------------------- * split ctparse file into several different modules * added types to public interface * introduced the Scorer abstraction to implement richer scoring strategies 0.0.38 (2018-11-05) ------------------- * Added python 3.7 to supported versions (fix on travis available) 0.0.8 (2018-06-07) ------------------ * First release on PyPI. ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2018, Sebastian Mika, Comtravo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MANIFEST.in ================================================ include AUTHORS.rst include CONTRIBUTING.rst include HISTORY.rst include LICENSE include README.rst include requirements.txt recursive-include tests * recursive-exclude * __pycache__ recursive-exclude * *.py[co] recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif ================================================ FILE: Makefile ================================================ .PHONY: clean clean-test clean-pyc clean-build docs help .DEFAULT_GOAL := help define BROWSER_PYSCRIPT import os, webbrowser, sys try: from urllib import pathname2url except: from urllib.request import pathname2url webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1]))) endef export BROWSER_PYSCRIPT define PRINT_HELP_PYSCRIPT import re, sys for line in sys.stdin: match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line) if match: target, help = match.groups() print("%-20s %s" % (target, help)) endef export PRINT_HELP_PYSCRIPT BROWSER := python -c "$$BROWSER_PYSCRIPT" help: @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST) clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts clean-build: ## remove build artifacts rm -fr build/ rm -fr dist/ rm -fr .eggs/ find . -name '*.egg-info' -exec rm -fr {} + find . -name '*.egg' -exec rm -f {} + clean-pyc: ## remove Python file artifacts find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + find . -name '__pycache__' -exec rm -fr {} + clean-test: ## remove test and coverage artifacts rm -fr .tox/ rm -f .coverage rm -fr htmlcov/ rm -fr .pytest_cache lint: ## check style with flake8 black --check ctparse tests flake8 ctparse tests mypy -p ctparse -p tests test: ## run tests quickly with the default Python py.test test-all: ## run tests on every Python version with tox tox train: python scripts/train_default_model.py --legacy --dataset datasets/timeparse_corpus.json coverage: ## check code coverage quickly with the default Python coverage run --source ctparse -m pytest coverage report -m coverage html $(BROWSER) htmlcov/index.html docs: ## generate Sphinx HTML documentation, including API docs rm -f docs/ctparse.rst rm -f docs/modules.rst sphinx-apidoc -o docs/ ctparse $(MAKE) -C docs clean $(MAKE) -C docs html $(BROWSER) docs/_build/html/index.html servedocs: docs ## compile the docs watching for changes watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D . release: dist ## package and upload a release twine upload dist/* dist: clean ## builds source and wheel package python setup.py sdist python setup.py bdist_wheel ls -l dist install: clean ## install the package to the active Python's site-packages python setup.py install ================================================ FILE: README.rst ================================================ =========================================================== quickadd =========================================================== quickadd is a natural language date & time parser written in python. It builds on top of ctparse_ and is an actively maintained fork by Martin Antos. Installation ---------- With ``pip install -e git+https://github.com/Acreom/quickadd.git#egg=quickadd`` or run ``python setup.py install`` in the root directory after forking. Main upgrades include: ---------- **Recurring events** .. code:: python r = ctparse("beer daily 4pm") r.resolution Recurring[5-14]{daily 1 2021-05-09 16:00 (X/X) 2021-05-09 16:00 (X/X)} r = ctparse("beer every thursday 4") r.resolution Recurring[5-21]{weekly 1 2021-04-15 16:00 (X/X) 2021-04-15 16:00 (X/X)} r = ctparse("beer every friday 9-5") r.resolution Recurring[5-21]{weekly 1 2021-05-14 09:00 (X/X) 2021-05-14 17:00 (X/X)} r = ctparse("beer september 24 / beer every 24.9") r.resolution Recurring[5-21]{YEARLY 1 2021-09-24 (X/X) 2021-09-24 (X/X)} r = ctparse("beer thursdays 3pm and wednesdays 4pm") r.resolution RecurringArray[5-37]{ Recurring instance: weekly 1 2021-05-13 15:00 (X/X) 2021-05-13 15:00 (X/X) Recurring instance: weekly 1 2021-05-12 16:00 (X/X) 2021-05-12 16:00 (X/X) } r = ctparse("beer 9pm weekdays") r.resolution RecurringArray[5-17]{ Recurring instance: weekly 1 2021-05-10 21:00 (X/X) 2021-05-10 21:00 (X/X) Recurring instance: weekly 1 2021-05-11 21:00 (X/X) 2021-05-11 21:00 (X/X) Recurring instance: weekly 1 2021-05-12 21:00 (X/X) 2021-05-12 21:00 (X/X) Recurring instance: weekly 1 2021-05-13 21:00 (X/X) 2021-05-13 21:00 (X/X) Recurring instance: weekly 1 2021-05-14 21:00 (X/X) 2021-05-14 21:00 (X/X)} **More rules** ruleNextFrequency .. code:: python #reference date = Dec 13th 2022 r = ctparse("code next week 4pm") r.resolution Time[5-18]{2022-12-20 16:00 r = ctparse("code next month") r.resolution Time[5-15]{2023-01-13 X:X (X/X)} ruleLastDOM .. code:: python #reference date = Dec 13th 2022 r = ctparse("code last monday of the month") r.resolution Time[5-17]{2022-12-26 X:X (X/X)} rrule_ **support** .. code:: python r.resolution.to_rrule() Out[4]: 'RRULE:FREQ=DAILY;COUNT=1' **Subject extraction** .. code:: python r = ctparse("beers and burgers friday 8pm-9pm") r.subject Out[2]: 'beers and burgers' **PM bias** .. code:: python r = ctparse("fix the issue tmrw 2") r.resolution Time[14-20]{2022-11-23 14:00 (X/X)} r = ctparse("fix the issue tmrw 2", pm_bias=False) r.resolution Time[14-20]{2022-11-23 02:00 (X/X)} **Rules for ambigious natural language expressions** .. code:: python r = ctparse("code 9-5") r.resolution Interval[0-0]{2022-11-23 09:00 (X/X) - 2022-11-23 17:00 (X/X)} **US/EU date format** .. code:: python r = ctparse("fix the issue 5.3") r.resolution Time[14-17]{2023-03-05 X:X (X/X)} r = ctparse("fix the issue 5.3", date_format="US") r.resolution Time[14-17]{2023-05-03 X:X (X/X)} **Rule combinations** .. code:: python r = ctparse("beer in 3 days 4pm") r.resolution Time[5-18]{2021-05-12 16:00 (X/X)} r = ctparse("beer in 3 days 4pm every week") r.resolution Recurring[5-29]{weekly 1 2021-05-12 16:00 (X/X) 2021-05-12 16:00 (X/X)} r = ctparse("beer every friday 4-6:30pm") r.resolution Recurring[5-26]{WEEKLY 1 2022-11-25 16:00 (X/X) 2022-11-25 18:30 (X/X)} ``+`` **performance improvements** Base Capabilities ---------- | **Time** .. code:: python "beer thursday 4" Time[5-15]{2021-05-13 16:00 (X/X)} | **Interval** .. code:: python "beer 4-6" Interval[0-0]{2021-05-09 16:00 (X/X) - 2021-05-09 18:00 (X/X)} | **Duration** .. code:: python "beer in 4 hours" Duration[5-15]{4 hours} Ctparse ---------- The package ``ctparse`` is a pure python package to parse time expressions from natural language (i.e. strings). In many ways it builds on similar concepts as Facebook’s ``duckling`` package (https://github.com/facebook/duckling). However, for the time being it only targets times and only German and English text. In principle ``ctparse`` can be used to **detect** time expressions in a text, however its main use case is the semantic interpretation of such expressions. Detecting time expressions in the first place can - to our experience - be done more efficiently (and precisely) using e.g. CRFs or other models targeted at this specific task. ``ctparse`` is designed with the use case in mind where interpretation of time expressions is done under the following assumptions: - All expressions are relative to some pre-defined reference times - Unless explicitly specified in the time expression, valid resolutions are in the future relative to the reference time (i.e. ``12.5.`` will be the next 12th of May, but ``12.5.2012`` should correctly resolve to the 12th of May 2012). - If in doubt, resolutions in the near future are more likely than resolutions in the far future (not implemented yet, but any resolution more than i.e. 3 month in the future is extremely unlikely). The specific comtravo use-case is resolving time expressions in booking requests which almost always refer to some point in time within the next 4-8 weeks. ``ctparse`` currently is language agnostic and supports German and English expressions. This might get an extension in the future. The main reason is that in real world communication more often than not people write in one language (their business language) but use constructs to express times that are based on their mother tongue and/or what they believe to be the way to express dates in the target language. This leads to text in German with English time expressions and vice-versa. Using a language detection upfront on the complete original text is for obvious no solution - rather it would make the problem worse. Example ------- .. code:: python from ctparse import ctparse from datetime import datetime # Set reference time ts = datetime(2018, 3, 12, 14, 30) ctparse('May 5th 2:30 in the afternoon', ts=ts) This should return a ``Time`` object represented as ``Time[0-29]{2018-05-05 14:30 (X/X)}``, indicating that characters ``0-29`` were used in the resolution, that the resolved date time is the 5th of May 2018 at 14:30 and that this resolution is neither based on a day of week (first ``X``) nor a part of day (second ``X``). Latent time ~~~~~~~~~~~ Normally, ``ctparse`` will anchor time expressions to the reference time. For example, when parsing the time expression ``8:00 pm``, ctparse will resolve the expression to 8 pm after the reference time as follows .. code:: python parse = ctparse("8:00 pm", ts=datetime(2020, 1, 1, 7, 0), latent_time=True) # default # parse.resolution -> Time(2020, 1, 1, 20, 00) This behavior can be customized using the option ``latent_time=False``, which will return a time resolution not anchored to a particular date .. code:: python parse = ctparse("8:00 pm", ts=datetime(2020, 1, 1, 7, 0), latent_time=False) # parse.resolution -> Time(None, None, None, 20, 00) Implementation -------------- ``ctparse`` - as ``duckling`` - is a mixture of a rule and regular expression based system + some probabilistic modeling. In this sense it resembles a PCFG. Rules ~~~~~ At the core ``ctparse`` is a collection of production rules over sequences of regular expressions and (intermediate) productions. Productions are either of type ``Time``, ``Interval``, ``Duration`` or ``Recurring`` and can have certain predicates (e.g. whether a ``Time`` is a part of day like ``'afternoon'``). A typical rule than looks like this: .. code:: python @rule(predicate('isDate'), dimension(Interval)) I.e. this rule is applicable when the intermediate production resulted in something that has a date, followed by something that is in interval (like e.g. in ``'May 5th 9-10'``). The actual production is a python function with the following signature: .. code:: python @rule(predicate('isDate'), dimension(Interval)) def ruleDateInterval(ts, d, i): """ param ts: datetime - the current refenrence time d: Time - a time that contains at least a full date i: Interval - some Interval """ if not (i.t_from.isTOD and i.t_to.isTOD): return None return Interval( t_from=Time(year=d.year, month=d.month, day=d.day, hour=i.t_from.hour, minute=i.t_from.minute), t_to=Time(year=d.year, month=d.month, day=d.day, hour=i.t_to.hour, minute=i.t_to.minute)) This production will return a new interval at the date of ``predicate('isDate')`` spanning the time coded in ``dimension(Interval)``. If the latter does code for something else than a time of day (TOD), no production is returned, e.g. the rule matched but failed. Technical Background ~~~~~~~~~~~~~~~~~~~~ Some observations on the problem: - Each rule is a combination of regular expressions and productions. - Consequently, each production must originate in a sequence of regular expressions that must have matched (parts of) the text. - Hence, only subsequence of **all** regular expressions in **all** rules can lead to a successful production. To this end the algorithm proceeds as follows: 1. Input a string and a reference time 2. Find all matches of all regular expressions from all rules in the input strings. Each regular expression is assigned an identifier. 3. Find all distinct sequences of these matches where two matches do not overlap nor have a gap inbetween 4. To each such subsequence apply all rules at all possible positions until no further rules can be applied - in which case one solution is produced Obviously, not all sequences of matching expressions and not all sequences of rules applied on top lead to meaningful results. Here the **P**\ CFG kicks in: - Based on example data (``corpus.py``) a model is calibrated to predict how likely a production is to lead to a/the correct result. Instead of doing a breadth first search, the most promising productions are applied first. - Resolutions are produced until there are no more resolutions or a timeout is hit. - Based on the same model from all resolutions the highest scoring is returned. .. _ctparse: https://github.com/comtravo/ctparse .. _rrule: https://dateutil.readthedocs.io/en/stable/rrule.html Credits ------- This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template. .. _Cookiecutter: https://github.com/audreyr/cookiecutter .. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage ================================================ FILE: ctparse/__init__.py ================================================ """ctparse - parse time expressions in strings .. moduleauthor:: Comtravo """ __author__ = """Sebastian Mika""" __email__ = "sebastian.mika@comtravo.com" __version__ = "__version__ = '0.3.0'" from .ctparse import ctparse, ctparse_gen # noqa ================================================ FILE: ctparse/corpus.py ================================================ import json import logging from datetime import datetime from typing import Callable, Iterable, List, NamedTuple, Sequence, Tuple, TypeVar, Union from tqdm import tqdm from .ctparse import ctparse_gen from .scorer import DummyScorer, Scorer from .types import Artifact, Duration, Interval, Time logger = logging.getLogger(__name__) # A triplet of text, reference timestamp and correct parse. # It can be used as raw data to build datasets for ctparse. TimeParseEntry = NamedTuple( "TimeParseEntry", [("text", str), ("ts", datetime), ("gold", Artifact)], ) T = TypeVar("T") def make_partial_rule_dataset( entries: Sequence[TimeParseEntry], scorer: Scorer, timeout: Union[float, int], max_stack_depth: int, relative_match_len: float = 1.0, progress: bool = False, ) -> Iterable[Tuple[List[str], bool]]: """Build a data set from an iterable of TimeParseEntry. The text is run through ctparse and all parses (within the specified timeout, max_stack_depth and scorer) are obtained. Each parse contains a sequence of rules (see ``CTParse.rules``) used to produce that parse. A dataset is generated by taking every possible partial rule and assigning to it a boolean indicating if that partial sequence did lead to a successful parse. If `progress` is ``True``, display a progress bar. Example: rule sequence: [r1, r2, r3] parse_is_correct: True [r1] -> True [r1, r2] -> True [r1, r2, r3] -> True """ # If we look at the signature for a scorer, the score is obtained from: # (text, reference_time, partial_parse) and optionally a production for a # partial parse. # Clearly, if we were to make a general scorer for the dataset, we would need # all of these features. It is possible to achieve that by tracking the list of # partial parses that led to a correct parse. Unfortunately we don't have the # full history with the current implementation, however we can obtain a dataset # of (text, reference_time, rule_ids) quite easily, because the rule is a linear # list. if progress: entries_it = _progress_bar( entries, total=len(entries), status_text=lambda entry: " {: <70}".format(entry.text), ) else: entries_it = entries for entry in entries_it: for parse in ctparse_gen( entry.text, entry.ts, relative_match_len=relative_match_len, timeout=timeout, max_stack_depth=max_stack_depth, scorer=scorer, latent_time=False, ): # TODO: we should make sure ctparse_gen never returns None. If there is no # result it should return an empty list if parse is None: continue y = parse.resolution == entry.gold # Build data set, one sample for each applied rule in # the sequence of rules applied in this production # *after* the matched regular expressions for i in range(1, len(parse.production) + 1): X = [str(p) for p in parse.production[:i]] yield X, y def _progress_bar( it: Iterable[T], total: int, status_text: Callable[[T], str] ) -> Iterable[T]: # Progress bar that can update text pbar = tqdm(it, total=total) for val in pbar: pbar.set_description(status_text(val)) yield val def load_timeparse_corpus(fname: str) -> Sequence[TimeParseEntry]: """Load a corpus from disk. For more information about the format of the time parse corpus, refer to the documentation. """ with open(fname, "r", encoding="utf-8") as fd: entries = json.load(fd) return [ TimeParseEntry( text=e["text"], ts=datetime.strptime(e["ref_time"], "%Y-%m-%dT%H:%M:%S"), gold=parse_nb_string(e["gold_parse"]), ) for e in entries ] def parse_nb_string(gold_parse: str) -> Union[Time, Interval, Duration]: """Parse a Time, Interval or Duration from their no-bound string representation. The no-bound string representations are generated from ``Artifact.nb_str``. """ if gold_parse.startswith("Time"): return Time.from_str(gold_parse[7:-1]) if gold_parse.startswith("Interval"): return Interval.from_str(gold_parse[11:-1]) if gold_parse.startswith("Duration"): return Duration.from_str(gold_parse[11:-1]) else: raise ValueError("'{}' has an invalid format".format(gold_parse)) def run_corpus( corpus: Sequence[Tuple[str, str, Sequence[str]]] ) -> Tuple[List[List[str]], List[bool]]: """Load the corpus (currently hard coded), run it through ctparse with no timeout and no limit on the stack depth. The corpus passes if ctparse generates the desired solution for each test at least once. Otherwise it fails. While testing this, a labeled data set (X, y) is generated based on *all* productions. Given a final production p, based on initial regular expression matches r_0, ..., r_n, which are then subsequently transformed using production rules p_0, ..., p_m, will result in the samples [r_0, ..., r_n, p_0, 'step_0'] [r_0, ..., r_n, p_0, p_1, 'step_1'] ... [r_0, ..., r_n, p_0, ..., p_m, 'step_m'] All samples from one production are given the same label which indicates if the production was correct. To build a similar datasets without the strict checking, use `make_partial_rule_dataset` """ at_least_one_failed = False # pos_parses: number of parses that are correct # neg_parses: number of parses that are wrong # pos_first_parses: number of first parses generated that are correct # pos_best_scored: number of correct parses that have the best score pos_parses = neg_parses = pos_first_parses = pos_best_scored = 0 total_tests = 0 Xs = [] ys = [] for target, ts, tests in tqdm(corpus): ts = datetime.strptime(ts, "%Y-%m-%dT%H:%M") all_tests_pass = True for test in tests: one_prod_passes = False first_prod = True y_score = [] for parse in ctparse_gen( test, ts, relative_match_len=1.0, timeout=0, max_stack_depth=0, scorer=DummyScorer(), latent_time=False, ): assert parse is not None y = parse.resolution.nb_str() == target # Build data set, one sample for each applied rule in # the sequence of rules applied in this production # *after* the matched regular expressions for i in range(1, len(parse.production) + 1): Xs.append([str(p) for p in parse.production[:i]]) ys.append(y) one_prod_passes |= y pos_parses += int(y) neg_parses += int(not y) pos_first_parses += int(y and first_prod) first_prod = False y_score.append((parse.score, y)) if not one_prod_passes: logger.warning( 'failure: target "{}" never produced in "{}"'.format(target, test) ) pos_best_scored += int(max(y_score, key=lambda x: x[0])[1]) total_tests += len(tests) all_tests_pass &= one_prod_passes if not all_tests_pass: logger.warning('failure: "{}" not always produced'.format(target)) at_least_one_failed = True logger.info( "run {} tests on {} targets with a total of " "{} positive and {} negative parses (={})".format( total_tests, len(corpus), pos_parses, neg_parses, pos_parses + neg_parses ) ) logger.info( "share of correct parses in all parses: {:.2%}".format( pos_parses / (pos_parses + neg_parses) ) ) logger.info( "share of correct parses being produced first: {:.2%}".format( pos_first_parses / (pos_parses + neg_parses) ) ) logger.info( "share of correct parses being scored highest: {:.2%}".format( pos_best_scored / total_tests ) ) if at_least_one_failed: raise Exception("ctparse corpus has errors") return Xs, ys ================================================ FILE: ctparse/count_vectorizer.py ================================================ from collections import defaultdict from typing import Dict, Sequence, Tuple, Optional class CountVectorizer: def __init__(self, ngram_range: Tuple[int, int]): """Create new count vectorizer that also counts n-grams. A count vectorizer builds an internal vocabulary and embeds each input by counting for each term in the document how often it appearsin the vocabulary. Here also n-grams are considered to be part of the vocabulary and the document terms, respectively Parameters ---------- ngram_range : Tuple[int, int] n-gram range to consider """ self.ngram_range = ngram_range self.vocabulary: Optional[Dict[str, int]] = None @staticmethod def _create_ngrams( ngram_range: Tuple[int, int], documents: Sequence[Sequence[str]] ) -> Sequence[Sequence[str]]: """For each document in documents, replace original tokens by a list of all min_n:max_n = self.ngram_range ngrams in that document. Parameters ---------- ngram_range : Tuple[int, int] Min and max number of ngrams to generate documents : Sequence[Sequence[str]] A sequence of already tokenized documents Returns ------- Sequence[Sequence[str]] For each document all ngrams of tokens in the desired range """ min_n, max_n = ngram_range space_join = " ".join def _create(document: Sequence[str]) -> Sequence[str]: doc_len = len(document) doc_max_n = min(max_n, doc_len) + 1 if min_n == 1: ngrams = list(document) min_nn = min_n + 1 else: ngrams = [] min_nn = min_n for n in range(min_nn, doc_max_n): for i in range(0, doc_len - n + 1): ngrams.append(space_join(document[i : i + n])) return ngrams return [_create(d) for d in documents] @staticmethod def _get_feature_counts( ngram_range: Tuple[int, int], documents: Sequence[Sequence[str]] ) -> Sequence[Dict[str, int]]: """Count (ngram) features appearing in each document Parameters ---------- ngram_range : Tuple[int, int] Min and max number of ngrams to generate documents : Sequence[Sequence[str]] Sequence of documents tokenized as sequence of string Returns ------- Tuple[Sequence[Dict[str, int]], Set[str]] For each document a dictionary counting how often which feature appeared and a set of all features in all documents. Features are according to this vectorizers n-gram settings. """ documents = CountVectorizer._create_ngrams(ngram_range, documents) count_matrix = [] for document in documents: # This is 5x faster than using a build in Counter feature_counts: Dict[str, int] = defaultdict(int) for feature in document: feature_counts[feature] += 1 count_matrix.append(feature_counts) return count_matrix @staticmethod def _build_vocabulary(count_matrix: Sequence[Dict[str, int]]) -> Dict[str, int]: """Build the vocabulary from feature counts Parameters ---------- count_matrix : Sequence[Dict[str, int]] Sequence of dicts with counts (values) per feature (keys) Returns ------- Dict[str, int] The vocabulary as {feature: index} pairs """ all_features = set() for feature_counts in count_matrix: for feature in feature_counts.keys(): all_features.add(feature) return {word: idx for idx, word in enumerate(sorted(all_features))} @staticmethod def _create_feature_matrix( vocabulary: Dict[str, int], count_matrix: Sequence[Dict[str, int]] ) -> Sequence[Dict[int, int]]: """Map counts of string features to numerical data (sparse maps of `{feature_index: count}`). Here `feature_index` is relative to the vocabulary of this vectorizer. Parameters ---------- vocabulary : Dict[str, int] Vocabulary with {feature: index} mappings count_matrix : Sequence[Dict[str, int]] Sequence of dictionaries with feature counts Returns ------- Sequence[Dict[int, int]] For each document a mapping of `feature_index` to a count how often this feature appeared in the document. """ len_vocab = len(vocabulary) count_vectors_matrix = [] # Build document frequency matrix for count_dict in count_matrix: doc_vector: Dict[int, int] = defaultdict(int) for word, cnt in count_dict.items(): idx = vocabulary.get(word, None) if idx is not None: doc_vector[idx] = cnt count_vectors_matrix.append(doc_vector) # add vocab length in first element count_vectors_matrix[0][len_vocab - 1] = count_vectors_matrix[0][len_vocab - 1] return count_vectors_matrix def fit(self, documents: Sequence[Sequence[str]]) -> "CountVectorizer": """Learn a vocabulary dictionary of all tokens in the raw documents. Parameters ---------- documents : Sequence[Sequence[str]] Sequence of documents, each as a sequence of tokens Returns ------- CountVectorizer The updated vectorizer, i.e. this updates the internal vocabulary """ self.fit_transform(documents) return self def fit_transform( self, documents: Sequence[Sequence[str]] ) -> Sequence[Dict[int, int]]: """Learn the vocabulary dictionary and return a term-document matrix. Updates the internal vocabulary state of the vectorizer. Parameters ---------- documents : Sequence[Sequence[str] Sequence of documents, each as a sequence of tokens Returns ------- Sequence[Dict[int, int]] Document-term matrix. """ count_matrix = CountVectorizer._get_feature_counts(self.ngram_range, documents) self.vocabulary = CountVectorizer._build_vocabulary(count_matrix) return CountVectorizer._create_feature_matrix(self.vocabulary, count_matrix) def transform(self, documents: Sequence[Sequence[str]]) -> Sequence[Dict[int, int]]: """Create term-document matrix based on pre-generated vocabulary. Does *not* update the internal state of the vocabulary. Parameters ---------- documents : Sequence[Sequence[str]] Sequence of documents, each as a sequence of tokens Returns ------- Sequence[Dict[int, int]] Document-term matrix. """ if not self.vocabulary: raise ValueError("no vocabulary - vectorizer not fitted?") count_matrix = CountVectorizer._get_feature_counts(self.ngram_range, documents) return CountVectorizer._create_feature_matrix(self.vocabulary, count_matrix) ================================================ FILE: ctparse/ctparse.py ================================================ from ctparse.time.postprocess_latent import apply_postprocessing_rules import logging from datetime import datetime from typing import ( cast, Callable, Dict, Iterator, List, Optional, Sequence, Tuple, Union, ) import re import regex from itertools import chain from .partial_parse import PartialParse from .rule import _regex as global_regex, eu_regex, us_regex from .scorer import Scorer from .timers import CTParseTimeoutError, timeit # Avoid collision with variable "timeout" from .timers import timeout as timeout_ from .types import Artifact, RegexMatch from .loader import load_default_scorer logger = logging.getLogger(__name__) _DEFAULT_SCORER = load_default_scorer() class CTParse: def __init__( self, resolution: Artifact, production: Tuple[Union[int, str], ...], score: float, subject: str, # labels: str, ) -> None: """A possible parse returned by ctparse. :param resolution: the parsed `Time`, `Interval` or `Duration` :param production: the sequence of rules (productions) used to arrive at the parse :param score: a numerical score used to rank parses. A high score means a more likely parse """ self.resolution = resolution self.production = production self.score = score self.subject = subject # self.labels = labels def __repr__(self) -> str: return "CTParse({}, {}, {}, {})".format( self.resolution, self.production, self.score, self.subject) #self.labels def __str__(self) -> str: return "{} s={:.3f} p={} sb={}".format(self.resolution, self.score, self.production, self.subject) #self.labels) def ctparse( txt: str, ts: Optional[datetime] = None, pm_bias: Optional[bool] = True, date_format: Optional[str] = None, fallback: Optional[bool] = False, timeout: Union[int, float] = 1.0, debug: bool = False, relative_match_len: float = 1.0, max_stack_depth: int = 10, scorer: Optional[Scorer] = None, latent_time: bool = True, ) -> Optional[CTParse]: """Parse a string *txt* into a time expression :param ts: reference time :type ts: datetime.datetime :param pm_bias: pm bias on or off / 24h or 12h format :param date_format: us / eu date format :param fallback: fallback option if default date format is not parsed :param timeout: timeout for parsing in seconds; timeout=0 indicates no timeout :type timeout: float :param debug: if True do return iterator over all resolution, else return highest scoring one (default=False) :param relative_match_len: relative minimum share of characters an initial regex match sequence must cover compared to the longest such sequence found to be considered for productions (default=1.0) :type relative_match_len: float :param max_stack_depth: limit the maximal number of highest scored candidate productions considered for future productions (default=10); set to 0 to not limit :type max_stack_depth: int :param latent_time: if True, resolve expressions that contain only a time (e.g. 8:00 pm) to be the next matching time after reference time *ts* :returns: Optional[CTParse] """ parsed = ctparse_gen( txt, ts, pm_bias, date_format, fallback, timeout=timeout, relative_match_len=relative_match_len, max_stack_depth=max_stack_depth, scorer=scorer, latent_time=latent_time, ) # TODO: keep debug for back-compatibility, but remove it later if debug: return parsed # type: ignore else: parsed_list = list(parsed) # TODO: this way of testing a failure to find a match is a bit clunky with types if len(parsed_list) == 0 or (len(parsed_list) == 1 and parsed_list[0] is None): # logger.warning('Failed to produce result for "{}"'.format(txt)) # labels = _get_labels(txt) txt = re.sub('#[a-zA-Z0-9\-_:/.]+', '', txt).strip() subject = txt return CTParse(None, None, None, subject)# labels) parsed_list.sort(key=lambda p: p.score) # type: ignore return parsed_list[-1] def ctparse_gen( txt: str, ts: Optional[datetime] = None, pm_bias: Optional[bool] = True, date_format: Optional[str] = None, fallback: Optional[bool] = False, timeout: Union[int, float] = 1.0, relative_match_len: float = 1.0, max_stack_depth: int = 10, scorer: Optional[Scorer] = None, latent_time: bool = True, ) -> Iterator[Optional[CTParse]]: """Generate parses for the string *txt*. This function is equivalent to ctparse, with the exception that it returns an iterator over the matches as soon as they are produced. """ if scorer is None: scorer = _DEFAULT_SCORER if ts is None: ts = datetime.now() generated_parse = list(_ctparse( _preprocess_string(txt), ts, pm_bias, date_format, timeout=timeout, relative_match_len=relative_match_len, max_stack_depth=max_stack_depth, scorer=scorer, )) if fallback and not generated_parse: if date_format == "US": fallback_date_format = "EU" else: fallback_date_format = "US" for parse in _ctparse( _preprocess_string(txt), ts, pm_bias, date_format=fallback_date_format, timeout=timeout, relative_match_len=relative_match_len, max_stack_depth=max_stack_depth, scorer=scorer, ): if parse and latent_time: # NOTE: we post-process after scoring because the model has been trained # without using the latent time. This means also that the post processing # step won't be added to the rules prod = apply_postprocessing_rules(ts, parse.resolution) parse.resolution = prod yield parse else: for parse in generated_parse: if parse and latent_time: # NOTE: we post-process after scoring because the model has been trained # without using the latent time. This means also that the post processing # step won't be added to the rules prod = apply_postprocessing_rules(ts, parse.resolution) parse.resolution = prod yield parse # for parse in _ctparse( # _preprocess_string(txt), # ts, # pm_bias, # date_format, # timeout=timeout, # relative_match_len=relative_match_len, # max_stack_depth=max_stack_depth, # scorer=scorer, # ): # if parse and latent_time: # # NOTE: we post-process after scoring because the model has been trained # # without using the latent time. This means also that the post processing # # step won't be added to the rules # prod = apply_postprocessing_rules(ts, parse.resolution) # parse.resolution = prod # # yield parse def _ctparse( txt: str, ts: datetime, pm_bias: bool, date_format: str, timeout: float, relative_match_len: float, max_stack_depth: int, scorer: Scorer, ) -> Iterator[Optional[CTParse]]: t_fun = timeout_(timeout) try: # =========== Label extraction =========== # labels = _get_labels(txt) # clear raw text of labels so what follows works properly # txt = re.sub('#[a-zA-Z0-9\-_:/.]+','', txt).strip() logger.debug("=" * 80) logger.debug("-> matching regular expressions") scope_regex = {**global_regex, **us_regex} if date_format == 'US' else {**global_regex, **eu_regex} p, _tp = timeit(_match_regex)(txt, scope_regex) logger.debug("time in _match_regex: {:.0f}ms".format(1000 * _tp)) logger.debug("=" * 80) logger.debug("-> building initial stack") regex_stack, _ts = timeit(_regex_stack)(txt, p, t_fun) logger.debug("time in _regex_stack: {:.0f}ms".format(1000 * _ts)) # add empty production path + counter of contained regex stack = [PartialParse.from_regex_matches(s) for s in regex_stack] # TODO: the score should be kept separate from the partial parse # because it depends also on the text and the ts. A good idea is # to create a namedtuple of kind StackElement(partial_parse, score) for pp in stack: pp.score = scorer.score(txt, ts, pp) logger.debug("initial stack length: {}".format(len(stack))) # sort stack by length of covered string and - if that is equal - score # --> last element is longest coverage and highest scored stack.sort() # only keep initial stack elements that cover at least # relative_match_len characters of what the highest # scored/covering stack element does cover stack = [ s for s in stack if s.max_covered_chars >= stack[-1].max_covered_chars * relative_match_len ] logger.debug("stack length after relative match length: {}".format(len(stack))) # limit depth of stack stack = stack[-max_stack_depth:] logger.debug("stack length after max stack depth limit: {}".format(len(stack))) # ======================== SUBJECT-EXTRACTION ======================== # get subject by extracting regex stack from raw text regex_matches = [match.prod for match in stack] regex_matches = [product.match.captures() for tuple in regex_matches for product in tuple] regex_matches = [match.split() for i in regex_matches for match in i] regex_matches = list(chain.from_iterable(regex_matches)) # "acr-11" edge case s = re.search(r'\b[A-Za-z]+\b-\d+[A-Za-z]*', txt) if s: raw = re.split(r'[\s]+', txt) else: raw = re.split(r'[\s-]+', txt) # subject = list(set(raw) - set(matches)) # doesn't preserve order, but more efficient subject = [i for i in raw if i not in regex_matches] subject = ' '.join(subject) # remove subject from txt so there's no FP parse if subject and subject in txt: txt = subject.replace(txt, '') # reset stack if txt is 0 if len(txt) == 0: stack = [] # =========================================================== # track what has been added to the stack and do not add again # if the score is not better stack_prod = {} # type: Dict[Tuple[Artifact, ...], float] # track what has been emitted and do not emit again parse_prod = {} # type: Dict[Artifact, float] while stack: t_fun() s = stack.pop() logger.debug("-" * 80) logger.debug("producing on {}, score={:.2f}".format(s.prod, s.score)) new_stack_elements = [] for r_name, r in s.applicable_rules.items(): for r_match in _match_rule(s.prod, r[1]): # apply production part of rule new_s = s.apply_rule(ts, pm_bias, date_format, r[0], r_name, r_match) # TODO: We should store scores separately from the production itself # because the score may depend on the text and the ts if new_s is not None: new_s.score = scorer.score(txt, ts, new_s) if ( new_s and stack_prod.get(new_s.prod, new_s.score - 1) < new_s.score ): # either new_s.prod has never been produced # before or the score of new_s is higher than # a previous identical production new_stack_elements.append(new_s) logger.debug( " {} -> {}, score={:.2f}".format( r_name, new_s.prod, new_s.score ) ) stack_prod[new_s.prod] = new_s.score if not new_stack_elements: logger.debug("~" * 80) logger.debug("no rules applicable: emitting") # no new productions were generated from this stack element. # emit all (probably partial) production for x in s.prod: if not isinstance(x, RegexMatch): # TODO: why do we have a different method for scoring # final productions? This is because you may have non-reducible # parses of the kind [Time, RegexMatch, Interval] or # [Time, Time] etc. In this case we want to emit those Time, # Interval parses separately and score them appropriately # (the default Scorer.score function only operates on the # whole PartialParse). score_x = scorer.score_final(txt, ts, s, x) # only emit productions not emitted before or # productions emitted before but scored higher if parse_prod.get(x, score_x - 1) < score_x: parse_prod[x] = score_x logger.debug( " => {}, score={:.2f}, ".format(x.__repr__(), score_x) ) yield CTParse(x, s.rules, score_x, subject)#, labels) else: # new productions generated, put on stack and sort # stack by highst score stack.extend(new_stack_elements) stack.sort() stack = stack[-max_stack_depth:] logger.debug( "added {} new stack elements, depth after trunc: {}".format( len(new_stack_elements), len(stack) ) ) except CTParseTimeoutError: logger.debug('Timeout on "{}"'.format(txt)) return # replace all comma, semicolon, whitespace, invisible control, opening and # closing brackets # _repl1 = regex.compile(r"[,;\pZ\pC\p{Ps}\p{Pe}]+", regex.VERSION1) # original regex _repl1 = regex.compile(r"[\pZ\pC]+", regex.VERSION1) # allow brackets _repl2 = regex.compile(r"(\p{Pd}|[\u2010-\u2015]|\u2043)+", regex.VERSION1) def _get_labels(txt: str) -> str: labels = re.findall('#[a-zA-Z0-9\-_:/.]+', txt) labels = [label.replace("#", "") for label in labels] return labels def _preprocess_string(txt: str) -> str: return cast( str, _repl2.sub("-", _repl1.sub(" ", txt, concurrent=True).strip()).strip() ) def _match_rule( seq: Sequence[Artifact], rule: Sequence[Callable[[Artifact], bool]] ) -> Iterator[Tuple[int, int]]: if not seq: return if not rule: return i_r = 0 i_s = 0 r_len = len(rule) s_len = len(seq) while i_s < s_len: if rule[0](seq[i_s]): i_start = i_s + 1 i_r = 1 while i_start < s_len and i_r < r_len and rule[i_r](seq[i_start]): i_r += 1 i_start += 1 if i_r == r_len: yield i_s, i_start i_s += 1 def _match_regex(txt: str, regexes: Dict[int, regex.Regex]) -> List[RegexMatch]: # Match a collection of regexes in *txt* # # The returned RegexMatch objects are sorted by the start of the match # :param txt: the text to match against # :param regexes: a collection of regexes name->pattern # :return: a list of RegexMatch objects ordered my RegexMatch.mstart matches = { RegexMatch(name, m) for name, re in regexes.items() for m in re.finditer(txt, overlapped=True, concurrent=True) } for m in matches: logger.debug("regex: {}".format(m.__repr__())) return sorted(matches, key=lambda x: (x.mstart, x.mend)) def _regex_stack( txt: str, regex_matches: List[RegexMatch], on_do_iter: Callable[[], None] = lambda: None, ) -> List[Tuple[RegexMatch, ...]]: # Group contiguous RegexMatch objects together. # # Assumes that regex_matches are sorted by increasing start index. on_do_iter # is a callback that will be invoked every time the algorithm performs a loop. # # Example: # Say you have the following text, where the regex matches are the # words between square brackets. # # [Tomorrow] I want to go to the movies between [2] [pm] and [5] [pm]. # # This function will return the matches that are contiguous (excluding space # characters) # [Tomorrow] # [2], [pm] # [5], [pm] # # This also works with overlapping matches. # # Algo: # * initialize an empty stack # # * add all sequences of one expression to the stack, excluding # expressions which can be reached from "earlier" expression # (i.e. there is no gap between them): # # - say A and B have no gap in between and all sequences starting # at A have already been produced. These by definition(which?: -) include as # sub-sequences all sequences starting at B. Any other sequences starting # at B directly will not add valid variations, as each of them could be # prefixed with a sequence starting at A # # * while the stack is not empty: # # * get top sequence s from stack # # * generate all possible continuations for this sequence, # i.e. sequences where expression can be appended to the last # element s[-1] in s and put these extended sequences on the stack # # * if no new continuation could be generated for s, this sequence of # RegexMatch is appended to the list of results. prods = [] n_rm = len(regex_matches) # Calculate the upper triangle of an n_rm x n_rm matrix M where # M[i, j] == 1 (for i avoid use of numpy here; since we need column sums below, # --> the representation of M is columns major, i.e. M[i] is the i-th # --> column; M[i, j] then basically becomes M[j][i] M = [[0 for _ in range(n_rm)] for _ in range(n_rm)] _separator_regex = regex.compile(r"\s*", regex.VERSION1) def get_m_dist(m1: RegexMatch, m2: RegexMatch) -> int: # 1 if there is no relevant gap between m1 and m2, 0 otherwise # assumes that m1 and m2 are sorted be their start index if m2.mstart < m1.mend: return 0 # Overlap gap_match = _separator_regex.fullmatch(txt[m1.mend : m2.mstart]) if gap_match: return 1 # No Gap else: return 0 # Gap for i in range(n_rm): for j in range(i + 1, n_rm): M[j][i] = get_m_dist(regex_matches[i], regex_matches[j]) # NOTE(glanaro): I believe this means that this is a beginning node. # why reversed? stack = [ (i,) for i in reversed(range(n_rm)) if sum(M[i]) == 0 ] # type: List[Tuple[int, ...]] while stack: on_do_iter() s = stack.pop() i = s[-1] new_prod = False for j in range(i + 1, n_rm): if M[j][i] == 1: stack.append(s + (j,)) new_prod = True if not new_prod: prod = tuple(regex_matches[i] for i in s) logger.debug("regex stack {}".format(prod)) prods.append(prod) return prods ================================================ FILE: ctparse/loader.py ================================================ """Utility to load default model in ctparse""" import bz2 import logging import os import pickle from .scorer import Scorer, DummyScorer from .nb_scorer import NaiveBayesScorer logger = logging.getLogger(__name__) # Location of the default model, included with ctparse DEFAULT_MODEL_FILE = os.path.join(os.path.dirname(__file__), "models", "model.pbz") def load_default_scorer() -> Scorer: resource = 'model.pbz' path = os.path.join(os.path.dirname(__file__), resource) # logger.warning(path) # debug # logger.warning([x.name for x in pkgutil.walk_packages()]) # for exec usage if os.access(path, mode=os.F_OK): # d = os.path.dirname(sys.modules[package].__file__) # logger.warning(os.path.join(d, resource)) with bz2.open(path, 'rb') as f: # logger.warning(str(f)) mdl = pickle.load(f) return NaiveBayesScorer(mdl) # for non-exec usage elif os.path.exists(DEFAULT_MODEL_FILE): logger.info("Loading model from {} for non-exec usage".format(DEFAULT_MODEL_FILE)) with bz2.open(DEFAULT_MODEL_FILE, "rb") as fd: mdl = pickle.load(fd) return NaiveBayesScorer(mdl) else: logger.warning("No model found, initializing empty scorer") return DummyScorer() ================================================ FILE: ctparse/models/__init__.py ================================================ from .dummy import model_package_init ================================================ FILE: ctparse/models/dummy.py ================================================ def model_package_init(): return 1 == 1 ================================================ FILE: ctparse/nb_estimator.py ================================================ from typing import Sequence, Dict, Tuple, List from math import log, exp def _log_sum_exp(x: Sequence[float]) -> float: max_value = max(x) sum_of_exp = sum(exp(x_i - max_value) for x_i in x) return max_value + log(sum_of_exp) class MultinomialNaiveBayes: """Implements a multinomial naive Bayes classifier. For background information (and what has inspired this, see e.g. https://scikit-learn.org/stable/... ...modules/generated/sklearn.naive_bayes.MultinomialNB.html) """ def __init__(self, alpha: float = 1.0): """Create new un-trained model Parameters ---------- alpha : Optional[float] Additive (Laplace/Lidstone) smoothing parameter (0 for no smoothing), defaults to 1.0 """ self.alpha = alpha self.class_prior = (0.0, 0.0) self.log_likelihood: Dict[str, List[float]] = {} @staticmethod def _construct_log_class_prior(y: Sequence[int]) -> Tuple[float, float]: # Input classes are -1 and 1 neg_class_count = sum(1 if y_i == -1 else 0 for y_i in y) pos_class_count = len(y) - neg_class_count neg_log_prior = log(neg_class_count / (pos_class_count + neg_class_count)) pos_log_prior = log(pos_class_count / (pos_class_count + neg_class_count)) return (neg_log_prior, pos_log_prior) @staticmethod def _construct_log_likelihood( X: Sequence[Dict[int, int]], y: Sequence[int], alpha: float ) -> Dict[str, List[float]]: # Token counts # implicit assumption from vectorizer: first element has count for #vocab # size set vocabulary_len = max(X[0].keys()) + 1 token_counts_negative = [alpha] * vocabulary_len token_counts_positive = [alpha] * vocabulary_len for x, y_ in zip(X, y): for idx, cnt in x.items(): if y_ == 1: token_counts_positive[idx] += cnt else: token_counts_negative[idx] += cnt token_pos_class_sum = sum(token_counts_positive) token_neg_class_sum = sum(token_counts_negative) log_likelihood_negative = [] log_likelihood_positive = [] for token_ind in range(vocabulary_len): log_likelihood_positive.append( log(token_counts_positive[token_ind]) - log(token_pos_class_sum) ) log_likelihood_negative.append( log(token_counts_negative[token_ind]) - log(token_neg_class_sum) ) return { "negative_class": log_likelihood_negative, "positive_class": log_likelihood_positive, } def fit( self, X: Sequence[Dict[int, int]], y: Sequence[int] ) -> "MultinomialNaiveBayes": """Fit a naive Bayes model from a count of feature matrix Parameters ---------- X : Sequence[Dict[int, int]] Sequence of sparse {feature_index: count} dictionaries y : Sequence[int] Labels +1/-1 Returns ------- MultinomialNaiveBayes The fitted model """ self.class_prior = self._construct_log_class_prior(y) self.log_likelihood = self._construct_log_likelihood(X, y, self.alpha) return self def predict_log_probability( self, X: Sequence[Dict[int, int]] ) -> Sequence[Tuple[float, float]]: """Calculate the posterior log probability of new sample X Parameters ---------- X : Sequence[Dict[int, int]] Sequence of data to predict on as sparse {feature_index: count} dictionarie Returns ------- Sequence[Tuple[float, float]] Tuple of (negative-class, positive-class) log likelihoods """ scores = [] for x in X: # Initialise the scores with priors of positive and negative class neg_score = self.class_prior[0] pos_score = self.class_prior[1] for idx, cnt in x.items(): pos_score += self.log_likelihood["positive_class"][idx] * cnt neg_score += self.log_likelihood["negative_class"][idx] * cnt joint_log_likelihood = [neg_score, pos_score] # Normalize the scores log_prob_x = _log_sum_exp(joint_log_likelihood) scores.append((neg_score - log_prob_x, pos_score - log_prob_x)) return scores ================================================ FILE: ctparse/nb_scorer.py ================================================ """This module cointains the implementation of the scorer based on naive bayes.""" import bz2 import math import pickle from datetime import datetime from typing import Sequence from ctparse.nb_estimator import MultinomialNaiveBayes from ctparse.count_vectorizer import CountVectorizer from ctparse.pipeline import CTParsePipeline from .scorer import Scorer from .partial_parse import PartialParse from .types import Artifact class NaiveBayesScorer(Scorer): def __init__(self, nb_model: CTParsePipeline) -> None: """Scorer based on a naive bayes estimator. This scorer models the probability of having a correct parse, conditioned on the sequence of rules (expressed as a categorical feature) that led to that parse. The score is also modified by a "length" factor that penalizes parses that cover a smaller part of the text string. :param nb_model: A scikit-learn style Estimator that was trained on a corpus that takes a Sequence[Sequence[str]] as X (each entry is a sequence of rule identifiers) and a Sequence[int] in the set {-1, 1} that indicates if the parse was correct or incorrect. """ self._model = nb_model @classmethod def from_model_file(cls, fname: str) -> "NaiveBayesScorer": with bz2.open(fname, "rb") as fd: return cls(pickle.load(fd)) def score(self, txt: str, ts: datetime, partial_parse: PartialParse) -> float: # Penalty for partial matches max_covered_chars = partial_parse.prod[-1].mend - partial_parse.prod[0].mstart len_score = math.log(max_covered_chars / len(txt)) X = _feature_extractor(txt, ts, partial_parse) pred = self._model.predict_log_proba([X]) # NOTE: the prediction is log-odds, or logit model_score = pred[0][1] - pred[0][0] return model_score + len_score def score_final( self, txt: str, ts: datetime, partial_parse: PartialParse, prod: Artifact ) -> float: # The difference between the original score and final score is that in the # final score, the len_score is calculated based on the length of the final # production len_score = math.log(len(prod) / len(txt)) X = _feature_extractor(txt, ts, partial_parse) pred = self._model.predict_log_proba([X]) # NOTE: the prediction is log-odds, or logit model_score = pred[0][1] - pred[0][0] # We want the len_score to always take precedence. I believe a logit won't go up # more than 1000. A better way would be to return an ordering tuple instead, # but then we would need to change many interfaces. return model_score + 1000 * len_score def _feature_extractor( txt: str, ts: datetime, partial_parse: PartialParse ) -> Sequence[str]: return [str(r) for r in partial_parse.rules] def train_naive_bayes(X: Sequence[Sequence[str]], y: Sequence[bool]) -> CTParsePipeline: """Train a naive bayes model for NaiveBayesScorer""" y_binary = [1 if y_i else -1 for y_i in y] # Create and train the pipeline pipeline = CTParsePipeline( CountVectorizer(ngram_range=(1, 3)), MultinomialNaiveBayes(alpha=1.0) ) model = pipeline.fit(X, y_binary) return model def save_naive_bayes(model: CTParsePipeline, fname: str) -> None: """Save a naive bayes model for NaiveBayesScorer""" # TODO: version this model and dump metadata with lots of information with bz2.open(fname, "wb") as fd: pickle.dump(model, fd) ================================================ FILE: ctparse/partial_parse.py ================================================ import logging from datetime import datetime from typing import ( Callable, Optional, Sequence, Tuple, TypeVar, Union, Dict, List, Generator, ) from .rule import rules as global_rules, ProductionRule, Predicate from .timers import timeit from .types import Artifact, RegexMatch logger = logging.getLogger(__name__) T = TypeVar("T") class PartialParse: def __init__( self, prod: Tuple[Artifact, ...], rules: Tuple[Union[int, str], ...] ) -> None: """A data structure representing a partial parse. * prod: the current partial production * rules: the sequence of regular expressions and rules used/applied to produce prod * score: the score assigned to this production """ if len(prod) < 1: raise ValueError("prod should have at least one element") self.prod = prod self.rules = rules self.applicable_rules = global_rules self.max_covered_chars = self.prod[-1].mend - self.prod[0].mstart self.score = 0.0 @classmethod def from_regex_matches( cls, regex_matches: Tuple[RegexMatch, ...] ) -> "PartialParse": """Create partial production from a series of RegexMatch This usually is called when no production rules (with the exception of regex matches) have been applied. """ se = cls(prod=regex_matches, rules=tuple(r.id for r in regex_matches)) logger.debug("=" * 80) logger.debug("-> checking rule applicability") # Reducing rules to only those applicable has no effect for # small stacks, but on larger there is a 10-20% speed # improvement se.applicable_rules, _ts = timeit(se._filter_rules)(global_rules) logger.debug( "of {} total rules {} are applicable in {}".format( len(global_rules), len(se.applicable_rules), se.prod ) ) logger.debug("time in _filter_rules: {:.0f}ms".format(1000 * _ts)) logger.debug("=" * 80) return se def apply_rule( self, ts: datetime, pm_bias: bool, date_format: str, rule: ProductionRule, rule_name: Union[str, int], match: Tuple[int, int], ) -> Optional["PartialParse"]: """Check whether the production in rule can be applied to this stack element. If yes, return a copy where this update is incorporated in the production, the record of applied rules and the score. :param ts: reference time :param pm_bias: bias option bool :param date_format: us / eu date format :param rule: a tuple where the first element is the production rule to apply :param rule_name: the name of the rule :param match: the start and end index of the parameters that the rule needs. """ prod = rule(ts, pm_bias, date_format, *self.prod[match[0]: match[1]]) if prod is not None: pp = PartialParse( prod=self.prod[: match[0]] + (prod,) + self.prod[match[1] :], rules=self.rules + (rule_name,), ) pp.applicable_rules = self.applicable_rules return pp else: return None def __lt__(self, other: "PartialParse") -> bool: """Sort stack elements by (a) the length of text they can (potentially) cover and (b) the score assigned to the production. a < b <=> a.max_covered_chars < b.max_covered_chars or (a.max_covered_chars <= b.max_covered_chars and a.score < b.score) """ return (self.max_covered_chars < other.max_covered_chars) or ( self.max_covered_chars == other.max_covered_chars and self.score < other.score ) def __repr__(self) -> str: return "PartialParse(prod={}, rules={}, score={})".format( repr(self.prod), repr(self.rules), repr(self.score) ) def _filter_rules( self, rules: Dict[str, Tuple[ProductionRule, List[Predicate]]] ) -> Dict[str, Tuple[ProductionRule, List[Predicate]]]: # find all rules that can be applied to the current prod sequence def _hasNext(it: Generator[List[int], None, None]) -> bool: try: next(it) return True except StopIteration: return False return { rule_name: r for rule_name, r in rules.items() if _hasNext(_seq_match(self.prod, r[1])) } def _seq_match( seq: Sequence[T], pat: Sequence[Callable[[T], bool]], offset: int = 0 ) -> Generator[List[int], None, None]: # :param seq: a list of intermediate productions, either of type # RegexMatch or some other Artifact # # :param pat: a list of rule patterns to be matched, i.e. either a # RegexMatch or a callable # # Determine whether the pattern pat matches the sequence seq and # return a list of lists, where each sub-list contains those # indices where the RegexMatch objects in pat are located in seq. # # A pattern pat only matches seq, iff each RegexMatch in pat is in # seq in the same order and iff between two RegexMatches aligned # to seq there is at least one additional element in seq. Reason: # # * Rule patterns never have two consequitive RegexMatch objects. # # * Hence there must be some predicate/dimension between two # * RegexMatch objects. # # * For the whole pat to match there must then be at least one # element in seq that can product this intermediate bit # # If pat does not start with a RegexMatch then there must be at # least one element in seq before the first RegexMatch in pat that # is alignes on seq. Likewise, if pat does not end with a # RegexMatch, then there must be at least one additional element # in seq to match the last non-RegexMatch element in pat. # # STRONG ASSUMPTIONS ON ARGUMENTS: seq and pat do not contain # consequiteve elements which are both of type RegexMatch! Callers # obligation to ensure this! if not pat: # if pat is empty yield the empty match yield [] elif not seq or not pat: # if either seq or pat is empty there will be no match return elif pat[-1].__name__ != "_regex_match": # there must be at least one additional element in seq at the # end yield from _seq_match(seq[:-1], pat[:-1], offset) elif len(pat) > len(seq): # if pat is longer than seq it cannot match return else: p1 = pat[0] # if p1 is not a RegexMatch, then continue on next pat and # advance sequence by one if p1.__name__ != "_regex_match": yield from _seq_match(seq[1:], pat[1:], offset + 1) else: # Get number of RegexMatch in p n_regex = sum(1 for p in pat if p.__name__ == "_regex_match") # For each occurance of RegexMatch pat[0] in seq for iseq, s in enumerate(seq): # apply _regex_match check if p1(s): # for each match of pat[1:] in seq[iseq+1:], yield a result for subm in _seq_match(seq[iseq + 1 :], pat[1:], offset + iseq + 1): if len(subm) == n_regex - 1: # only yield if all subsequent RegexMatch # have been aligned! yield [iseq + offset] + subm ================================================ FILE: ctparse/pipeline.py ================================================ from typing import Sequence, Tuple from .nb_estimator import MultinomialNaiveBayes from .count_vectorizer import CountVectorizer class CTParsePipeline: def __init__(self, transformer: CountVectorizer, estimator: MultinomialNaiveBayes): """Setup a pipeline of feature extraction and naive bayes. Overkill for what it does but leaves room to use different models/features in the future Parameters ---------- transformer : CountVectorizer feature extraction step estimator : MultinomialNaiveBayes naive bayes model """ self.transformer = transformer self.estimator = estimator def fit(self, X: Sequence[Sequence[str]], y: Sequence[int]) -> "CTParsePipeline": """Fit the transformer and then fit the Naive Bayes model on the transformed data Returns ------- CTParsePipeline Returns the fitted pipeline """ X_transformed = self.transformer.fit_transform(X) self.estimator = self.estimator.fit(X_transformed, y) return self def predict_log_proba( self, X: Sequence[Sequence[str]] ) -> Sequence[Tuple[float, float]]: """Apply the transforms and get probability predictions from the estimator Parameters ---------- X : Sequence[Sequence[str]] Sequence of documents, each as sequence of tokens. In ctparse case there are just the names of the regex matches and rules applied Returns ------- Sequence[Tuple[float, float]] For each document the tuple of negative/positive log probability from the naive bayes model """ X_transformed = self.transformer.transform(X) return self.estimator.predict_log_probability(X_transformed) ================================================ FILE: ctparse/py.typed ================================================ # Marker file for PEP 561. ================================================ FILE: ctparse/rule.py ================================================ # flake8: noqa F405 import logging from datetime import datetime from typing import Any, Callable, Dict, List, Optional, Tuple, Union, Type import regex from .types import Artifact, RegexMatch logger = logging.getLogger(__name__) # A predicate is a callable that returns True if the predicate # applies to the artifact Predicate = Callable[[Artifact], bool] # ProductionRule is a function used to generate an artifact given other # artifacts. ProductionRule = Callable[..., Optional[Artifact]] rules = {} # type: Dict[str, Tuple[ProductionRule, List[Predicate]]] _regex_cnt = 150 # leave this much space for ids of production types _regex = {} # compiled regex _regex_str = {} # map regex id to original string _str_regex = {} # type: Dict[str, int] # map regex raw str to regex id eu_regex = {} us_regex = {} _regex_hour = r"(?:[01]?\d)|(?:2[0-3])" _regex_minute = r"[0-5]\d" _regex_day = r"[012]?[1-9]|10|20|30|31" _regex_month = r"10|11|12|0?[1-9]" _regex_year = r"(?:19\d\d)|(?:20[0-2]\d)|(?:\d\d)" # used in many places in rules _regex_to_join = ( r"(\-|to( the)?|(un)?til|bis( zum)?|zum|auf( den)?|und|" "no later than|spätestens?|at latest( at)?|and)" ) _defines = ( r"(?(DEFINE)(?<_hour>{regex_hour})(?P<_minute>{regex_minute})" "(?P<_day>{regex_day})(?P<_month>{regex_month})" "(?P<_year>{regex_year}))" ).format( regex_hour=_regex_hour, regex_minute=_regex_minute, regex_day=_regex_day, regex_month=_regex_month, regex_year=_regex_year, ) def rule(*patterns: Union[str, Predicate], **kwargs) -> Callable[[Any], ProductionRule]: def _map(p: Union[str, Predicate]) -> Predicate: if isinstance(p, str): # its a regex global _regex_cnt if p in _str_regex: # have seen this regex before - recycle return regex_match(_str_regex[p]) # test the regex first re = r"{defines}(?i)(?P{re})".format( defines=_defines, re=p, re_key=_regex_cnt ) new_rr = regex.compile( # Removed the separator here - leads to more matches, # as now each rule can also match if it is not followed # or preceeded by a separator character # r'(?i)(?:{sep})(?P<{re_key}>{re})(?:{sep})'.format( re, regex.VERSION1, ) if new_rr.match(""): raise ValueError("expression {} matches empty strings".format(p)) if kwargs and "date_format" in kwargs: if kwargs['date_format'] == 'US': us_regex[_regex_cnt] = new_rr else: eu_regex[_regex_cnt] = new_rr else: _regex[_regex_cnt] = new_rr _regex_str[_regex_cnt] = p _str_regex[p] = _regex_cnt _regex_cnt += 1 return regex_match(_regex_cnt - 1) else: return p # check that in rules we never have a regex followed by a regex - # that must be merged into one regex def _has_consequtive_regex( ps: Tuple[Union[str, Callable[[Artifact], bool]], ...] ) -> bool: for p0, p1 in zip(ps[:-1], ps[1:]): if isinstance(p0, str) and isinstance(p1, str): return True return False if _has_consequtive_regex(patterns): raise ValueError("rule which contains consequtive regular expressions found") mapped_patterns = [_map(p) for p in patterns] def fwrapper(f: ProductionRule) -> ProductionRule: def wrapper(ts: datetime, *args: Artifact) -> Optional[Artifact]: res = f(ts, *args) if res is not None: # upon a successful production, update the span # information by expanding it to that of all args res.update_span(*args) return res rules[f.__name__] = (wrapper, mapped_patterns) return wrapper return fwrapper def regex_match(r_id: int) -> Predicate: def _regex_match(r: Artifact) -> bool: return type(r) == RegexMatch and r.id == r_id # type: ignore return _regex_match def dimension(dim: Type[Artifact]) -> Predicate: def _dimension(d: Artifact) -> bool: return isinstance(d, dim) return _dimension def predicate(pred: str) -> Predicate: def _predicate(d: Artifact) -> Any: return getattr(d, pred, False) return _predicate from .time.rules import * # noqa ================================================ FILE: ctparse/scorer.py ================================================ """This module contains the Scorer abstraction that can be used to implement scoring strategies for ctparse. """ from abc import ABCMeta, abstractmethod from datetime import datetime from random import Random from typing import Optional from .partial_parse import PartialParse from .types import Artifact class Scorer(metaclass=ABCMeta): """Interface for scoring parses generated by ctparse""" @abstractmethod def score(self, txt: str, ts: datetime, partial_parse: PartialParse) -> float: """Produce a score for a partial production. :param txt: the text that is being parsed :param ts: the reference time :param partial_parse: the partial parse that needs to be scored """ @abstractmethod def score_final( self, txt: str, ts: datetime, partial_parse: PartialParse, prod: Artifact ) -> float: """Produce the final score for a production. :param txt: the text that is being parsed :param ts: the reference time :param partial_parse: the PartialParse object that generated the production :param prod: the production """ class DummyScorer(Scorer): """A scorer that always return a 0.0 score.""" def score(self, txt: str, ts: datetime, partial_parse: PartialParse) -> float: return 0.0 def score_final( self, txt: str, ts: datetime, partial_parse: PartialParse, prod: Artifact ) -> float: return 0.0 class RandomScorer(Scorer): def __init__(self, rng: Optional[Random] = None) -> None: """A score that returns a random number between 0 and 1. :param rng: the random number generator to use """ self.rng = rng if rng is not None else Random() def score(self, txt: str, ts: datetime, partial_parse: PartialParse) -> float: return self.rng.random() def score_final( self, txt: str, ts: datetime, partial_parse: PartialParse, prod: Artifact ) -> float: return self.rng.random() ================================================ FILE: ctparse/time/__init__.py ================================================ ================================================ FILE: ctparse/time/auto_corpus.py ================================================ corpus = [ # pragma: no cover [ "Time[]{2018-01-04 X:X (X/X)}", "2017-12-20T20:34", [ "THURSDAY 4th JANUARY 2018", "04. Januar 2018", "THURSDAY 4th JANUARY 2018", "THURSDAY 4th JANUARY 2018", "04. Januar 2018", ], ], [ "Interval[]{2017-03-12 18:40 (X/X) - 2017-03-12 19:45 (X/X)}", "2017-02-10T10:59", ["Am 12.03.2017 18:40 - 19:45", "Am 12.03.2017 18:40 - 19:45"], ], [ "Interval[]{X-X-X 10:00 (X/X) - X-X-X 15:00 (X/X)}", "2022-12-12T09:59", ["10-15", "10-15", "10-15", "10-15", "10-15", "10-15", "10-15", "10-15", "10-15", "10-15", "10-15", "10-15", "10-15", ], ], [ "Interval[]{2022-12-16 10:00 (X/X) - 2022-12-16 15:00 (X/X)}", "2022-12-13T09:59", ["friday 10-15", "friday 10-15", "friday 10-15", "friday 10-15", "friday 10-15", "friday 10-15", "friday 10-15", "friday 10-15", "friday 10-15", ], ], [ "Time[]{2017-05-11 X:X (X/X)}", "2017-05-09T06:47", ["Thu 11. may 2017", "am 11.", "Thursday 11.05.17", "Thu 11. may 2017"], ], [ "Interval[]{2016-05-04 20:00 (X/X) - 2016-05-04 21:00 (X/X)}", "2016-04-06T15:25", ["Mi., 04.05.2016 ca. 08:00 Uhr bis ca. 09:00 Uhr"], ], [ "Interval[]{2018-02-05 X:X (X/X) - 2018-02-15 X:X (X/X)}", "2018-01-26T09:32", ["Feb 5-15"], ], [ "Time[]{2016-05-27 14:00 (X/X)}", "2016-05-24T04:39", ["Fri 5/27 2:00pm", "Fri 5/27 2:00pm"], ], ["Time[]{2016-05-27 17:20 (X/X)}", "2016-05-24T04:39", ["Fri 5/27 5:20pm"]], [ "Time[]{2016-06-24 12:40 (X/X)}", "2016-06-22T09:08", ["Fri 6/24 12:40pm", "Fri 6/24 12:40pm"], ], [ "Time[]{2016-09-23 20:00 (X/X)}", "2016-09-06T05:05", ["Fri 9/23 8pm", "Fri 9/23 8pm"], ], [ "Time[]{2016-10-26 06:30 (X/X)}", "2016-10-11T08:25", ["Oct 26 morning 6:30am", "Oct 26 morning 6:30am"], ], [ "Time[]{2018-02-28 X:X (X/X)}", "2017-12-12T09:33", ["Feb 28, 2018", "Feb 28, 2018", "Feb 28, 2018"], ], [ "Interval[]{2017-03-01 X:X (X/X) - 2017-03-03 X:X (X/X)}", "2017-02-24T12:30", ["Vom 01.03. bis 03.03"], ], [ "Time[]{2017-10-20 X:X (X/X)}", "2017-09-19T09:42", ["Fri 20th Oct 2017", "Fri 20th Oct 2017", "Fri 20th Oct 2017"], ], [ "Time[]{2017-02-03 X:X (X/X)}", "2017-02-01T11:43", [ "Februar 3, 2017", "am 3. Februar 2017", "Februar 3, 2017", "Februar 3, 2017", "Freitag 03.02", "am 3. Februar 2017", ], ], [ "Time[]{2017-11-02 X:X (X/X)}", "2017-09-03T11:45", [ "November 2, 2017", "November 2, 2017", "November 2, 2017", "Thursday 02.11.", ], ], [ "Interval[]{2017-04-03 X:X (X/X) - 2017-04-04 X:X (X/X)}", "2017-03-14T08:31", ["April 3-4"], ], ["Time[]{2016-06-05 X:X (X/X)}", "2016-06-02T07:52", ["Sunday 6/5", "Sunday 6/5"]], ["Time[]{2018-04-27 X:X (X/X)}", "2017-12-14T23:57", ["Friday 27"]], [ "Interval[]{2017-08-21 X:X (X/X) - 2017-08-25 X:X (X/X)}", "2017-08-08T09:40", ["August 21-25"], ], [ "Time[]{2018-02-16 X:X (X/X)}", "2018-01-10T11:14", ["Freitag 16.", "Freitag 16."], ], [ "Time[]{2017-07-13 X:X (X/X)}", "2017-07-06T08:05", ["Donnerstag 13. Juli 2017", "Donnerstag 13. Juli 2017"], ], [ "Time[]{2017-11-10 X:X (X/X)}", "2017-08-02T06:57", ["Freitag 10.November 2017", "Freitag 10.November 2017"], ], # [ # "Time[]{2016-01-26 X:X (X/morning)}", # "2016-01-13T12:05", # ["Dienstagmorgen 26.1."], # ], [ "Time[]{2017-08-17 13:55 (X/X)}", "2017-08-10T09:11", ["Donnerstag 17.8. 13:55", "Donnerstag 17.8. 13:55", "Donnerstag 17.8. 13:55"], ], # [ # "Time[]{2017-12-01 X:X (X/afternoon)}", # "2017-11-07T16:48", # ["Freitagnachmittag 01.12."], # ], # [ # "Time[]{2016-03-08 X:X (X/evening)}", # "2015-11-19T08:54", # ["Dienstagabend 08.03.16"], # ], # [ # "Time[]{2017-02-07 X:X (X/morning)}", # "2017-01-13T10:30", # ["Dienstagmorgen 07.02.17"], # ], ["Time[]{2016-04-17 X:X (X/X)}", "2016-04-08T11:42", ["Sunday 17th"]], [ "Time[]{2018-03-24 X:X (X/X)}", "2018-03-09T15:21", [ "Saturday 24th March 2018", "Saturday 24th March 2018", "Saturday 24th March 2018", ], ], # [ # "Time[]{2016-05-26 X:X (X/evening)}", # "2016-05-23T07:31", # ["Thursday 26th in the evening"], # ], # [ # "Time[]{2016-10-19 X:X (X/evening)}", # "2016-10-11T17:10", # ["Wednesday 19th evening"], # ], # [ # "Time[]{2017-05-12 X:X (X/last)}", # "2017-05-04T07:31", # ["Friday 12th last flight"], # ], ["Time[]{2017-05-08 X:X (X/X)}", "2017-04-27T14:52", ["Monday 8th"]], [ "Time[]{2018-03-09 X:X (X/X)}", "2018-02-15T12:21", [ "Friday 9th March 2018", "Friday 9th March 2018", "Friday 9th March 2018", "am Freitag 09.03", ], ], [ "Time[]{2017-09-13 X:X (X/X)}", "2017-09-11T14:17", ["Mittwoch den 13.", "Mittwoch den 13."], ], [ "Interval[]{2017-08-08 20:05 (X/X) - 2017-08-08 21:00 (X/X)}", "2017-08-03T11:10", [ "Dienstag den 08.08.2017 20:05 - 21:00 Uhr", "Dienstag den 08.08.2017 20:05 - 21:00 Uhr", "Dienstag den 08.08.2017 20:05 - 21:00 Uhr", ], ], [ "Time[]{2016-12-22 X:X (X/X)}", "2016-12-19T21:12", ["Donnerstag diese Woche", "Donnerstag diese Woche", "Donnerstag diese Woche"], ], # [ # "Time[]{2018-03-26 X:X (X/evening)}", # "2017-12-15T11:14", # ["Monday evening 26th March"], # ], # [ # "Time[]{2017-06-19 X:X (X/morning)}", # "2017-05-18T06:53", # ["Monday morning, 19.6.17"], # ], [ "Time[]{2018-03-01 X:X (X/X)}", "2018-01-10T12:18", [ "Donnerstag, 1. M\u00e4rz 2018", "Donnerstag, den 01. M\u00e4rz 2018", "1/3/2018", "Donnerstag 01.03.2018", "Donnerstag, 1. M\u00e4rz 2018", "Donnerstag, den 01. M\u00e4rz 2018", ], ], [ "Time[]{2016-04-06 20:20 (X/X)}", "2016-03-11T11:04", ["Mittwoch, 6.4. 8:20", "Mittwoch, 6.4. 8:20", "Mittwoch, 6.4. 8:20"], ], [ "Time[]{2016-04-07 15:35 (X/X)}", "2016-03-11T11:04", ["Donnerstag, 7.4. 15:35", "Donnerstag, 7.4. 15:35", "Donnerstag, 7.4. 15:35"], ], [ "Time[]{2017-08-08 14:31 (X/X)}", "2017-08-08T08:28", ["Dienstag, 8.8. 14:31h", "Dienstag, 8.8. 14:31h", "Dienstag, 8.8. 14:31h"], ], [ "Time[]{2017-06-30 X:X (X/X)}", "2017-06-23T09:53", ["Freitag, 30. Juni 2017", "Freitag, 30. Juni 2017"], ], [ "Time[]{2016-11-17 X:X (X/X)}", "2016-10-20T14:34", ["Donnerstag, 17. November 2016", "Donnerstag, 17. November 2016"], ], [ "Time[]{2017-11-13 X:X (X/X)}", "2017-10-24T13:35", ["Montag, 13.11. 2017", "Montag, 13.11. 2017", "Montag, 13.11. 2017"], ], [ "Interval[]{2016-12-13 17:06 (X/X) - 2016-12-13 20:44 (X/X)}", "2016-12-08T15:30", [ "Dienstag, 13.12.2016 um 05:06 - 08:44 Uhr", "Dienstag, 13.12.2016 um 05:06 - 08:44 Uhr", "Dienstag, 13.12.2016 um 05:06 - 08:44 Uhr", ], ], [ "Time[]{2017-12-15 X:X (X/X)}", "2017-11-15T21:11", ["Friday 15th"], ], [ "Time[]{2018-03-12 X:X (X/X)}", "2018-03-02T10:05", ["Monday, 12th of March 2018", "Monday, 12th of March 2018"], ], # [ # "Time[]{2018-04-03 X:X (X/afternoon)}", # "2018-03-22T11:25", # ["Dienstag, den 3. April 2018 nachmittags"], # ], [ "Interval[]{2017-10-05 21:00 (X/X) - 2017-10-05 22:00 (X/X)}", "2017-09-28T07:55", [ "Donnerstag, den 5.10.2017 09:00 - 10:00 Uhr", "Donnerstag, den 5.10.2017 09:00 - 10:00 Uhr", "Donnerstag, den 5.10.2017 09:00 - 10:00 Uhr", ], ], [ "Time[]{2017-10-10 X:X (X/X)}", "2017-10-08T16:08", ["Tuesday 10.", "vom 10.", "Tuesday 10."], ], [ "Time[]{2017-05-22 16:13 (X/X)}", "2017-05-22T12:32", ["Morgen, den 22. Mai 2017 16:13"], ], [ "Time[]{2017-10-03 X:X (X/X)}", "2017-08-28T14:31", ["3 Oct 2017", "3. Oktober 2017", "3 Oct 2017", "3. Oktober 2017"], ], [ "Time[]{2018-04-06 X:X (X/X)}", "2018-01-08T07:52", [ "6 April 2018", "06.04.2018 17:40 Uhr", "6 April 2018", "06.04.2018 17:40 Uhr", ], ], [ "Interval[]{2017-06-04 X:X (X/X) - 2017-06-06 X:X (X/X)}", "2017-05-25T18:08", ["4-6.6.", "4-6.6.", "4-6.6."], ], ["Time[]{2017-07-02 X:X (X/X)}", "2017-06-29T06:15", ["2."]], [ "Time[]{2017-07-04 X:X (X/X)}", "2017-06-29T06:15", ["4. Juli 2017", "4. Juli 2017"], ], ["Time[]{2017-08-06 23:05 (X/X)}", "2017-07-26T09:21", ["6. August 11:05"]], [ "Time[]{2016-11-02 X:X (X/X)}", "2016-10-04T11:39", ["2. November 2016", "2. November 2016"], ], [ "Time[]{2016-04-03 X:X (X/X)}", "2015-11-02T11:37", ["3. April 2016", "3. April 2016"], ], [ "Time[]{2016-11-04 X:X (X/X)}", "2016-10-04T11:39", ["4. November 2016", "4. November 2016"], ], [ "Time[]{2017-10-05 X:X (X/X)}", "2017-07-17T07:46", ["5. Oktober 2017", "5. Oktober 2017"], ], [ "Time[]{2018-01-06 X:X (X/X)}", "2017-12-19T09:24", ["6. Januar 2018", "6. Januar 2018"], ], [ "Interval[]{2017-07-03 21:00 (X/X) - 2017-07-03 22:00 (X/X)}", "2017-06-26T13:05", [ "3.7.2017 gegen 9-10 Uhr", "3.7.2017 gegen 9-10 Uhr", "3.7.2017 gegen 9-10 Uhr", ], ], [ "Time[]{2018-10-07 18:10 (X/X)}", "2018-02-07T13:05", ["5.03. - 07.10. 18:10", "5.03. - 07.10. 18:10"], ], [ "Time[]{2017-07-01 22:00 (X/X)}", "2017-06-02T09:41", ["1.07.2017 ca. 10Uhr", "1.07.2017 ca. 10Uhr"], ], ["Time[]{2017-03-17 X:X (X/X)}", "2017-03-03T13:30", ["3/17"]], ["Time[]{2017-02-11 X:X (X/X)}", "2017-01-31T10:12", ["11"]], ["Time[]{2017-01-14 X:X (X/X)}", "2017-01-05T08:07", ["14"]], ["Time[]{2017-11-15 X:X (X/X)}", "2017-11-08T16:14", ["15"]], ["Time[]{2016-09-19 X:X (X/X)}", "2016-08-19T11:23", ["19"]], ["Time[]{2017-04-20 X:X (X/X)}", "2017-04-18T11:04", ["20"]], [ "Time[]{2017-09-25 X:X (X/X)}", "2017-09-10T15:46", ["25 SEP 2017,", "25 SEP 2017,"], ], [ "Time[]{2016-05-17 X:X (X/X)}", "2016-05-10T10:31", ["17 May 2016", "17 May 2016"], ], [ "Time[]{2018-02-21 X:X (X/X)}", "2018-01-17T14:12", ["21 Feb 2018", "21 Feb 2018"], ], [ "Time[]{2017-10-24 X:X (X/X)}", "2017-10-17T18:14", ["24 Oct 2017", "24 Oct 2017"], ], [ "Time[]{2017-04-24 X:X (X/X)}", "2017-03-09T09:35", ["24 April 17", "24 April 17"], ], [ "Time[]{2018-01-10 X:X (X/X)}", "2017-10-03T03:36", ["10 January 2018", "10/01/2018", "10 January 2018", "10.01.2018 15:37"], ], [ "Time[]{2017-09-10 X:X (X/X)}", "2017-07-31T07:05", ["10 September 2017", "10 September 2017"], ], [ "Time[]{2018-04-11 X:X (X/X)}", "2018-01-08T07:52", ["11 April 2018", "11 April 2018"], ], [ "Time[]{2017-08-14 X:X (X/X)}", "2017-07-31T07:05", ["14 August 2017", "14 August 2017"], ], [ "Time[]{2018-02-15 X:X (X/X)}", "2018-01-15T08:26", [ "15 February 2018", "Thursday 15.02.", "Do. 15.", "15 February 2018", "Thursday 15.02.", ], ], [ "Time[]{2016-12-21 X:X (X/X)}", "2016-12-09T12:58", ["21 December 2016", "21 December 2016"], ], [ "Time[]{2017-12-22 X:X (X/X)}", "2017-10-03T03:36", ["22 December 2017", "22 December 2017"], ], [ "Time[]{2016-06-16 06:40 (X/X)}", "2016-06-16T13:14", ["16 june 6:40 am", "16 june 6:40 am", "16 june 6:40 am"], ], [ "Interval[]{2017-09-15 15:00 (X/X) - None}", "2017-09-07T13:55", ["15 after 15:00"], ], ["Time[]{2017-02-21 X:X (X/X)}", "2017-02-06T08:28", ["21-2-2017"]], ["Time[]{2017-02-22 X:X (X/X)}", "2017-02-06T08:28", ["22-2-2017"]], ["Time[]{2017-02-23 X:X (X/X)}", "2017-02-06T08:28", ["23-2-2017"]], # 19-20 should be hour interval not date # [ # "Interval[]{2018-03-19 X:X (X/X) - 2018-03-20 X:X (X/X)}", # "2018-03-06T09:46", # ["19-20"], # ], # ["Time[]{2016-05-28 09:00 (X/X)}", "2016-05-26T06:48", ["28-05 09:00"]], [ "Interval[]{2017-11-12 X:X (X/X) - 2017-11-13 X:X (X/X)}", "2017-10-03T08:32", ["12-13 november"], ], [ "Time[]{2016-10-09 X:X (X/X)}", "2016-10-07T09:38", ["09-10-16", "09-10-16", "09-10-16"], ], [ "Time[]{2015-10-25 X:X (X/X)}", "2015-10-13T12:11", ["15-10-25", "15-10-25", "15-10-25"], ], [ "Time[]{2016-04-19 X:X (X/X)}", "2016-04-12T14:27", ["16-04-19", "16-04-19", "Dienstag 19.4.", "16-04-19"], ], ["Time[]{2016-05-31 X:X (X/X)}", "2016-05-26T14:38", ["16-05-31", "16-05-31"]], ["Time[]{2017-08-04 X:X (X/X)}", "2017-07-24T09:18", ["04-08-2017"]], ["Time[]{2016-10-04 X:X (X/X)}", "2016-09-26T13:20", ["04-10-2016"]], ["Time[]{2017-11-05 X:X (X/X)}", "2017-10-18T18:45", ["05-11-2017"]], [ "Time[]{2018-05-07 X:X (X/X)}", "2018-03-21T13:20", ["07/05/2018", "on Monday 7th May", "on Monday 7th May"], ], ["Time[]{2016-10-07 X:X (X/X)}", "2016-09-26T13:20", ["07.10.2016"]], ["Time[]{2016-03-08 X:X (X/X)}", "2016-03-07T08:46", ["08/03/2016"]], ["Time[]{2018-05-09 X:X (X/X)}", "2018-03-21T13:20", ["09/05/2018"]], ["Time[]{2017-11-09 X:X (X/X)}", "2017-10-18T18:45", ["09.11.2017"]], ["Time[]{2016-03-10 X:X (X/X)}", "2016-03-07T08:46", ["10.03.2016"]], ["Time[]{2016-12-11 X:X (X/X)}", "2016-12-01T08:24", ["11.12.2016"]], [ "Time[]{2017-12-11 X:X (X/X)}", "2017-11-22T13:00", ["11-12-2017", "Montag 11.12"], ], [ "Time[]{2017-11-12 X:X (X/X)}", "2017-10-18T18:45", ["12-11-2017", "Sunday 12th November 2017"], ], ["Time[]{2017-01-13 X:X (X/X)}", "2017-11-30T13:54", ["13.01.2017"]], ["Time[]{2017-03-13 X:X (X/X)}", "2017-03-02T13:17", ["13.03.2017"]], ["Time[]{2016-06-01 22:16 (X/X)}", "2016-05-25T09:14", ["01.06.2016 10:16"]], ["Time[]{2016-06-01 16:00 (X/X)}", "2016-05-25T09:14", ["01.06.2016 16:00"]], ["Time[]{2017-11-06 17:00 (X/X)}", "2017-10-23T14:23", ["06.11.2017 17:00"]], ["Time[]{2017-11-08 17:55 (X/X)}", "2017-10-23T14:23", ["08/11/2017 17:55"]], ["Time[]{2018-03-10 19:30 (X/X)}", "2018-02-15T15:23", ["10/03/2018 19:30"]], ["Time[]{2018-03-14 14:35 (X/X)}", "2018-02-15T15:23", ["14/03/2018 14:35"]], [ "Interval[]{2017-09-11 X:X (X/X) - 2017-09-13 X:X (X/X)}", "2017-08-21T15:07", ["11-13. September"], ], [ "Interval[]{2018-04-02 X:X (X/X) - 2018-04-05 X:X (X/X)}", "2018-03-18T12:16", ["02-05.4", "02-05.4", "02-05.4"], ], [ "Interval[]{2018-01-10 X:X (X/X) - 2018-01-11 X:X (X/X)}", "2017-12-30T15:14", ["10-11.1.", "10-11.1.", "10-11.1."], ], ["Time[]{2015-12-02 X:X (X/X)}", "2015-11-16T10:37", ["02."]], ["Time[]{2017-04-03 X:X (X/X)}", "2017-03-08T14:38", ["03.", "03.04. 2017"]], ["Time[]{2017-02-06 X:X (X/X)}", "2017-01-31T19:27", ["06."]], ["Time[]{2017-02-08 X:X (X/X)}", "2017-01-16T15:44", ["08."]], ["Time[]{2010-11-11 X:X (X/X)}", "2017-08-04T15:22", ["11. Nov 2010"]], [ "Time[]{2017-05-12 X:X (X/X)}", "2017-05-03T13:19", ["12. Mai 2017", "12. Mai 2017"], ], ["Time[]{2008-02-15 X:X (X/X)}", "2017-08-04T15:22", ["15. Feb 2008"]], [ "Time[]{2017-05-16 X:X (X/X)}", "2017-05-08T14:03", ["16. Mai 2017", "16. Mai 2017"], ], ["Time[]{2014-08-17 X:X (X/X)}", "2017-08-04T15:22", ["17. Aug 2014"]], [ "Time[]{2018-02-26 X:X (X/X)}", "2018-01-10T12:02", ["26. Feb. 2018", "26. Feb. 2018"], ], [ "Time[]{2016-07-13 X:X (X/X)}", "2016-06-20T10:03", ["13. Juli 16", "13. Juli 16"], ], [ "Time[]{2016-07-18 X:X (X/X)}", "2016-06-28T09:21", ["18. Juli 18:25", "18. Juli 18:25"], ], [ "Time[]{2017-06-09 X:X (X/X)}", "2017-05-23T05:56", ["09. Juni 2017", "09. Juni 2017"], ], [ "Time[]{2017-03-10 X:X (X/X)}", "2017-01-30T12:26", ["10. M\u00e4rz 2017", "10. M\u00e4rz 2017"], ], [ "Time[]{2018-03-10 X:X (X/X)}", "2017-12-18T07:30", ["10. M\u00e4rz 2018", "10. M\u00e4rz 2018"], ], [ "Time[]{2017-03-11 X:X (X/X)}", "2017-01-30T12:26", ["11. M\u00e4rz 2017", "11. M\u00e4rz 2017"], ], [ "Time[]{2018-06-12 X:X (X/X)}", "2018-03-22T10:04", ["12. Juni 2018", "12. Juni 2018"], ], [ "Time[]{2017-06-14 X:X (X/X)}", "2017-06-02T07:23", ["14. Juni 2017", "14. Juni 2017"], ], [ "Time[]{2018-03-10 14:30 (X/X)}", "2018-03-05T11:52", ["10. March Saturday 14:30"], ], [ "Time[]{2018-04-09 X:X (X/X)}", "2018-03-13T11:59", ["09. April 2018", "09. April 2018"], ], [ "Time[]{2016-12-09 X:X (X/X)}", "2016-11-14T12:23", ["09. Dezember 2016", "09. Dezember 2016"], ], [ "Time[]{2016-11-12 X:X (X/X)}", "2016-04-07T07:45", ["12. November 2016", "12. November 2016"], ], [ "Time[]{2017-10-12 X:X (X/X)}", "2017-10-05T16:59", [ "12. Oktober 2017", "Donnerstag 12.10.2017", "Thursday (12.)", "12. Oktober 2017", ], ], [ "Time[]{2017-09-12 X:X (X/X)}", "2017-08-11T07:25", [ "12. September 2017", "Tuesday 12.9.", "12. September 2017", "Tuesday 12.9.", ], ], [ "Time[]{2018-04-13 X:X (X/X)}", "2018-03-16T12:34", ["13. April 2018", "13. April 2018"], ], [ "Time[]{2018-02-13 X:X (X/X)}", "2017-12-19T09:24", ["13. Februar 2018", "13. Februar 2018"], ], [ "Time[]{2018-04-14 X:X (X/X)}", "2018-04-08T17:07", ["14. April 2018", "14. April 2018"], ], [ "Time[]{2018-03-13 X:X (X/X)}", "2018-03-12T16:48", ["13. 03.", "13. 03.", "13. 03."], ], [ "Interval[]{2017-07-11 X:X (X/X) - 2017-07-12 X:X (X/X)}", "2017-06-28T15:41", ["11. auf 12."], ], [ "Time[]{2018-03-03 X:X (X/evening)}", "2018-02-02T15:44", ["23.-02.-03.03. abends"], ], [ "Time[]{2017-01-16 X:X (X/X)}", "2017-01-13T07:58", ["16.Januar 2017", "am Montag 16.01.17", "16.Januar 2017"], ], [ "Time[]{2016-05-19 X:X (X/X)}", "2016-04-12T12:42", ["19.5 08:05", "19.5 08:05", "19.5 08:05"], ], ["Time[]{2017-01-16 20:10 (X/X)}", "2016-11-18T06:43", ["16.1 8:10"]], [ "Time[]{2018-03-15 16:01 (X/X)}", "2018-02-28T10:19", ["12.03 - 15.03. 16:01", "12.03 - 15.03. 16:01"], ], [ "Time[]{2017-10-21 X:X (X/X)}", "2017-10-10T12:06", ["21.10 Samstag", "21.10 Samstag", "21.10 Samstag"], ], ["Time[]{2016-11-21 20:10 (X/X)}", "2016-09-19T08:44", ["21.11 8:10"]], ["Time[]{2016-11-14 20:10 (X/X)}", "2016-08-31T13:16", ["14.11 um 8:10"]], [ "Interval[]{2017-11-24 11:00 (X/X) - 2017-11-24 13:00 (X/X)}", "2017-11-17T09:47", ["24.11 ca. 11-13 Uhr"], ], [ "Interval[]{2017-05-04 X:X (X/X) - 2017-05-05 X:X (X/X)}", "2017-04-28T15:09", ["04.05 bis 05.05"], ], [ "Interval[]{2017-10-04 X:X (X/X) - 2017-10-06 X:X (X/X)}", "2017-09-29T14:29", ["04.10 bis 06.10"], ], [ "Interval[]{2016-11-09 X:X (X/X) - 2016-11-10 X:X (X/X)}", "2016-11-08T20:42", ["09.11 bis 10.11", "vom 09.11 bis 10.11"], ], [ "Interval[]{2017-10-12 X:X (X/X) - 2017-10-13 X:X (X/X)}", "2017-08-18T06:05", ["12.10 bis 13.10"], ], [ "Interval[]{2018-03-13 X:X (X/X) - 2018-03-16 X:X (X/X)}", "2018-03-05T12:12", ["13.03 bis 16.03"], ], [ "Time[]{2017-06-13 X:X (X/X)}", "2017-05-19T13:40", ["13.06 morning", "the 13.", "13.06 morning", "13.06 morning"], ], [ "Time[]{2016-03-03 17:00 (X/X)}", "2016-02-05T08:25", ["03.03 nachmittags ca. 5 Uhr"], ], [ "Time[]{2017-01-31 X:X (X/X)}", "2017-01-23T18:56", ["31.01. Tuesday", "31.01. Tuesday", "31.01. Tuesday"], ], ["Time[]{2017-09-20 22:10 (X/X)}", "2017-09-13T08:14", ["20.09. 22:10"]], [ "Time[]{2017-09-15 X:X (X/X)}", "2017-09-07T10:19", ["15.09. 14:21 Uhr", "15.09. 14:21 Uhr", "15.09. 14:21 Uhr"], ], [ "Interval[]{2017-07-05 20:00 (X/X) - None}", "2017-06-13T12:03", ["05.07. 2017 ab 08:00 Uhr"], ], [ "Interval[]{2018-01-20 07:38 (X/X) - 2018-01-20 10:52 (X/X)}", "2018-01-15T14:40", ["20.01. um 7:38 - 10:52am"], ], [ "Interval[]{2017-06-12 13:15 (X/X) - 2017-06-12 14:15 (X/X)}", "2017-06-08T08:12", ["12.06. um 13:15-14:15"], ], [ "Interval[]{2016-11-03 20:15 (X/X) - None}", "2016-11-02T09:46", ["03.11. ab 08:15 Uhr", "03.11. ab 08:15 Uhr"], ], [ "Interval[]{2017-06-13 21:55 (X/X) - 2017-06-13 22:45 (X/X)}", "2017-06-08T08:12", ["13.06. um 21:55-22:45"], ], [ "Interval[]{2018-01-02 X:X (X/X) - 2018-01-05 X:X (X/X)}", "2017-12-14T08:14", ["02.01.-05.01.2018 3 \u00dcN", "02.01.-05.01.2018 3 \u00dcN"], ], [ "Interval[]{2017-09-14 18:00 (X/X) - 2017-09-14 20:00 (X/X)}", "2017-08-11T11:31", ["12.09.17 - 14.09.17 18:00 - 20:00"], ], [ "Interval[]{2017-02-10 23:49 (X/X) - None}", "2017-02-09T16:00", ["10.02.17 ab 11:49", "10.02.17 ab 11:49"], ], [ "Interval[]{2017-02-15 20:35 (X/X) - None}", "2017-02-14T13:20", ["15.02.17 ab 08:35"], ], [ "Interval[]{2017-12-07 12:50 (X/X) - 2017-12-07 14:10 (X/X)}", "2017-11-20T13:30", [ "07.12.17 um 12:50 - 14:10 Uhr", "07.12.17 um 12:50 - 14:10 Uhr", "07.12.17 um 12:50 - 14:10 Uhr", ], ], [ "Time[]{2017-06-01 X:X (X/X)}", "2017-03-13T08:29", [ "01.06.2017 19:35", "am 01. Juni 2017", "01.06.2017 19:35", "01.06.2017 19:35", "am 01. Juni 2017", ], ], [ "Time[]{2017-10-02 X:X (X/X)}", "2017-08-25T05:49", ["02.10.2017 10:30", "02.10.2017 10:30", "02.10.2017 10:30"], ], [ "Time[]{2018-03-06 X:X (X/X)}", "2018-02-26T13:53", [ "06.03.2018 06:30 Uhr", "06.03.2018 18:55 Uhr", "6th March 2018", "06.03.2018 06:30 Uhr", "06.03.2018 18:55 Uhr", "6th March 2018", "06.03.2018 06:30 Uhr", "06.03.2018 18:55 Uhr", "6th March 2018", ], ], [ "Interval[]{2017-03-13 16:48 (X/X) - 2017-03-13 20:08 (X/X)}", "2017-03-07T09:47", [ "13.03.2017 um 16:48 - 20:08", "13.03.2017 um 16:48 - 20:08", "13.03.2017 um 16:48 - 20:08", ], ], [ "Interval[]{2017-04-07 21:00 (X/X) - 2017-04-07 22:00 (X/X)}", "2017-03-20T18:46", [ "07.04.2017 ca. 9-10 Uhr", "07.04.2017 ca. 9-10 Uhr", "07.04.2017 ca. 9-10 Uhr", ], ], [ "Interval[]{2017-04-03 22:00 (X/X) - 2017-04-03 23:00 (X/X)}", "2017-03-20T18:46", [ "03.04.2017 ca. 10 - 11 Uhr", "03.04.2017 ca. 10 - 11 Uhr", "03.04.2017 ca. 10 - 11 Uhr", ], ], [ "Interval[]{2018-03-05 22:00 (X/X) - 2018-03-05 23:00 (X/X)}", "2018-02-20T09:37", [ "05.03.2018 ca. 10-11 Uhr", "05.03.2018 ca. 10-11 Uhr", "05.03.2018 ca. 10-11 Uhr", ], ], # int-int [ "Interval[]{2018-02-20 10:00 (X/X) - 2018-02-20 15:00 (X/X)}", "2018-02-20T09:37", [ "today 10-15", "today 10-15", "today 10-15", "today 10-15", "today 10-15", "today 10-15", "today 10-15", "today 10-15", "today 10-15", ], ], [ "Interval[]{2018-02-20 10:00 (X/X) - 2018-02-20 11:00 (X/X)}", "2018-02-20T09:37", [ "today 10-11am", "today 10-11am", "today 10-11am", ], ], [ "Time[]{2017-06-23 22:00 (X/X)}", "2017-06-02T09:41", ["23.06.2017 ca. 10Uhr", "23.06.2017 ca. 10Uhr"], ], # [ # "Interval[]{2018-02-20 21:00 (X/X) - 2018-02-21 03:00 (X/X)}", # "2018-02-20T09:37", # [ # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # "9pm-3am", # ], # ], [ "Interval[]{2018-02-20 X:X (X/X) - 2018-02-21 X:X (X/X)}", "2018-02-16T08:59", ["20.02.2018 bis 21.02.20178"], ], [ "Interval[]{2017-05-10 18:00 (X/X) - 2017-05-10 20:00 (X/X)}", "2017-05-04T19:05", [ "10.05.2017 gegen 18-20 Uhr", "10.05.2017 gegen 18-20 Uhr", "10.05.2017 gegen 18-20 Uhr", ], ], [ "Interval[]{2017-11-13 22:00 (X/X) - 2017-11-13 23:00 (X/X)}", "2017-10-25T09:25", ["13.11.2017 gegen 10-11 Uhr", "13.11.2017 gegen 10-11 Uhr"], ], [ "Interval[]{2017-04-24 21:30 (X/X) - 2017-04-24 22:00 (X/X)}", "2017-04-13T12:41", [ "24.04.2017 gegen 09:30 - 10:00 Uhr", "24.04.2017 gegen 09:30 - 10:00 Uhr", "24.04.2017 gegen 09:30 - 10:00 Uhr", ], ], [ "Time[]{2018-03-02 14:00 (X/X)}", "2018-02-23T15:38", [ "02.03.2018 gegen 14:00 Uhr nachmittags", "02.03.2018 gegen 14:00 Uhr nachmittags", ], ], [ "Time[]{2017-07-18 X:X (X/evening)}", "2017-07-11T09:03", ["18/07 sp\u00e4t abends", "18/07 sp\u00e4t abends", "18/07 sp\u00e4t abends"], ], [ "Time[]{2016-12-12 13:40 (X/X)}", "2016-12-09T18:07", [ "01:40 Mon 12 Dec 2016", "01:40 Mon 12 Dec 2016", "01:40 Mon 12 Dec 2016", ], ], [ "Time[]{2017-11-20 20:25 (X/X)}", "2017-11-14T08:41", [ "08:25 Monday 20 November 2017", "08:25 Monday 20 November 2017", "08:25 Monday 20 November 2017", ], ], ["Time[]{2017-08-02 15:42 (X/X)}", "2017-07-31T09:05", ["15:42 diesen Mittwoch"]], [ "Time[]{2017-03-15 19:20 (X/X)}", "2017-03-15T10:46", ["15 Mar 19:20", "15 Mar 19:20", "15 Mar 19:20"], ], ["Time[]{2017-08-10 X:X (X/X)}", "2017-08-09T14:45", ["10 Aug", "10 Aug"]], ["Time[]{2016-11-28 X:X (X/X)}", "2016-11-18T12:56", ["28 Nov 2016", "28 Nov 2016"]], ["Time[]{2017-09-18 X:X (X/X)}", "2017-09-07T08:03", ["2017-09-18", "2017-09-18"]], ["Time[]{2017-09-20 X:X (X/X)}", "2017-09-07T08:03", ["2017-09-20", "2017-09-20"]], [ "Time[]{2016-10-30 X:X (X/X)}", "2016-10-05T13:20", ["2016-10-30 12:05", "2016-10-30 12:05", "2016-10-30 12:05"], ], ["Time[]{2016-12-16 19:55 (X/X)}", "2016-11-23T16:05", ["2016-12-16 19:55"]], ["Time[]{2016-12-16 22:55 (X/X)}", "2016-11-23T16:05", ["2016-12-16 22:55"]], ["Time[]{2016-12-17 13:25 (X/X)}", "2016-11-23T18:55", ["2016-12-17 01:25"]], ["Time[]{2016-12-17 14:55 (X/X)}", "2016-11-23T16:05", ["2016-12-17 02:55"]], ["Time[]{2016-12-17 17:50 (X/X)}", "2016-11-23T18:55", ["2016-12-17 05:50"]], ["Time[]{2016-12-17 19:00 (X/X)}", "2016-11-23T18:55", ["2016-12-17 07:00"]], ["Time[]{2016-12-17 19:20 (X/X)}", "2016-11-23T16:05", ["2016-12-17 07:20"]], ["Time[]{2016-12-17 20:15 (X/X)}", "2016-11-23T18:55", ["2016-12-17 08:15"]], ["Time[]{2016-12-17 12:00 (X/X)}", "2016-11-23T16:05", ["2016-12-17 12:00"]], ["Time[]{2016-12-17 13:05 (X/X)}", "2016-11-23T16:05", ["2016-12-17 13:05"]], [ "Time[]{2016-05-16 X:X (X/X)}", "2016-03-04T16:16", ["16th May 2016", "16th May 2016", "16th May 2016"], ], [ "Time[]{2017-09-05 X:X (X/X)}", "2017-06-27T10:47", ["05th September 2017", "05th September 2017"], ], [ "Time[]{2018-04-07 X:X (X/X)}", "2018-03-05T14:43", ["07th April 2018", "07th April 2018", "07th April 2018"], ], [ "Time[]{2018-02-10 X:X (X/X)}", "2018-01-29T03:05", ["10th February 2018", "10th February 2018"], ], [ "Time[]{2018-03-11 X:X (X/X)}", "2017-11-10T12:37", ["11th March 2018", "11th March 2018"], ], [ "Time[]{2016-11-24 12:50 (X/X)}", "2016-11-16T16:38", ["24th 12:50", "24th 12:50"], ], [ "Time[]{2016-12-24 X:X (X/X)}", "2016-12-11T21:39", ["24th 25th December", "24th 25th December", "24th 25th December"], ], [ "Time[]{2017-05-10 X:X (X/X)}", "2017-05-08T15:39", ["10th of May 2017", "10th of May 2017", "10th of May 2017"], ], [ "Time[]{2018-01-12 X:X (X/X)}", "2017-10-25T07:59", ["am Fr. 12. Januar 2018", "am Fr. 12. Januar 2018"], ], [ "Time[]{2018-03-30 X:X (X/evening)}", "2018-03-11T21:48", ["am Donnerstag Abend 30.3"], ], [ "Time[]{2018-05-25 18:45 (X/X)}", "2018-04-11T10:04", [ "on Friday 25 may at 18:45 in the evening", "on Friday 25 may at 18:45 in the evening", ], ], [ "Time[]{2018-02-23 X:X (X/X)}", "2018-01-05T16:44", ["on Friday 23rd", "ab Freitag 23.02.2018", "on Friday 23/2/2018"], ], ["Time[]{2018-01-18 X:X (X/X)}", "2018-01-16T15:09", ["am Donnerstag den 18."]], [ "Time[]{2017-11-08 X:X (X/X)}", "2017-09-05T08:17", ["am Mittwoch, den 08. November 2017", "am Mittwoch, den 08. November 2017"], ], ["Time[]{2017-05-03 X:X (X/X)}", "2017-04-24T12:02", ["am 3."]], ["Time[]{2017-07-15 X:X (X/X)}", "2017-06-21T11:02", ["am 15"]], ["Time[]{2017-08-07 X:X (X/X)}", "2017-08-04T14:25", ["am 07."]], ["Time[]{2016-11-13 X:X (X/X)}", "2016-10-18T07:23", ["am 13."]], [ "Time[]{2016-06-13 X:X (X/X)}", "2016-03-21T11:20", ["am 13. Juni 2016", "am 13. Juni 2016"], ], [ "Time[]{2018-03-12 X:X (X/morning)}", "2018-03-02T11:56", ["am 12. M\u00e4rz 2018 morgens"], ], # [ # "Time[]{2018-06-13 X:X (X/morning)}", # "2018-03-26T10:02", # ["am 13. Juni 2018 morgens"], # ], [ "Time[]{2016-11-16 21:50 (X/X)}", "2016-11-03T10:07", ["am 16. November 2016 09:50 Uhr"], ], [ "Time[]{2022-12-24 X:X (X/X)}", "2022-11-30T10:07", ["12/24", "12/24", "24.12", "12.24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12" "/24", "12/24"], ], [ "Time[]{2023-08-15 X:X (X/X)}", "2022-11-30T10:07", ["meet with adam 8/15", "meet with adam 8/15", "meet with adam 8/15", "meet with adam 8/15", "meet with martin 8/15", "meet with adam 8/15", "meet with adam 8/15", "meet with martin 8/15", "meet with adam 8/15", "meet with adam 8/15", "meet with " "martin 8/15", 'meet with adam 8/15'], ], [ "Time[]{2022-12-20 X:X (X/X)}", "2022-11-30T10:07", ["meet with adam 12/20", "meet with adam 12/20", "meet with adam 12/20", "meet with adam 12/20", "meet with adam 12/20", "meet with adam 12/20", "meet with adam 12/20", "meet with adam 12/20", "meet with adam 12/20", "meet with martin 12/20", "meet with martin 12/20", "meet with martin 12/20"], ], [ "Time[]{2023-03-13 X:X (X/X)}", "2022-11-30T10:07", ["3/13", "3/13", "3/13", "3/13", "3/13", "3/13", "3/13", "3/13", "3/13", "3/13"], ], [ "Time[]{2023-06-14 X:X (X/X)}", "2022-11-30T10:07", ["6/14", "6/14", "6/14", "6/14", "6/14", "6/14", "6/14", "6/14"], ], [ "Time[]{2023-10-19 X:X (X/X)}", "2022-11-30T10:07", ["10/19", "10/19", "10/19", "10/19", "10/19", "10/19", "10/19", "10/19"], ], [ "Time[]{2022-12-30 X:X (X/X)}", "2022-11-30T10:07", ["12/30", "12/30", "12/30", "12/30", "12/30", "12/30", "12/30", "12/30", "12/30", "12/30", "12/30", "12/30"], ], [ "Time[]{2022-12-24 X:X (X/X)}", "2022-11-30T10:07", ["12/24", "24.12", "12.24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12" "/24", "12/24"], ], [ "Time[]{2017-10-04 X:X (X/evening)}", "2017-09-25T14:37", ["am 04. Oktober 2017 abends"], ], [ "Interval[]{None - 2017-11-20 22:30 (X/X)}", "2017-11-07T14:16", ["am 20. November 2017 sp\u00e4testens 10:30 Uhr"], ], # ["Time[]{2018-04-11 X:X (X/morning)}", "2018-03-27T12:23", ["am 11. morgens"]], # ["Time[]{2018-02-14 X:X (X/morning)}", "2018-01-17T11:48", ["am 14. morgens"]], # [ # "Time[]{2017-11-14 X:X (X/X)}", # "2017-09-07T12:57", # ["am 14.November 2017", "am 14.November 2017"], # ], # [ # "Time[]{2017-01-20 X:X (X/morning)}", # "2016-11-15T10:25", # ["am 20.Januar 2017 morgens"], # ], # [ # "Time[]{2016-08-15 X:X (X/afternoon)}", # "2016-06-23T11:34", # ["am 15.8. am Nachmittag"], # ], # ["Time[]{2018-04-15 X:X (X/evening)}", "2018-03-14T15:40", ["am 15.04 am Abend"]], # [ # "Time[]{2018-04-11 X:X (X/lateafternoon)}", # "2018-03-16T11:54", # ["am 11.04 sp\u00e4tnachmittags"], # ], # [ # "Time[]{2017-12-15 X:X (X/lateevening)}", # "2017-12-08T10:34", # ["am 15.12 sp\u00e4t abends"], # ], # [ # "Time[]{2018-03-16 X:X (X/afternoon)}", # "2018-03-08T04:32", # ["am 16.03. am Nachmittag"], # ], # [ # "Time[]{2017-12-17 X:X (X/afternoon)}", # "2017-12-12T06:45", # ["am 17.12. am Nachmittag"], # ], # ["Time[]{2018-01-25 X:X (X/evening)}", "2018-01-16T17:07", ["am 25.01. am Abend"]], # [ # "Time[]{2018-01-02 X:X (X/afternoon)}", # "2017-12-18T08:47", # ["am 02.01. am nachmittag"], # ], [ "Interval[]{2017-08-28 20:15 (X/X) - 2017-08-28 21:20 (X/X)}", "2017-08-22T12:26", ["am 28.08.17 08:15 - 09:20", "am 28.08.17 08:15 - 09:20"], ], [ "Interval[]{2018-03-02 14:30 (X/X) - 2018-03-02 16:00 (X/X)}", "2018-02-16T17:50", ["am 02.03.18 14:30 - 16:00 Uhr", "am 02.03.18 14:30 - 16:00 Uhr"], ], [ "Interval[]{2018-05-04 17:35 (X/X) - 2018-05-04 18:30 (X/X)}", "2018-03-26T08:13", ["am 04.05.18 17:35 - 18:30 Uhr", "am 04.05.18 17:35 - 18:30 Uhr"], ], [ "Interval[]{2017-12-21 15:30 (X/X) - 2017-12-21 16:40 (X/X)}", "2017-11-22T12:23", ["am 21.12.17 15:30 - 16:40", "am 21.12.17 15:30 - 16:40"], ], [ "Interval[]{2018-03-14 17:45 (X/X) - 2018-03-14 19:10 (X/X)}", "2018-03-01T12:42", ["am 14.03.18 17:45 -- 19:10 Uhr", "am 14.03.18 17:45 -- 19:10 Uhr"], ], [ "Interval[]{2017-11-02 15:00 (X/X) - 2017-11-02 18:00 (X/X)}", "2017-10-17T08:57", ["am 02.11.2017 15-18 Uhr", "am 02.11.2017 15-18 Uhr"], ], [ "Interval[]{2018-04-04 19:10 (X/X) - 2018-04-04 20:20 (X/X)}", "2018-03-29T11:39", ["am 04.04.2018 07:10 - 08:20", "am 04.04.2018 07:10 - 08:20"], ], [ "Interval[]{2018-02-06 19:10 (X/X) - 2018-02-06 20:40 (X/X)}", "2017-12-22T09:56", ["am 06.02.2018 07:10 - 08:40", "am 06.02.2018 07:10 - 08:40"], ], [ "Interval[]{2018-02-06 19:50 (X/X) - 2018-02-06 21:15 (X/X)}", "2017-12-22T09:56", ["am 06.02.2018 19:50 - 21:15", "am 06.02.2018 19:50 - 21:15"], ], [ "Interval[]{2018-03-07 16:03 (X/X) - 2018-03-07 20:07 (X/X)}", "2018-02-19T09:03", ["am 07.03.2018 16:03 - 20:07", "am 07.03.2018 16:03 - 20:07"], ], [ "Interval[]{2017-06-12 18:50 (X/X) - 2017-06-12 20:00 (X/X)}", "2017-06-08T11:07", ["am 12.06.2017 06:50 - 08:00", "am 12.06.2017 06:50 - 08:00"], ], [ "Interval[]{2017-11-16 18:05 (X/X) - 2017-11-16 19:35 (X/X)}", "2017-11-09T11:59", ["am 16.11.2017 18:05 - 19:35 Uhr", "am 16.11.2017 18:05 - 19:35 Uhr"], ], [ "Interval[]{2017-07-17 19:00 (X/X) - 2017-07-17 21:00 (X/X)}", "2017-07-11T11:53", ["am 17.07.2017 07:00-09:00 Uhr", "am 17.07.2017 07:00-09:00 Uhr"], ], [ "Time[]{2018-06-07 19:00 (X/X)}", "2018-03-05T13:15", ["am 07.06.2018 um 07.00 Uhr morgens"], ], [ "Interval[]{X-X-X 20:00 (X/X) - None}", "2017-06-14T15:35", ["ab 08:00 Uhr", "ab 08:00 Uhr", "ab 08:00 Uhr"], ], [ "Interval[]{2017-07-20 18:00 (X/X) - None}", "2017-06-23T08:54", ["ab 18:00 Uhr 20.07.2017"], ], [ "Interval[]{2016-11-28 08:00 (X/X) - None}", "2016-11-14T13:36", ["ab 08:00 Uhr am 28.11.2016"], ], [ "Interval[]{X-X-X 16:00 (X/X) - None}", "2016-12-16T08:09", ["ab 16Uhr", "ab 16Uhr", "ab 16Uhr"], ], [ "Interval[]{2017-02-10 14:00 (X/X) - None}", "2017-01-29T14:13", ["ab 14h am 10.02.2017"], ], [ "Time[]{2018-03-22 X:X (X/X)}", "2018-03-15T11:38", ["on the 22.", "Donnerstag 22.3."], ], [ "Time[]{2017-01-24 X:X (X/evening)}", "2017-01-24T13:24", ["ab heute Abend", "ab heute Abend", "ab heute Abend"], ], [ "Interval[]{2022-12-05 X:X (X/X) - 2022-12-06 X:X (X/X)}", "2022-11-29T15:35", [ "Monday to tuesday", "Monday to tuesday", ], ], [ "Interval[]{2017-11-08 X:X (X/X) - 2017-11-10 X:X (X/X)}", "2017-10-12T07:20", ["vom 8.11 bis 10.11"], ], ["Time[]{2017-06-12 X:X (X/X)}", "2017-06-08T08:38", ["the 12."]], ["Time[]{2017-03-09 X:X (X/X)}", "2017-03-07T07:36", ["vom 09."]], [ "Time[]{2018-04-20 X:X (X/noon)}", "2018-04-05T08:59", ["vom 16. - 20. April Mittags", "vom 16. - 20. April Mittags"], ], [ "Interval[]{2017-09-04 X:X (X/X) - 2017-09-06 X:X (X/X)}", "2017-08-24T12:11", ["vom 04.09 bis 06.09"], ], [ "Interval[]{2018-02-07 X:X (X/X) - 2018-02-08 X:X (X/X)}", "2018-01-11T16:34", ["vom 07.02 bis 08.02"], ], [ "Interval[]{2017-05-12 X:X (X/X) - 2017-05-13 X:X (X/X)}", "2017-04-13T10:10", ["vom 12.05 bis 13.05"], ], [ "Interval[]{2017-08-14 X:X (X/X) - 2017-08-16 X:X (X/X)}", "2017-07-21T08:09", ["vom 14.08 bis 16.08"], ], [ "Interval[]{2017-03-15 X:X (X/X) - 2017-03-16 X:X (X/X)}", "2017-03-14T08:54", ["vom 15.03 bis 16.03"], ], [ "Interval[]{2017-01-16 X:X (X/X) - 2017-01-19 X:X (X/X)}", "2017-01-10T08:23", ["vom 16.01 bis 19.01"], ], [ "Interval[]{2018-02-18 X:X (X/X) - 2018-02-23 X:X (X/X)}", "2018-02-12T13:36", ["vom 18.02 bis 23.02"], ], [ "Time[]{2018-01-04 21:00 (X/X)}", "2017-12-18T15:50", ["vom 02.01. - 04.01. um 21:00 Uhr", "vom 02.01. - 04.01. um 21:00 Uhr"], ], [ "Interval[]{2017-06-07 X:X (X/X) - 2017-06-08 X:X (X/X)}", "2017-06-06T10:56", ["f\u00fcr 07.06. bis 08.06"], ], [ "Interval[]{2017-11-02 X:X (X/X) - 2017-11-03 X:X (X/X)}", "2017-10-16T13:21", ["vom 02.11. bis 03.11"], ], [ "Interval[]{2017-02-07 X:X (X/X) - 2017-02-10 X:X (X/X)}", "2017-02-03T09:16", ["vom 07.02. bis 10.02"], ], [ "Interval[]{2017-01-09 X:X (X/X) - 2017-01-10 X:X (X/X)}", "2017-01-04T08:44", ["vom 09.01. bis 10.01"], ], [ "Interval[]{2017-07-10 X:X (X/X) - 2017-07-12 X:X (X/X)}", "2017-06-20T11:06", ["vom 10.07. bis 12.07"], ], [ "Time[]{2017-07-06 16:00 (X/X)}", "2017-07-06T06:10", ["06.07 16:00", "06.07 16:00", "06.07 16:00"], ], [ "Interval[]{None - 2016-10-04 08:30 (X/X)}", "2016-09-07T14:13", ["vor 08:30 Uhr am 04.10."], ], [ "Time[]{2017-07-05 X:X (X/morning)}", "2017-07-04T15:51", ["morgen Mittwoch", "morgen Mittwoch"], ], [ "Time[]{2017-08-02 18:30 (X/X)}", "2017-07-25T15:21", ["kommenden Mittwoch den 02.August 2017 06:30"], ], # ["Time[]{2017-10-26 X:X (X/first)}", "2017-10-25T12:42", ["earliest 26.10"]], [ "Interval[]{2017-02-06 X:X (X/X) - 2017-02-07 X:X (X/X)}", "2017-02-06T13:13", [ "heute 06.02 bis morgen 7.02", "heute 06.02 bis morgen 7.02", "heute 06.02 bis morgen 7.02", ], ], # [ # "Interval[]{None - 2017-12-15 X:X (X/afternoon)}", # "2017-12-14T20:43", # ["tomorrow 15.12 before afternoon"], # ], [ "Time[]{2016-11-21 X:X (X/X)}", "2016-11-21T16:18", ["heute 21.11.", "heute 21.11.", "heute 21.11."], ], [ "Interval[]{2016-10-05 18:00 (X/X) - None}", "2016-09-07T14:13", [ "nach 18:00 Uhr am 05.10.", "nach 18:00 Uhr am 05.10.", "nach 18:00 Uhr am 05.10.", ], ], [ "Interval[]{2018-02-07 15:00 (X/X) - None}", "2018-01-30T12:32", ["nach 15:00 Uhr am 07.02.2018"], ], [ "Interval[]{X-X-X 16:00 (X/X) - None}", "2016-09-17T08:01", ["after 4pm", "after 4pm", "after 4pm"], ], [ "Interval[]{X-X-X 19:00 (X/X) - None}", "2017-11-22T07:12", ["abends ab 19:00", "abends ab 19:00", "abends ab 19:00"], ], ["Time[]{2016-09-09 X:X (X/morning)}", "2016-09-08T11:04", ["morgen frueh"]], [ "Interval[]{2017-11-02 14:00 (X/X) - 2017-11-02 16:00 (X/X)}", "2017-11-02T07:03", [ "heute zwischen 14 und 16 Uhr", "heute zwischen 14 und 16 Uhr", "heute zwischen 14 und 16 Uhr", ], ], [ "Interval[]{2017-11-14 07:30 (X/X) - 2017-11-14 12:52 (X/X)}", "2017-11-13T09:59", ["morgen, den 14.11.2017 07:30 - 12:52 Uhr"], ], [ "Time[]{2017-11-06 X:X (X/X)}", "2017-11-03T07:20", [ "KW 45 bis KW 51 von montags bis freitags 06.11.2017", "on Monday - 06.11.2017", "KW 45 bis KW 51 von montags bis freitags 06.11.2017", "November 6, 2017", "Montag 06.11", "on Monday - 06.11.2017", ], ], ["Time[]{2017-07-07 X:X (X/X)}", "2017-05-31T08:47", ["Am Freitag 07.07.2017"]], [ "Time[]{2017-06-29 X:X (X/X)}", "2017-06-19T12:47", ["Am Donnerstag den 29.06", "Am Donnerstag den 29.06"], ], [ "Interval[]{2017-06-26 19:50 (X/X) - 2017-06-26 22:00 (X/X)}", "2017-06-20T11:10", ["Mon 26th June 07:50-10:00"], ], [ "Time[]{2016-11-17 13:51 (X/X)}", "2016-11-14T08:48", ["Donnerstag Nachmittag 13:51"], ], [ "Time[]{2017-12-21 19:00 (X/X)}", "2017-12-18T10:37", [ "Diesen Donnerstag, 21.12. gegen 07:00", "Diesen Donnerstag, 21.12. gegen 07:00", ], ], ["Time[]{2017-11-02 17:50 (X/X)}", "2017-10-29T18:23", ["Thurs 2 Nov 1750"]], ["Time[]{2017-10-06 14:00 (X/X)}", "2017-09-29T13:47", ["Freitag 14 Uhr"]], ["Time[]{2017-10-12 22:45 (X/X)}", "2017-10-09T09:05", ["Donnerstag 10:45 Uhr"]], [ "Time[]{2017-09-07 X:X (X/X)}", "2017-05-23T12:46", ["Donnerstag 07.09.17", "am Donnerstag 7.9.2017", "am Donnerstag 07.09.17"], ], ["Time[]{2016-12-15 X:X (X/X)}", "2016-11-29T08:43", ["Donnerstag 15.12.16"]], ["Time[]{2017-08-24 X:X (X/X)}", "2017-08-16T07:10", ["Donnerstag 24.08.17"]], ["Time[]{2017-04-07 X:X (X/X)}", "2017-03-06T13:32", ["Freitag 07.04.17"]], ["Time[]{2017-11-03 X:X (X/X)}", "2017-11-01T07:20", ["Donnerstag 03.11.2017"]], ["Time[]{2017-04-06 X:X (X/X)}", "2017-03-09T14:13", ["Donnerstag 06.04.2017"]], ["Time[]{2018-06-07 X:X (X/X)}", "2017-11-16T09:29", ["Donnerstag 07.06.2018"]], ["Time[]{2018-02-08 X:X (X/X)}", "2017-11-16T09:29", ["Donnerstag 08.02.2018"]], [ "Time[]{2018-03-08 X:X (X/X)}", "2017-11-16T09:29", ["Donnerstag 08.03.2018", "am Donnerstag 08.03.2018"], ], ["Time[]{2018-01-11 X:X (X/X)}", "2017-11-16T09:29", ["Donnerstag 11.01.2018"]], [ "Time[]{2018-04-12 X:X (X/X)}", "2017-11-16T09:29", ["Donnerstag 12.04.2018", "Donnerstag 12.04."], ], ["Time[]{2017-07-03 18:48 (X/X)}", "2017-06-30T13:27", ["Montag 06:48h"]], ["Time[]{2016-04-14 14:50 (X/X)}", "2016-04-12T16:36", ["Donnerstag 14:50"]], ["Time[]{2017-05-12 23:30 (X/X)}", "2017-05-08T12:58", ["Freitag 11:30"]], ["Time[]{2016-04-20 16:30 (X/X)}", "2016-04-15T11:21", ["Mittwoch 16:30"]], ["Time[]{2018-01-31 17:00 (X/X)}", "2018-01-25T11:04", ["Mittwoch 17:00"]], ["Time[]{2018-02-06 17:00 (X/X)}", "2018-02-02T13:47", ["Dienstag 05:00 Uhr"]], ["Time[]{2017-05-30 18:24 (X/X)}", "2017-05-29T06:22", ["Dienstag 06:24 Uhr"]], ["Time[]{2018-02-20 16:00 (X/X)}", "2018-02-16T10:44", ["Dienstag 16:00 Uhr"]], ["Time[]{2017-05-30 16:25 (X/X)}", "2017-05-29T06:22", ["Dienstag 16:25 Uhr"]], [ "Interval[]{2017-07-10 18:30 (X/X) - 2017-07-10 19:50 (X/X)}", "2017-05-31T07:58", ["Monday 10th of July 18:30 - 19:50"], ], [ "Time[]{2017-06-28 22:10 (X/X)}", "2017-06-22T07:47", ["Wednesday 28th of June 10:10SXF"], ], ["Time[]{2016-04-07 17:00 (X/X)}", "2016-04-05T12:38", ["Donnerstag 5pm"]], [ "Time[]{2017-03-09 20:35 (X/X)}", "2017-02-24T10:51", ["Sunday 9th of March 20:35CDG"], ], [ "Interval[]{2017-06-12 18:00 (X/X) - None}", "2017-06-08T08:38", ["Monday evening 12.06.2017 after 18:00"], ], ["Time[]{2017-05-18 18:00 (X/X)}", "2017-05-15T11:59", ["Donnerstag abend 18:00"]], ["Time[]{2017-01-03 X:X (X/X)}", "2016-12-14T08:33", ["Dienstag, 3.1.2017"]], ["Time[]{2017-01-24 X:X (X/X)}", "2016-12-14T08:33", ["Dienstag, 24.1.2017"]], ["Time[]{2016-11-25 10:00 (X/X)}", "2016-11-22T15:30", ["Friday, 25.11. 10 am"]], [ "Time[]{2017-09-14 X:X (X/X)}", "2017-09-01T10:01", ["Donnerstag 14.09.17", "Donnerstag 14.09"], ], ["Time[]{2016-06-16 X:X (X/X)}", "2016-06-03T09:37", ["Donnerstag 16.06.16"]], ["Time[]{2018-02-01 X:X (X/X)}", "2018-01-19T15:29", ["Donnerstag 01.02.2018"]], ["Time[]{2017-05-05 12:55 (X/X)}", "2017-05-03T18:24", ["Freitag 12:55"]], [ "Time[]{2017-11-17 16:10 (X/X)}", "2017-11-09T10:54", ["Friday 17th Nov 4:10 pm"], ], ["Time[]{2018-02-02 00:45 (X/X)}", "2018-01-15T16:51", ["2 FEB 00:45"]], ["Time[]{2018-02-07 20:00 (X/X)}", "2018-01-08T21:10", ["7 FEB 08:00"]], ["Time[]{2018-04-06 16:30 (X/X)}", "2018-03-29T09:26", ["6 APRIL 16:30"]], ["Time[]{2017-12-01 19:10 (X/X)}", "2017-11-20T19:42", ["1 Dec 0710"]], ["Time[]{2017-12-01 20:15 (X/X)}", "2017-11-20T19:42", ["1 Dec 0815"]], ["Time[]{2018-02-02 17:25 (X/X)}", "2018-01-24T10:06", ["2 Feb 0525"]], ["Time[]{2018-01-02 14:30 (X/X)}", "2017-12-09T12:31", ["2 Jan 1430"]], ["Time[]{2018-01-02 23:25 (X/X)}", "2017-12-09T12:31", ["2 Jan 2325"]], ["Time[]{2017-11-02 12:35 (X/X)}", "2017-08-25T12:23", ["2 Nov 1235"]], ["Time[]{2017-11-02 18:15 (X/X)}", "2017-08-25T12:23", ["2 Nov 1815"]], ["Time[]{2017-11-02 19:40 (X/X)}", "2017-10-25T09:35", ["2 Nov 1940"]], ["Time[]{2017-12-03 20:25 (X/X)}", "2017-11-20T19:42", ["3 Dec 2025"]], ["Time[]{2017-12-03 21:25 (X/X)}", "2017-11-20T19:42", ["3 Dec 2125"]], ["Time[]{2018-03-09 19:55 (X/X)}", "2018-02-20T11:11", ["9 March 0755"]], ["Time[]{2016-10-04 22:35 (X/X)}", "2016-09-12T08:20", ["4. Okt 22:35"]], ["Time[]{2017-06-01 14:15 (X/X)}", "2017-05-12T15:32", ["1. Juni 14:15"]], ["Time[]{2017-07-05 21:34 (X/X)}", "2017-06-29T14:30", ["5. Juli 09:34"]], ["Time[]{2017-07-05 13:47 (X/X)}", "2017-06-29T14:30", ["5. Juli 13:47"]], ["Time[]{2017-06-02 22:20 (X/X)}", "2017-05-12T15:32", ["2. Juni 10:20 Uhr"]], ["Time[]{2017-09-06 22:30 (X/X)}", "2017-08-07T14:26", ["6. Sept 10:30"]], ["Time[]{2018-02-08 18:35 (X/X)}", "2018-01-17T10:14", ["8. Februar 6:35"]], ["Time[]{2017-08-02 16:45 (X/X)}", "2017-07-10T10:57", ["2. August 16:45"]], ["Time[]{2016-04-07 12:30 (X/X)}", "2016-03-30T12:28", ["7. April 12:30h"]], ["Time[]{2017-12-04 21:30 (X/X)}", "2017-11-24T12:39", ["4. Dezember 21:30"]], ["Time[]{2017-08-01 14:08 (X/X)}", "2017-07-31T11:31", ["1. August 14:08 Uhr"]], ["Time[]{2017-10-06 X:X (X/X)}", "2017-09-28T10:01", ["6. 10."]], ["Time[]{2017-02-07 18:05 (X/X)}", "2016-12-16T09:02", ["7.2.2017 um 18:05"]], ["Time[]{2017-03-24 19:05 (X/X)}", "2017-03-13T15:25", ["7:05 Friday 24. march"]], ["Time[]{2017-07-02 15:10 (X/X)}", "2017-05-31T12:41", ["02 JUL 15:10"]], ["Time[]{2017-07-02 16:30 (X/X)}", "2017-05-31T12:41", ["02 JUL 16:30"]], ["Time[]{2018-01-04 12:20 (X/X)}", "2017-12-06T12:36", ["04 JAN 12:20"]], ["Time[]{2017-06-04 19:45 (X/X)}", "2017-05-17T09:16", ["04 JUN 07:45"]], ["Time[]{2017-06-04 21:35 (X/X)}", "2017-05-17T09:16", ["04 JUN 09:35"]], ["Time[]{2018-01-05 00:10 (X/X)}", "2017-12-06T12:36", ["05 JAN 00:10"]], ["Time[]{2017-07-06 20:00 (X/X)}", "2017-05-30T13:31", ["06 JUL 20:00"]], ["Time[]{2017-07-06 21:45 (X/X)}", "2017-05-30T13:31", ["06 JUL 21:45"]], ["Time[]{2017-06-06 20:45 (X/X)}", "2017-05-17T09:16", ["06 JUN 20:45"]], ["Time[]{2017-06-06 22:35 (X/X)}", "2017-05-17T09:16", ["06 JUN 22:35"]], ["Time[]{2017-07-07 19:05 (X/X)}", "2017-06-21T10:04", ["07 JUL 07:05"]], ["Time[]{2017-07-07 17:25 (X/X)}", "2017-06-21T10:04", ["07 JUL 17:25"]], ["Time[]{2017-07-07 19:10 (X/X)}", "2017-05-30T13:31", ["07 JUL 19:10"]], ["Time[]{2017-06-07 19:55 (X/X)}", "2017-05-17T09:16", ["07 JUN 07:55"]], ["Time[]{2017-06-07 20:50 (X/X)}", "2017-05-17T09:16", ["07 JUN 08:50"]], ["Time[]{2017-06-08 21:50 (X/X)}", "2017-05-17T09:16", ["08 JUN 09:50"]], ["Time[]{2018-01-10 19:10 (X/X)}", "2017-12-30T15:14", ["10 JAN 19:10"]], ["Time[]{2018-01-10 22:05 (X/X)}", "2017-12-30T15:14", ["10 JAN 22:05"]], ["Time[]{2017-10-10 20:40 (X/X)}", "2017-09-09T06:12", ["10 OCT 08:40"]], ["Time[]{2017-10-10 21:15 (X/X)}", "2017-09-19T09:55", ["10 OCT 09:15"]], ["Time[]{2017-10-10 22:30 (X/X)}", "2017-09-19T09:55", ["10 OCT 10:30"]], ["Time[]{2017-10-10 23:35 (X/X)}", "2017-09-09T06:12", ["10 OCT 11:35"]], ["Time[]{2018-01-11 17:35 (X/X)}", "2017-12-30T15:14", ["11 JAN 17:35"]], ["Time[]{2018-01-11 18:10 (X/X)}", "2017-12-30T15:14", ["11 JAN 18:10"]], ["Time[]{2018-01-11 19:55 (X/X)}", "2017-12-30T15:14", ["11 JAN 19:55"]], ["Time[]{2018-01-11 21:50 (X/X)}", "2017-12-30T15:14", ["11 JAN 21:50"]], ["Time[]{2017-10-11 17:00 (X/X)}", "2017-09-09T06:12", ["11 OCT 17:00"]], ["Time[]{2017-09-11 13:15 (X/X)}", "2017-09-09T06:12", ["11 SEP 13:15"]], ["Time[]{2017-09-11 16:05 (X/X)}", "2017-09-09T06:12", ["11 SEP 16:05"]], ["Time[]{2018-01-12 15:15 (X/X)}", "2017-12-30T15:14", ["12 JAN 15:15"]], ["Time[]{2018-01-12 17:05 (X/X)}", "2017-12-30T15:14", ["12 JAN 17:05"]], ["Time[]{2018-01-12 19:45 (X/X)}", "2017-12-30T15:14", ["12 JAN 19:45"]], ["Time[]{2017-09-12 17:00 (X/X)}", "2017-09-09T06:12", ["12 SEP 17:00"]], ["Time[]{2017-09-12 17:55 (X/X)}", "2017-09-09T06:12", ["12 SEP 17:55"]], ["Time[]{2018-02-13 19:45 (X/X)}", "2017-10-16T13:34", ["13 FEB 07:45"]], ["Time[]{2018-02-13 20:35 (X/X)}", "2017-10-16T13:34", ["13 FEB 08:35"]], ["Time[]{2018-02-13 18:05 (X/X)}", "2017-10-16T13:34", ["13 FEB 18:05"]], ["Time[]{2018-02-13 18:50 (X/X)}", "2017-10-16T13:34", ["13 FEB 18:50"]], ["Time[]{2017-11-15 16:30 (X/X)}", "2017-11-14T04:09", ["15 NOV 16:30"]], ["Time[]{2017-11-15 17:35 (X/X)}", "2017-11-14T04:09", ["15 NOV 17:35"]], ["Time[]{2017-11-15 18:15 (X/X)}", "2017-11-14T04:09", ["15 NOV 18:15"]], ["Time[]{2018-04-15 19:10 (X/X)}", "2018-03-29T09:26", ["15 APRIL 19:10"]], ["Time[]{2016-03-03 18:55 (X/X)}", "2016-02-17T10:04", ["03 Mar 18:55"]], ["Time[]{2016-03-03 22:55 (X/X)}", "2016-02-17T10:04", ["03 Mar 22:55"]], ["Time[]{2016-03-04 00:45 (X/X)}", "2016-02-17T10:04", ["04 Mar 00:45"]], ["Time[]{2016-03-04 16:55 (X/X)}", "2016-02-17T10:04", ["04 Mar 16:55"]], ["Time[]{2016-03-09 20:30 (X/X)}", "2016-03-01T23:13", ["09 Mar 20:30"]], ["Time[]{2016-03-10 21:15 (X/X)}", "2016-03-01T23:13", ["10 Mar 21:15"]], ["Time[]{2016-02-15 19:25 (X/X)}", "2016-02-10T16:38", ["15 Feb 19:25"]], ["Time[]{2016-02-16 20:15 (X/X)}", "2016-02-10T16:38", ["16 Feb 08:15"]], ["Time[]{2016-02-16 13:05 (X/X)}", "2016-02-10T16:38", ["16 Feb 13:05"]], ["Time[]{2016-02-18 20:55 (X/X)}", "2016-02-10T16:38", ["18 Feb 20:55"]], ["Time[]{2016-02-18 22:15 (X/X)}", "2016-02-10T16:38", ["18 Feb 22:15"]], ["Time[]{2016-03-18 20:45 (X/X)}", "2016-03-04T13:34", ["18 Mar 20:45"]], ["Time[]{2017-12-12 22:30 (X/X)}", "2017-11-29T15:28", ["12 Dec 1030"]], ["Time[]{2018-03-12 22:05 (X/X)}", "2018-02-28T11:22", ["12 Mar 1005"]], ["Time[]{2017-05-12 21:00 (X/X)}", "2017-05-09T18:51", ["12 May 0900"]], ["Time[]{2017-05-12 22:15 (X/X)}", "2017-05-09T18:51", ["12 May 1015"]], ["Time[]{2017-05-12 17:00 (X/X)}", "2017-05-09T18:51", ["12 May 1700"]], ["Time[]{2017-05-12 18:15 (X/X)}", "2017-05-09T18:51", ["12 May 1815"]], ["Time[]{2017-11-12 20:20 (X/X)}", "2017-08-25T12:23", ["12 Nov 2020"]], ["Time[]{2017-11-12 22:55 (X/X)}", "2017-08-25T12:23", ["12 Nov 2255"]], ["Time[]{2017-11-13 20:20 (X/X)}", "2017-08-25T12:23", ["13 Nov 2020"]], ["Time[]{2017-11-13 22:55 (X/X)}", "2017-08-25T12:23", ["13 Nov 2255"]], ["Time[]{2017-11-13 23:30 (X/X)}", "2017-08-25T12:23", ["13 Nov 2330"]], ["Time[]{2017-12-14 22:20 (X/X)}", "2017-11-29T15:28", ["14 Dec 1020"]], ["Time[]{2017-05-14 19:05 (X/X)}", "2017-05-03T12:01", ["14 May 0705pm"]], ["Time[]{2017-07-27 23:00 (X/X)}", "2017-07-20T15:50", ["27 July 1100"]], ["Time[]{2017-10-04 14:55 (X/X)}", "2017-08-04T07:06", ["04 October 02:55"]], ["Time[]{2017-10-04 12:00 (X/X)}", "2017-08-04T07:06", ["04 October 12.00"]], ["Time[]{2018-03-02 12:50 (X/X)}", "2018-02-05T13:59", ["02 March 12:50"]], ["Time[]{2017-08-10 17:00 (X/X)}", "2017-07-14T06:23", ["10 August 17:00"]], ["Time[]{2018-03-10 19:40 (X/X)}", "2018-02-23T09:15", ["10 March 1940"]], ["Time[]{2018-03-13 17:00 (X/X)}", "2018-02-23T09:15", ["13 March 1700"]], ["Time[]{2016-02-15 20:15 (X/X)}", "2016-02-13T08:17", ["15 feb 08:15"]], ["Time[]{2016-02-15 21:30 (X/X)}", "2016-02-13T08:17", ["15 feb 09:30"]], ["Time[]{2016-02-15 22:15 (X/X)}", "2016-02-13T08:17", ["15 feb 10:15"]], [ "Interval[]{2017-12-12 X:X (X/X) - 2017-12-13 X:X (X/X)}", "2017-10-25T13:27", ["12- 13.12.17"], ], [ "Interval[]{2018-01-15 X:X (X/X) - 2018-01-17 X:X (X/X)}", "2017-12-04T15:01", ["15-17.01.2018"], ], [ "Interval[]{2017-05-02 X:X (X/X) - 2017-05-04 X:X (X/X)}", "2017-04-28T13:07", ["02. - 04.05. 2017", "02. - 04.05. 2017"], ], [ "Interval[]{2017-11-16 X:X (X/X) - 2017-11-17 X:X (X/X)}", "2017-09-18T15:23", ["16. - 17.11.17"], ], [ "Interval[]{2017-08-03 X:X (X/X) - 2017-08-04 X:X (X/X)}", "2017-06-29T12:25", ["03. - 04.08.2017"], ], [ "Interval[]{2017-09-03 X:X (X/X) - 2017-09-05 X:X (X/X)}", "2017-04-03T14:57", ["03. - 05.09.2017"], ], [ "Interval[]{2017-07-13 X:X (X/X) - 2017-07-14 X:X (X/X)}", "2017-05-31T09:03", ["13. - 14.07.2017"], ], ["Time[]{2016-05-20 18:55 (X/X)}", "2016-04-18T09:08", ["20. may 18:55"]], ["Time[]{2017-05-16 19:30 (X/X)}", "2017-05-08T12:11", ["16. may 19:30"]], ["Time[]{2017-10-21 23:30 (X/X)}", "2017-07-07T08:26", ["21. Oct 11:30"]], ["Time[]{2017-10-21 19:00 (X/X)}", "2017-07-07T08:26", ["21. Oct 19:00"]], ["Time[]{2017-10-21 20:04 (X/X)}", "2017-07-07T08:26", ["21. Oct 20:04"]], ["Time[]{2017-07-19 20:39 (X/X)}", "2017-07-03T16:28", ["19. Juli 8:39"]], ["Time[]{2017-03-07 17:20 (X/X)}", "2017-02-17T10:35", ["07. M\u00e4rz 17:20 Uhr"]], ["Time[]{2018-03-12 22:50 (X/X)}", "2018-03-09T13:29", ["12. M\u00e4rz 10:50"]], ["Time[]{2018-03-12 12:05 (X/X)}", "2018-03-09T13:29", ["12. M\u00e4rz 12:05"]], ["Time[]{2018-03-13 23:15 (X/X)}", "2018-03-08T15:14", ["13. M\u00e4rz 11:15"]], ["Time[]{2018-03-13 14:40 (X/X)}", "2018-03-08T15:14", ["13. M\u00e4rz 14:40"]], ["Time[]{2018-03-14 19:00 (X/X)}", "2018-03-09T13:29", ["14. M\u00e4rz 07:00"]], ["Time[]{2018-03-14 22:10 (X/X)}", "2018-03-09T13:29", ["14. M\u00e4rz 10:10"]], ["Time[]{2018-03-15 20:40 (X/X)}", "2018-03-08T15:14", ["15. M\u00e4rz 08:40"]], ["Time[]{2018-03-15 22:15 (X/X)}", "2018-03-08T15:14", ["15. M\u00e4rz 10:15"]], ["Time[]{2017-08-31 16:40 (X/X)}", "2017-07-20T10:17", ["31. August 4:40PM"]], ["Time[]{2018-01-10 19:00 (X/X)}", "2018-01-05T06:09", ["10. Januar 7:00"]], ["Time[]{2018-02-27 18:00 (X/X)}", "2018-02-12T10:09", ["27. Februar 18 Uhr"]], ["Time[]{2018-04-10 18:55 (X/X)}", "2018-03-29T14:48", ["10. April 06:55"]], ["Time[]{2018-01-11 20:20 (X/X)}", "2018-01-05T06:09", ["11. Januar 20:20"]], ["Time[]{2016-11-11 13:20 (X/X)}", "2016-10-11T07:13", ["11. November 13:20"]], ["Time[]{2016-11-11 14:50 (X/X)}", "2016-10-11T07:13", ["11. November 14:50"]], ["Time[]{2018-09-11 17:10 (X/X)}", "2018-03-20T12:49", ["11. September 17:10"]], ["Time[]{2018-04-16 23:25 (X/X)}", "2018-04-03T11:50", ["16. April 11:25"]], ["Time[]{2018-04-16 15:25 (X/X)}", "2018-04-03T11:50", ["16. April 15:25"]], ["Time[]{2015-12-16 17:10 (X/X)}", "2015-12-10T16:58", ["16. Dezember 05:10"]], ["Time[]{2015-12-16 18:20 (X/X)}", "2015-12-10T16:58", ["16. Dezember 06:20"]], ["Time[]{2018-02-19 19:45 (X/X)}", "2018-02-14T09:50", ["19. Februar 07:45"]], ["Time[]{2018-02-19 12:40 (X/X)}", "2018-02-14T09:50", ["19. Februar 12:40"]], ["Time[]{2017-01-19 22:35 (X/X)}", "2017-01-16T16:46", ["19. Januar 10:35"]], ["Time[]{2018-04-20 15:30 (X/X)}", "2018-04-03T11:50", ["20. April 15:30"]], ["Time[]{2018-04-20 17:50 (X/X)}", "2018-04-03T11:50", ["20. April 17:50"]], ["Time[]{2018-09-11 20:15 (X/X)}", "2018-03-20T12:49", ["11. September 08:15 Uhr"]], ["Time[]{2017-12-12 14:00 (X/X)}", "2017-12-07T09:10", ["12. Dezember 14:00 Uhr"]], ["Time[]{2017-12-12 20:50 (X/X)}", "2017-12-07T09:10", ["12. Dezember 20:50 Uhr"]], ["Time[]{2017-04-04 17:35 (X/X)}", "2017-03-25T14:11", ["04. April 17:35 h"]], ["Time[]{2018-04-25 22:15 (X/X)}", "2018-03-21T12:49", ["25. apr 10:15"]], [ "Interval[]{2018-12-12 X:X (X/X) - 2018-12-14 X:X (X/X)}", "2018-03-22T15:20", ["12. bis 14.12.2018"], ], ["Time[]{2018-03-13 21:20 (X/X)}", "2018-03-06T11:02", ["13. mar 09:20"]], [ "Interval[]{2018-01-24 X:X (X/X) - 2018-01-29 X:X (X/X)}", "2017-12-18T13:03", ["24.-29. Januar 2018"], ], [ "Interval[]{2018-03-21 X:X (X/X) - 2018-03-23 X:X (X/X)}", "2018-01-09T09:14", ["21.-23.3.18"], ], [ "Interval[]{2017-04-10 X:X (X/X) - 2017-04-11 X:X (X/X)}", "2017-04-04T08:53", ["10.-11.04. 2017", "10.-11.04.2017", "10.-11.04. 2017"], ], [ "Interval[]{2017-11-05 X:X (X/X) - 2017-11-10 X:X (X/X)}", "2017-08-14T16:01", ["05.-10.11.17"], ], [ "Interval[]{2018-05-07 X:X (X/X) - 2018-05-09 X:X (X/X)}", "2018-02-28T17:28", ["07.-09.05.18"], ], [ "Interval[]{2017-10-07 X:X (X/X) - 2017-10-14 X:X (X/X)}", "2017-08-07T08:13", ["07.-14.10.17"], ], [ "Interval[]{2018-05-04 X:X (X/X) - 2018-05-05 X:X (X/X)}", "2018-02-02T09:44", ["04.-05.05.2018"], ], [ "Interval[]{2017-11-05 X:X (X/X) - 2017-11-07 X:X (X/X)}", "2017-09-19T12:19", ["05.-07.11.2017"], ], [ "Interval[]{2018-02-05 X:X (X/X) - 2018-02-10 X:X (X/X)}", "2017-09-26T14:05", ["05.-10.02.2018"], ], [ "Interval[]{2018-02-05 X:X (X/X) - 2018-02-11 X:X (X/X)}", "2017-09-26T14:05", ["05.-11.02.2018"], ], [ "Interval[]{2017-03-06 X:X (X/X) - 2017-03-08 X:X (X/X)}", "2017-01-19T08:09", ["06.-08.03.2017"], ], [ "Interval[]{2018-05-06 X:X (X/X) - 2018-05-09 X:X (X/X)}", "2018-02-07T12:30", ["06.-09.05.2018"], ], [ "Interval[]{2018-06-08 X:X (X/X) - 2018-06-09 X:X (X/X)}", "2018-02-02T10:04", ["08.-09.06.2018"], ], [ "Interval[]{2018-07-08 X:X (X/X) - 2018-07-10 X:X (X/X)}", "2018-02-07T12:30", ["08.-10.07.2018"], ], [ "Interval[]{2018-01-08 X:X (X/X) - 2018-01-11 X:X (X/X)}", "2017-11-16T09:10", ["08.-11.01.2018"], ], [ "Interval[]{2018-06-10 X:X (X/X) - 2018-06-12 X:X (X/X)}", "2018-02-07T12:30", ["10.-12.06.2018"], ], ["Time[]{2017-05-23 14:00 (X/X)}", "2017-04-25T15:59", ["23.Mai 14h"]], [ "Interval[]{None - 2018-02-14 22:30 (X/X)}", "2018-02-02T18:56", ["14.2 sp\u00e4testens um 10:30"], ], [ "Interval[]{2017-03-17 22:30 (X/X) - 2017-03-18 21:25 (X/X)}", "2017-03-09T10:17", ["17.03. 10:30 - 18.03. 09:25"], ], [ "Interval[]{None - 2016-01-20 19:00 (X/X)}", "2016-01-13T12:05", ["20.01. sp\u00e4testens um 19 Uhr"], ], [ "Interval[]{None - 2017-07-03 22:00 (X/X)}", "2017-06-21T13:36", ["03.07. sp\u00e4testens um 10:00 Uhr"], ], [ "Interval[]{2017-08-15 13:00 (X/X) - 2017-08-15 16:30 (X/X)}", "2017-08-02T06:54", ["15.08.17 13 - 16:30"], ], [ "Interval[]{2017-04-05 15:00 (X/X) - 2017-04-05 17:00 (X/X)}", "2017-04-03T11:09", ["05.04.17 15-17 Uhr"], ], [ "Interval[]{2017-06-11 11:00 (X/X) - 2017-06-11 12:00 (X/X)}", "2017-04-18T10:38", ["11.06.17 11-12 Uhr"], ], [ "Interval[]{2017-06-11 11:00 (X/X) - 2017-06-11 13:00 (X/X)}", "2017-04-04T09:18", ["11.06.17 11-13 Uhr"], ], [ "Interval[]{2017-07-13 19:00 (X/X) - 2017-07-13 19:30 (X/X)}", "2017-07-07T14:52", ["13.07.17 19-19:30 Uhr"], ], [ "Time[]{2017-06-02 X:X (X/X)}", "2017-01-23T17:51", ["02.06.17 19.30", "02.06.17 19.30"], ], [ "Interval[]{2016-04-01 19:00 (X/X) - 2016-04-01 21:10 (X/X)}", "2016-03-23T09:11", ["01.04.16 1900-2110"], ], [ "Interval[]{2016-07-01 19:25 (X/X) - 2016-07-01 22:50 (X/X)}", "2016-06-28T09:39", ["01.07.16 1925-2250"], ], [ "Interval[]{2016-05-02 19:30 (X/X) - 2016-05-02 20:00 (X/X)}", "2016-04-27T09:14", ["02.05.16 1930-2000"], ], [ "Interval[]{2016-06-03 19:05 (X/X) - 2016-06-03 21:00 (X/X)}", "2016-05-27T13:01", ["03.06.16 1905-2100"], ], [ "Interval[]{2016-04-04 19:30 (X/X) - 2016-04-04 20:00 (X/X)}", "2016-03-30T12:57", ["04.04.16 1930-2000"], ], [ "Interval[]{2016-04-04 22:40 (X/X) - 2016-04-05 03:30 (X/X)}", "2016-04-04T14:32", ["04.04.16 2240-0330am"], ], [ "Interval[]{2016-05-06 19:00 (X/X) - 2016-05-06 21:10 (X/X)}", "2016-04-29T12:27", ["06.05.16 1900-2110"], ], [ "Interval[]{2016-04-07 19:00 (X/X) - 2016-04-07 21:10 (X/X)}", "2016-04-05T08:03", ["07.04.16 1900-2110"], ], [ "Interval[]{2016-04-08 19:00 (X/X) - 2016-04-08 21:10 (X/X)}", "2016-04-01T13:47", ["08.04.16 1900-2110"], ], [ "Interval[]{2016-07-08 19:05 (X/X) - 2016-07-08 21:00 (X/X)}", "2016-06-29T09:44", ["08.07.16 1905-2100"], ], [ "Interval[]{2016-06-09 19:00 (X/X) - 2016-06-09 21:10 (X/X)}", "2016-06-06T09:52", ["09.06.16 1900-2110"], ], [ "Interval[]{2016-06-10 19:25 (X/X) - 2016-06-10 22:50 (X/X)}", "2016-06-03T07:53", ["10.06.16 1925-2250"], ], [ "Interval[]{2016-05-13 19:00 (X/X) - 2016-05-13 21:10 (X/X)}", "2016-05-06T10:44", ["13.05.16 1900-2110"], ], [ "Interval[]{2016-05-13 19:30 (X/X) - 2016-05-13 20:40 (X/X)}", "2016-05-12T16:03", ["13.05.16 1930-2040"], ], [ "Interval[]{2016-04-15 13:00 (X/X) - 2016-04-15 16:00 (X/X)}", "2016-04-11T13:39", ["15.04.16 von 13-16 Uhr", "15.04.16 von 13-16 Uhr"], ], [ "Interval[]{2018-04-10 08:00 (X/X) - 2018-04-10 10:00 (X/X)}", "2018-03-26T15:54", ["10.04.2018 8-10AM", "10.04.2018 8-10AM"], ], [ "Interval[]{2017-04-07 17:00 (X/X) - 2017-04-07 18:00 (X/X)}", "2017-04-03T11:09", ["07.04.2017 17-18 Uhr"], ], [ "Time[]{2017-03-22 19:10 (X/X)}", "2017-03-07T14:54", ["22.03.2017 19:10", "22.03.2017 19:10"], ], [ "Time[]{2018-02-14 12:00 (X/X)}", "2018-01-24T15:25", ["14.02.2018 morgens ca. 12.00 Uhr"], ], # [ # "Time[]{2017-03-19 09:00 (X/X)}", # "2017-03-03T08:57", # ["19.03.2017 morgens gegen 09.00 h"], # ], ["Time[]{2017-05-15 15:40 (X/X)}", "2017-04-06T09:01", ["15:40 Mon 15 May"]], ["Time[]{2017-04-09 17:20 (X/X)}", "2017-03-30T13:07", ["17:20 So 9. Apr"]], ["Time[]{2017-07-13 22:25 (X/X)}", "2017-07-05T12:39", ["10:25 Thu 13. Jul"]], ["Time[]{2017-03-22 22:35 (X/X)}", "2017-03-13T15:25", ["10:35 Mi 22. M\u00e4r"]], ["Time[]{2017-07-14 23:05 (X/X)}", "2017-07-05T12:39", ["11:05 Fri 14 Jul"]], [ "Time[]{2017-01-11 19:05 (X/X)}", "2017-01-03T07:56", ["19:05 Mittwoch 11 Januar"], ], ["Time[]{2016-12-02 18:50 (X/X)}", "2016-11-02T16:44", ["2 DEC 18:50"]], ["Time[]{2016-11-14 21:30 (X/X)}", "2016-10-31T15:12", ["14 NOV 9:30"]], ["Time[]{2016-12-01 22:00 (X/X)}", "2016-11-22T09:46", ["1 DEC 10:00"]], ["Time[]{2017-07-01 19:40 (X/X)}", "2017-05-19T08:51", ["1 JUL 19:40"]], ["Time[]{2016-11-02 22:15 (X/X)}", "2016-10-28T10:19", ["2 NOV 10:15"]], ["Time[]{2016-11-02 22:35 (X/X)}", "2016-10-28T08:42", ["2 NOV 10:35"]], ["Time[]{2017-10-02 22:15 (X/X)}", "2017-08-30T10:39", ["2 OCT 22:15"]], ["Time[]{2017-04-03 23:40 (X/X)}", "2017-03-15T10:47", ["3 APR 11:40"]], ["Time[]{2017-04-03 12:30 (X/X)}", "2017-03-15T10:47", ["3 APR 12:30"]], ["Time[]{2017-04-03 15:20 (X/X)}", "2017-03-15T10:47", ["3 APR 15:20"]], ["Time[]{2017-04-03 16:30 (X/X)}", "2017-03-15T10:47", ["3 APR 16:30"]], ["Time[]{2017-04-03 18:30 (X/X)}", "2017-03-06T10:53", ["3 APR 18:30"]], ["Time[]{2017-04-03 19:55 (X/X)}", "2017-03-06T10:53", ["3 APR 19:55"]], ["Time[]{2017-08-03 19:40 (X/X)}", "2017-05-19T08:51", ["3 AUG 19:40"]], ["Time[]{2016-11-03 20:00 (X/X)}", "2016-10-28T08:42", ["3 NOV 20:00"]], ["Time[]{2017-08-04 17:15 (X/X)}", "2017-05-19T08:51", ["4 AUG 17:15"]], ["Time[]{2017-08-04 18:20 (X/X)}", "2017-05-19T08:51", ["4 AUG 18:20"]], ["Time[]{2016-11-04 18:35 (X/X)}", "2016-11-02T08:55", ["4 NOV 18:35"]], ["Time[]{2017-04-06 19:40 (X/X)}", "2017-03-06T10:53", ["6 APR 07:40"]], ["Time[]{2017-04-06 21:00 (X/X)}", "2017-03-06T10:53", ["6 APR 09:00"]], ["Time[]{2017-04-06 22:00 (X/X)}", "2017-03-06T10:53", ["6 APR 10:00"]], ["Time[]{2017-04-06 13:10 (X/X)}", "2017-03-06T10:53", ["6 APR 13:10"]], ["Time[]{2017-04-07 12:55 (X/X)}", "2017-03-15T10:47", ["7 APR 12:55"]], ["Time[]{2017-04-07 14:15 (X/X)}", "2017-03-15T10:47", ["7 APR 14:15"]], ["Time[]{2017-04-07 16:10 (X/X)}", "2017-03-15T10:47", ["7 APR 16:10"]], ["Time[]{2017-04-07 17:00 (X/X)}", "2017-03-15T10:47", ["7 APR 17:00"]], ["Time[]{2017-04-07 19:20 (X/X)}", "2017-03-06T10:53", ["7 APR 19:20"]], ["Time[]{2017-04-07 20:20 (X/X)}", "2017-03-06T10:53", ["7 APR 20:20"]], ["Time[]{2017-04-07 21:00 (X/X)}", "2017-03-06T10:53", ["7 APR 21:00"]], ["Time[]{2017-04-07 22:10 (X/X)}", "2017-03-06T10:53", ["7 APR 22:10"]], ["Time[]{2016-11-09 21:00 (X/X)}", "2016-11-02T08:51", ["9 NOV 09:00"]], ["Time[]{2016-11-09 22:25 (X/X)}", "2016-11-02T08:55", ["9 NOV 10:25"]], ["Time[]{2016-11-10 16:00 (X/X)}", "2016-11-02T09:52", ["10 NOV 16:00"]], ["Time[]{2016-11-10 17:00 (X/X)}", "2016-11-08T09:06", ["10 NOV 17:00"]], ["Time[]{2016-11-10 17:30 (X/X)}", "2016-11-09T09:19", ["10 NOV 17:30"]], ["Time[]{2016-12-11 19:25 (X/X)}", "2016-11-21T10:41", ["11 DEC 19:25"]], ["Time[]{2016-11-11 23:30 (X/X)}", "2016-11-08T11:44", ["11 NOV 11:30"]], ["Time[]{2016-11-11 16:00 (X/X)}", "2016-11-08T11:44", ["11 NOV 16:00"]], ["Time[]{2016-11-11 19:00 (X/X)}", "2016-11-08T09:06", ["11 NOV 19:00"]], ["Time[]{2016-11-12 15:00 (X/X)}", "2016-11-09T15:42", ["12 NOV 15:00"]], ["Time[]{2017-10-12 00:40 (X/X)}", "2017-08-30T10:39", ["12 OCT 00:40"]], ["Time[]{2017-08-13 20:05 (X/X)}", "2017-05-19T08:51", ["13 AUG 08:05"]], ["Time[]{2017-08-13 21:10 (X/X)}", "2017-05-19T08:51", ["13 AUG 09:10"]], ["Time[]{2017-08-13 13:30 (X/X)}", "2017-05-19T08:51", ["13 AUG 13:30"]], ["Time[]{2017-08-13 17:40 (X/X)}", "2017-05-19T08:51", ["13 AUG 17:40"]], ["Time[]{2017-09-15 21:25 (X/X)}", "2017-08-18T14:19", ["15th September 21:25"]], ["Time[]{2018-03-22 19:50 (X/X)}", "2018-02-09T14:33", ["22 mar 7:50"]], [ "Time[]{2018-03-23 13:50 (X/X)}", "2018-02-09T14:33", ["23 march 13:50", "Friday 23rd Mar 13:50"], ], ["Time[]{2018-03-02 07:10 (X/X)}", "2018-02-09T09:04", ["2 mar 7:10am"]], [ "Time[]{2018-04-17 X:X (X/X)}", "2018-04-12T11:16", ["on Tue, 17-Apr", "on Tue, 17-Apr"], ], [ "Time[]{2017-03-12 X:X (X/X)}", "2016-11-14T20:44", ["on Sunday March 12", "on Sunday March 12"], ], [ "Time[]{2016-12-13 X:X (X/X)}", "2016-11-15T15:03", ["on Tuesday 13 December", "16-12-13", "on Tuesday 13 December"], ], [ "Time[]{2017-08-25 X:X (X/X)}", "2017-08-02T08:35", ["am Freitag 25. August", "am Freitag 25. August"], ], [ "Time[]{2017-04-14 X:X (X/X)}", "2017-04-06T15:11", ["am Freitag 14.4.", "am Freitag 14.4."], ], ["Time[]{2018-01-11 15:45 (X/X)}", "2018-01-08T17:30", ["Thursday 15:45"]], [ "Time[]{2017-11-21 X:X (X/X)}", "2017-11-05T14:30", ["am Dienstag 21.11.", "am Dienstag 21.11."], ], [ "Time[]{2016-11-10 X:X (X/X)}", "2016-10-31T00:53", ["am Donnerstag 10.11.", "am Donnerstag 10.11."], ], [ "Time[]{2017-11-23 X:X (X/X)}", "2017-11-05T14:30", ["am Donnerstag 23.11.", "am Donnerstag 23.11.", "Donnerstag 23. November"], ], [ "Time[]{2016-11-24 X:X (X/X)}", "2016-10-19T16:28", ["am Donnerstag 24.11.", "am Donnerstag 24.11."], ], [ "Time[]{2017-08-22 18:40 (X/X)}", "2017-08-10T09:17", ["am Dienstag 22.08. 18:40", "am Dienstag 22.08. 18:40"], ], ["Time[]{2016-01-17 X:X (X/X)}", "2016-12-16T08:38", ["am Dienstag 17.01.2016"]], ["Time[]{2018-06-28 X:X (X/X)}", "2018-03-23T09:58", ["am Donnerstag 28.06.2018"]], [ "Time[]{2017-09-22 X:X (X/X)}", "2017-09-11T16:52", ["on Friday 22/9", "on Friday 22/9"], ], [ "Time[]{2018-01-31 20:40 (X/X)}", "2018-01-25T13:54", ["on Wednesday 31/1 at 08:40", "on Wednesday 31/1 at 08:40"], ], [ "Time[]{2017-08-27 X:X (X/X)}", "2017-08-17T10:25", ["am Sonntag 27/08", "am Sonntag 27/08"], ], ["Time[]{2016-05-11 14:30 (X/X)}", "2016-05-09T20:05", ["am Mittwoch 14:30"]], ["Time[]{2016-02-18 15:55 (X/X)}", "2016-02-16T10:31", ["am Donnerstag 15:55 Uhr"]], ["Time[]{2018-04-30 X:X (X/X)}", "2018-01-25T13:40", ["on Monday 30th April"]], [ "Time[]{2017-07-09 X:X (X/X)}", "2017-06-28T08:23", ["on Sunday 9th July", "on Sunday 9th July"], ], [ "Time[]{2017-03-08 X:X (X/X)}", "2017-02-28T16:22", ["am Mittwoch den 08.03.", "am Mittwoch den 08.03."], ], [ "Time[]{2016-09-01 X:X (X/X)}", "2016-06-06T14:31", ["am Donnerstag, 01. September", "am Donnerstag, 01. September"], ], [ "Time[]{2018-04-10 X:X (X/evening)}", "2018-03-20T08:03", ["am Dienstag, 10.4. abends", "am Dienstag, 10.4. abends"], ], [ "Time[]{2017-08-18 X:X (X/X)}", "2017-08-09T06:58", ["am Freitag 18.08", "am Freitag 18.08"], ], [ "Time[]{2017-09-27 06:30 (X/X)}", "2017-09-20T17:50", ["am Mittwoch 27.09. 06:30am", "am Mittwoch 27.09. 06:30am"], ], ["Time[]{2017-03-21 X:X (X/X)}", "2017-03-13T08:37", ["am Dienstag 21.03.17"]], ["Time[]{2016-11-29 X:X (X/X)}", "2016-10-20T15:40", ["am Dienstag 29.11.16"]], ["Time[]{2017-03-16 X:X (X/X)}", "2017-03-07T11:26", ["am Donnerstag 16.03.17"]], ["Time[]{2017-06-22 X:X (X/X)}", "2017-05-05T10:43", ["am Donnerstag 22.06.17"]], ["Time[]{2018-02-02 X:X (X/X)}", "2018-01-22T14:32", ["am Freitag 02.02.2018"]], ["Time[]{2015-11-20 X:X (X/X)}", "2015-11-06T09:36", ["am Freitag 20.11.2015"]], [ "Time[]{2016-11-07 X:X (X/X)}", "2016-11-04T09:55", ["ab Montag den 07.11", "ab Montag den 07.11"], ], [ "Time[]{2015-10-06 X:X (X/X)}", "2015-09-24T10:40", ["am Dienstag den 06.10.", "am Dienstag den 06.10."], ], [ "Time[]{2017-08-15 X:X (X/X)}", "2017-08-03T12:00", ["am Dienstag den 15.08.", "am Dienstag den 15.08."], ], [ "Time[]{2017-12-09 13:00 (X/X)}", "2017-11-27T14:14", ["um 13 Uhr Samstag 09.12.2017"], ], [ "Interval[]{2017-12-13 16:00 (X/X) - None}", "2017-12-04T09:06", ["am 13.12. ab frühestens 16:00 h", "am 13.12. ab frühestens 16:00 h"], ], [ "Interval[]{None - 2018-03-22 20:00 (X/X)}", "2018-03-09T12:27", ["am 22.03. sp\u00e4testens um 8.00 Uhr"], ], [ "Interval[]{None - 2017-05-16 13:00 (X/X)}", "2017-05-05T08:14", ["am 16.05. sp\u00e4testens um 13 Uhr"], ], [ "Interval[]{None - 2017-07-10 19:30 (X/X)}", "2017-05-30T12:02", ["am 10.07. sp\u00e4testens um 07:30"], ], [ "Interval[]{2017-04-12 19:00 (X/X) - None}", "2017-04-05T12:42", ["am 12.04.2017 ab ca. 7.00 Uhr"], ], [ "Time[]{2016-10-12 16:00 (X/X)}", "2016-09-22T10:28", ["am 12.10.2016 nachmittags 16.00 Uhr", "am 12.10.2016 nachmittags 16.00 Uhr"], ], # [ # "Time[]{2015-10-21 06:55 (X/X)}", # "2015-10-14T14:32", # ["am 21.10.2015 fr\u00fch 06:55", "am 21.10.2015 fr\u00fch 06:55"], # ], [ "Time[]{2016-11-10 17:20 (X/X)}", "2016-10-19T12:53", ["am 10.11.2016 abends 17:20 Uhr", "am 10.11.2016 abends 17:20 Uhr"], ], # [ # "Time[]{2018-02-01 18:48 (X/X)}", # "2018-01-22T07:58", # ["am 01.02.2018 morgens um 06.48 Uhr"], # ], # [ # "Time[]{2017-02-09 23:00 (X/X)}", # "2017-01-27T07:41", # ["am 09.02.2017 vormittags um 11:00 Uhr"], # ], [ "Time[]{2017-06-01 19:00 (X/X)}", "2017-03-28T08:06", ["am 01.06.2017 abends ca. 19.00 Uhr"], ], [ "Time[]{2017-04-12 18:00 (X/X)}", "2017-04-05T12:42", ["am 12.04.2017 abends ca. 18.00 Uhr"], ], [ "Time[]{2016-11-08 20:00 (X/X)}", "2016-10-28T07:29", ["am 08.11.2016 abends gegen 20 Uhr"], ], [ "Time[]{2017-05-30 20:20 (X/X)}", "2017-05-11T11:58", ["um 08:20 Uhr Dienstag 30.05.2017"], ], [ "Interval[]{2018-03-26 X:X (X/X) - 2018-03-29 X:X (X/X)}", "2018-03-14T14:42", ["ab den 26.03.2018-29.03.2018", "ab den 26.03.2018-29.03.2018"], ], [ "Time[]{2015-10-22 X:X (X/evening)}", "2015-10-19T15:13", ["am kommenden Donnerstag abends", "am kommenden Donnerstag abends"], ], [ "Time[]{2018-05-28 14:05 (X/X)}", "2018-04-10T20:29", ["on Monday 28.05.2018 14:05"], ], [ "Interval[]{2017-06-02 X:X (X/X) - 2017-06-03 X:X (X/X)}", "2017-04-28T10:53", ["vom 02. - 03.06.2017"], ], [ "Interval[]{2017-05-08 X:X (X/X) - 2017-05-10 X:X (X/X)}", "2017-03-29T06:38", ["vom 08. - 10.05.2017"], ], [ "Interval[]{2018-04-08 X:X (X/X) - 2018-04-14 X:X (X/X)}", "2018-01-12T10:02", ["vom 08. - 14.04.2018"], ], [ "Interval[]{2017-09-15 X:X (X/X) - 2017-09-16 X:X (X/X)}", "2017-08-14T13:04", ["vom 15. auf den 16.09.2017"], ], [ "Interval[]{2017-02-01 X:X (X/X) - 2017-02-03 X:X (X/X)}", "2016-11-30T20:38", ["vom 01.-03. Februar 2017"], ], [ "Interval[]{2017-03-14 X:X (X/X) - 2017-03-16 X:X (X/X)}", "2016-01-18T07:24", ["vom 14.-16.3.2017"], ], [ "Interval[]{2018-06-05 X:X (X/X) - 2018-06-06 X:X (X/X)}", "2018-02-28T10:20", ["vom 05.-06.06.18"], ], [ "Interval[]{2017-11-08 X:X (X/X) - 2017-11-09 X:X (X/X)}", "2017-10-06T14:27", ["vom 08.-09.11.2017"], ], [ "Interval[]{2017-05-08 X:X (X/X) - 2017-05-12 X:X (X/X)}", "2016-09-02T08:40", ["vom 08.-12.05.2017"], ], [ "Interval[]{2018-03-09 X:X (X/X) - 2018-03-11 X:X (X/X)}", "2018-01-08T08:51", ["vom 09.-11.03.2018"], ], [ "Interval[]{2018-01-09 X:X (X/X) - 2018-01-12 X:X (X/X)}", "2017-11-15T13:15", ["vom 09.-12.01.2018"], ], [ "Interval[]{2018-03-09 X:X (X/X) - 2018-03-12 X:X (X/X)}", "2018-01-08T08:51", ["vom 09.-12.03.2018"], ], [ "Time[]{2016-09-02 X:X (X/morning)}", "2016-09-01T07:53", ["morgen Freitagvormittag", "morgen Freitagvormittag"], ], [ "Time[]{2017-12-21 19:03 (X/X)}", "2017-12-14T08:21", ["thursday next week 7:03pm"], ], [ "Time[]{2017-12-21 15:25 (X/X)}", "2017-12-14T08:21", ["thursday next week 15:25"], ], [ "Time[]{2017-09-12 17:44 (X/X)}", "2017-09-07T07:51", ["n\u00e4chste Woche Dienstag 17:44"], ], ["Time[]{2018-01-29 21:15 (X/X)}", "2018-01-22T12:56", ["next Monday 9:15"]], ["Time[]{2016-06-30 19:05 (X/X)}", "2016-06-28T11:00", ["diesen Donnerstag 7:05"]], [ "Time[]{2017-06-19 21:30 (X/X)}", "2017-06-16T11:26", ["kommenden Montag 9:30 Uhr"], ], ["Time[]{2017-01-08 14:00 (X/X)}", "2017-01-04T16:49", ["diesen Sonntag 14 Uhr"]], ["Time[]{2017-09-28 22:00 (X/X)}", "2017-09-26T16:18", ["diesen Donnerstag 10:00"]], ["Time[]{2017-10-11 18:39 (X/X)}", "2017-10-11T07:28", ["heute Abend um 18:39"]], [ "Time[]{2017-03-23 16:36 (X/X)}", "2017-03-22T09:18", ["morgen Nachmittag um 16:36 Uhr"], ], [ "Time[]{2016-10-11 X:X (X/evening)}", "2016-10-06T09:06", ["kommenden Dienstag abends", "kommenden Dienstag abends"], ], [ "Time[]{2016-10-11 X:X (X/morning)}", "2016-10-06T09:06", ["kommenden Dienstag morgens"], ], [ "Time[]{2017-09-21 20:30 (X/X)}", "2017-09-18T13:35", ["diesen Donnerstag 21.09 08:30 Uhr", "diesen Donnerstag 21.09. 08:30 Uhr"], ], [ "Time[]{2018-01-23 X:X (X/X)}", "2018-01-22T13:41", ["morgen 23.01", "morgen 23.01"], ], [ "Interval[]{2017-01-18 X:X (X/X) - 2017-01-20 X:X (X/X)}", "2017-01-18T12:52", ["heute bis Freitag"], ], ["Time[]{2016-12-09 21:45 (X/X)}", "2016-12-02T13:36", ["next week Fri 0945"]], [ "Time[]{2016-10-19 21:20 (X/X)}", "2016-10-17T09:55", ["this wednesday 19th 09:20", "this wednesday 09:20"], ], [ "Interval[]{2017-06-14 18:00 (X/X) - None}", "2017-05-24T11:13", ["Am 14.06.2017 fr\u00fchestens 18:00 Uhr"], ], ["Time[]{2017-03-07 X:X (X/X)}", "2017-03-06T13:23", ["Di. 07."]], ["Time[]{2016-09-13 X:X (X/X)}", "2016-09-12T20:07", ["Di. 13.09"]], ["Time[]{2017-02-14 X:X (X/X)}", "2017-02-13T15:54", ["Di. 14.02"]], [ "Interval[]{2017-09-26 X:X (X/X) - 2017-09-27 X:X (X/X)}", "2017-08-31T16:34", ["Di., 26.09.-27.09., 1 Nacht"], ], [ "Interval[]{2018-02-23 X:X (X/X) - 2018-02-24 X:X (X/X)}", "2018-02-14T16:04", ["Fr.-Sa., 23.02.-24.02., 1 Nacht"], ], ["Time[]{2016-12-03 X:X (X/X)}", "2016-11-30T13:23", ["Samstag 3.12"]], ["Time[]{2016-10-14 X:X (X/X)}", "2016-10-09T08:56", ["Friday 14"]], ["Time[]{2016-10-11 X:X (X/X)}", "2016-10-04T10:52", ["Tuesday 11"]], ["Time[]{2017-07-18 X:X (X/X)}", "2017-07-06T12:42", ["Dienstag 18.7."]], ["Time[]{2016-06-28 X:X (X/X)}", "2016-06-13T08:26", ["Dienstag 28.6."]], ["Time[]{2017-06-15 X:X (X/X)}", "2017-06-07T11:25", ["Donnerstag 15.6."]], ["Time[]{2017-07-20 X:X (X/X)}", "2017-07-12T20:49", ["Donnerstag 20.7."]], ["Time[]{2017-08-17 16:15 (X/X)}", "2017-08-10T09:11", ["Donnerstag 17.8. 16:15"]], ["Time[]{2018-01-23 X:X (X/evening)}", "2018-01-23T10:48", ["Abends 23.01"]], [ "Time[]{2018-04-03 X:X (X/X)}", "2018-03-29T10:31", ["Dienstag 03.04", "Dienstag 03.04"], ], [ "Time[]{2017-06-20 X:X (X/X)}", "2017-06-19T07:04", ["Dienstag 20.6", "Dienstag 20.6", "am Dienstag 20.6"], ], ["Time[]{2017-03-02 X:X (X/X)}", "2017-02-13T11:00", ["Donnerstag 02.03"]], ["Time[]{2017-12-07 X:X (X/X)}", "2017-11-27T10:53", ["Donnerstag 07.12"]], ["Time[]{2017-08-02 X:X (X/X)}", "2017-07-10T07:29", ["Mittwoch 02.08"]], ["Time[]{2017-06-07 X:X (X/X)}", "2017-06-04T20:23", ["Mittwoch 07.06"]], ["Time[]{2017-12-13 X:X (X/X)}", "2017-12-07T13:33", ["Mittwoch 13.12"]], [ "Time[]{2017-08-23 X:X (X/X)}", "2017-08-16T13:00", ["Mittwoch 23.08", "Dienstag 23.08", "am Mittwoch 23.08"], ], ["Time[]{2017-10-25 X:X (X/X)}", "2017-10-10T12:06", ["Mittwoch 25.10"]], ["Time[]{2017-09-11 X:X (X/X)}", "2017-09-08T20:54", ["Monday 11.09"]], ["Time[]{2017-06-19 X:X (X/X)}", "2017-05-24T08:15", ["Monday 19.06"]], ["Time[]{2018-03-15 X:X (X/X)}", "2018-01-23T11:31", ["Donnerstag 15.03."]], ["Time[]{2018-04-04 X:X (X/X)}", "2018-03-27T08:41", ["Mittwoch 4.4."]], [ "Time[]{2016-09-23 X:X (X/X)}", "2016-09-20T08:45", ["Freitag, 23. September 2016"], ], ["Time[]{2017-07-25 X:X (X/X)}", "2017-05-30T09:59", ["Dienstag 25.07"]], ["Time[]{2017-08-17 X:X (X/X)}", "2017-08-09T08:02", ["Donnerstag 17.08"]], [ "Interval[]{2017-10-05 21:45 (X/X) - 2017-10-05 22:55 (X/X)}", "2017-09-28T07:55", ["Donnerstag, den 5.10.2017 09:45 - 10:55 Uhr"], ], ["Time[]{2018-01-07 X:X (X/X)}", "2017-12-19T09:24", ["7. Januar 2018"]], ["Time[]{2017-10-26 X:X (X/X)}", "2017-10-17T18:14", ["26 Oct 2017"]], ["Time[]{2018-05-24 14:55 (X/X)}", "2018-04-10T08:46", ["24 of May at 14:55"]], ["Time[]{2018-04-25 12:00 (X/X)}", "2018-04-05T09:18", ["25 of April at 12:00"]], ["Time[]{2017-05-22 X:X (X/X)}", "2017-05-04T16:28", ["22. Mai 2017"]], ["Time[]{2016-07-15 X:X (X/X)}", "2016-06-20T10:03", ["15. Juli 16"]], ["Time[]{2018-06-14 X:X (X/X)}", "2018-03-08T11:34", ["14. Juni 2018"]], ["Time[]{2018-02-14 X:X (X/X)}", "2017-12-19T09:24", ["14. Februar 2018"]], ["Time[]{2018-03-14 X:X (X/X)}", "2018-03-12T16:48", ["14. 03."]], [ "Interval[]{2018-04-10 X:X (X/X) - 2018-04-11 X:X (X/X)}", "2018-04-05T10:08", ["10.04. - 11.04., 1 Nacht"], ], ["Time[]{2018-01-18 15:30 (X/X)}", "2018-01-18T13:11", ["18.01. 15:30 Uhr"]], [ "Interval[]{2017-10-06 X:X (X/X) - 2017-10-07 X:X (X/X)}", "2017-09-22T12:53", ["06.10.-07.10., 1 Nacht"], ], [ "Interval[]{2017-12-06 X:X (X/X) - 2017-12-07 X:X (X/X)}", "2017-11-24T14:27", ["06.12.2017 to 07.12.2017 (1 night"], ], [ "Interval[]{2018-03-09 21:00 (X/X) - 2018-03-09 22:00 (X/X)}", "2018-02-20T09:37", ["09.03.2018 ca. 9-10 Uhr"], ], [ "Interval[]{2017-07-06 14:00 (X/X) - 2017-07-06 15:00 (X/X)}", "2017-06-21T12:02", ["06.07.2017 ca. 14-15 Uhr"], ], ["Time[]{2017-09-15 14:35 (X/X)}", "2017-08-11T13:10", ["02:35 Friday 15 Sep 2017"]], ["Time[]{2017-09-15 19:20 (X/X)}", "2017-08-11T13:10", ["07:20 Friday 15 Sep 2017"]], [ "Time[]{2016-11-11 22:00 (X/X)}", "2016-11-09T13:16", ["10:00 Fri 11 Nov 2016"], ], [ "Time[]{2018-05-09 16:00 (X/X)}", "2018-03-26T11:11", ["04:00 Wednesday 9 May 2018"], ], [ "Time[]{2018-05-09 20:40 (X/X)}", "2018-03-26T11:11", ["08:40 Wednesday 9 May 2018"], ], [ "Time[]{2018-03-01 20:30 (X/X)}", "2018-02-19T15:04", ["08:30 Thursday 1 March 2018"], ], [ "Time[]{2018-05-12 17:00 (X/X)}", "2018-03-26T11:11", ["05:00 Saturday 12 May 2018"], ], [ "Time[]{2018-05-12 19:45 (X/X)}", "2018-03-26T11:11", ["07:45 Saturday 12 May 2018"], ], [ "Time[]{2018-05-12 22:25 (X/X)}", "2018-03-26T11:11", ["10:25 Saturday 12 May 2018"], ], [ "Time[]{X-X-X 22:00 (X/X)}", "2022-12-08T11:11", ["at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10", "at 10"], ], [ "Time[]{X-X-X 16:00 (X/X)}", "2022-12-08T11:11", ["at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", "at 4", ], ], [ "Time[]{2018-05-17 23:40 (X/X)}", "2018-03-26T11:11", ["11:40 Thursday 17 May 2018"], ], [ "Time[]{2017-01-12 20:45 (X/X)}", "2017-01-03T07:56", ["20:45 Donnerstag 12 Januar"], ], [ "Time[]{2018-02-27 00:15 (X/X)}", "2018-02-19T15:04", ["00:15 Tuesday 27 February 2018"], ], [ "Time[]{2017-11-24 23:05 (X/X)}", "2017-11-14T08:41", ["11:05 Friday 24 November 2017"], ], ["Time[]{2017-11-07 X:X (X/X)}", "2017-11-06T08:59", ["7th November 2017"]], ["Time[]{2018-03-31 X:X (X/X)}", "2018-03-11T21:48", ["am Freitag 31.3."]], ["Time[]{2017-12-12 X:X (X/X)}", "2017-12-06T12:11", ["am Dienstag 12.12"]], ["Time[]{2018-03-16 X:X (X/X)}", "2018-02-19T08:56", ["am Freitag 16.03"]], ["Time[]{2017-05-17 X:X (X/X)}", "2017-05-12T11:37", ["am Mittwoch 17.05"]], ["Time[]{2016-09-14 X:X (X/X)}", "2016-09-02T05:48", ["am Mittwoch 14.09."]], ["Time[]{2017-06-05 X:X (X/X)}", "2017-05-27T08:01", ["am Montag 05.06."]], ["Time[]{2018-03-23 X:X (X/X)}", "2018-03-14T10:42", ["on Friday 23/03"]], ["Time[]{2018-01-22 X:X (X/X)}", "2018-01-15T13:05", ["on Monday 22nd January"]], ["Time[]{2016-03-31 X:X (X/X)}", "2016-03-09T15:20", ["am Donnerstag 31.03."]], [ "Time[]{2017-09-14 19:05 (X/X)}", "2017-09-11T05:57", ["am Donnerstag, 14.09.17 07:05"], ], ["Time[]{2017-05-18 X:X (X/X)}", "2017-04-22T19:02", ["am Donnerstag den 18.05"]], ["Time[]{2016-03-17 X:X (X/X)}", "2016-03-11T09:15", ["am 17. M\u00e4rz 2016"]], [ "Interval[]{2016-03-16 16:45 (X/X) - None}", "2016-02-25T12:48", ["am 16.3.16 fr\u00fchestens 16:45 Uhr"], ], ["Time[]{2017-09-21 X:X (X/X)}", "2017-09-12T10:23", ["am 21.09"]], [ "Time[]{2017-03-07 12:00 (X/X)}", "2017-02-08T08:08", ["am 07.03.17 Mittag 12 Uhr"], ], # [ # "Time[]{2017-12-06 X:X (X/lateafternoon)}", # "2017-11-23T07:22", # ["06.12.2017 Sp\u00e4tnachmittag"], # ], [ "Interval[]{2017-06-12 18:00 (X/X) - 2017-06-12 19:05 (X/X)}", "2017-06-08T11:07", ["am 12.06.2017 18:00 - 19:05"], ], [ "Time[]{2016-11-09 X:X (X/lateevening)}", "2016-11-07T08:10", ["am 09.11.2016 sp\u00e4t Abends"], ], [ "Interval[]{2018-03-09 17:00 (X/X) - None}", "2018-02-15T14:47", ["am 09.03.2018 fr\u00fchstens 17 Uhr"], ], [ "Time[]{2017-09-14 X:X (X/earlymorning)}", "2017-09-05T10:10", ["am 14.09.2017 fr\u00fch morgens"], ], [ "Interval[]{2017-05-16 X:X (X/X) - 2017-05-18 X:X (X/X)}", "2017-05-12T11:16", ["von Dienstag 16.05 bis Donnerstag 18.05"], ], [ "Interval[]{2018-02-05 X:X (X/X) - 2018-02-08 X:X (X/X)}", "2018-02-03T09:20", ["von Montag 05.02 bis Donnerstag 08.02"], ], [ "Interval[]{2018-02-24 X:X (X/X) - 2018-02-26 X:X (X/X)}", "2018-02-07T16:28", ["from 24.02.2018 to 26.02.2018"], ], ["Time[]{2017-06-23 X:X (X/X)}", "2017-06-22T07:20", ["morgen 23.06"]], [ "Interval[]{2018-03-15 X:X (X/X) - 2018-03-16 X:X (X/X)}", "2018-03-05T12:51", ["15.3-16.3"], ], [ "Interval[]{2017-11-28 13:13 (X/X) - 2017-11-28 13:44 (X/X)}", "2017-11-27T15:14", ["morgen, 28.11.2017 um 13:13 - 13:44 Uhr"], ], ["Time[]{1993-07-02 X:X (X/X)}", "2017-11-27T15:14", ["2 jul 93"]], ["Time[]{2022-07-02 X:X (X/X)}", "2017-11-27T15:14", ["2 jul 22"]], # [ # "Interval[]{2018-06-07 X:X (X/evening) - 2018-06-07 X:X (X/night)}", # "2018-05-08T16:32", # ["at 7.6 evening/night"], # ], ] ================================================ FILE: ctparse/time/corpus.py ================================================ corpus = [ # ruleYear ("Time[]{2019-X-X X:X (X/X)}", "2018-03-07T12:43", ["2019"]), # ruleToday ( "Time[]{2018-03-07 X:X (X/X)}", "2018-03-07T12:43", ["heute", "zu dieser zeit", "today"], ), # ruleNow ( "Time[]{2018-03-07 12:43 (X/X)}", "2018-03-07T12:43", ["jetzt", "genau jetzt", "gerade eben", "rightnow", "just now"], ), # ruleTomorrow ("Time[]{2019-01-01 X:X (X/X)}", "2018-12-31T12:43", ["morgen", "tomorrow", "tom", "tmrw"]), # ruleAfterTomorrow ("Time[]{2019-01-02 X:X (X/X)}", "2018-12-31T12:43", ["übermorgen"]), # ruleTomorrow + time ( "Time[]{2019-01-01 19:25 (X/X)}", "2018-12-31T12:43", ["morgen 19:25", "tomorrow 7:25 pm"], ), # ruleYesterday # test on a leap-year ("Time[]{2020-02-29 X:X (X/X)}", "2020-03-01T12:43", ["gestern", "yesterday"]), # ruleBeforeYesterday # test on a leap-year ("Time[]{2020-02-28 X:X (X/X)}", "2020-03-01T12:43", ["vorgestern"]), # ruleEOM ( "Time[]{2018-03-31 X:X (X/X)}", "2018-03-07T12:43", ["ende des Monats", "eom", "end of the month"], ), # ruleEOY ( "Time[]{2018-12-31 X:X (X/X)}", "2018-03-07T12:43", ["ende des Jahres", "eoy", "end of the year"], ), # ruleNamedDOW ("Time[]{2018-03-12 X:X (X/X)}", "2018-03-07T12:43", ["Montag", "mon", "monday"]), ( "Time[]{2018-03-13 X:X (X/X)}", "2018-03-07T12:43", ["Dienstag", "tuesday", "tue"], ), # ruleNamedDOW + POD # ("Time[]{2018-03-12 X:X (X/morning)}", "2018-03-07T12:43", ["Montagmorgen"]), # ("Time[]{2018-03-14 X:X (X/forenoon)}", "2018-03-07T12:43", ["Mittwochvormittag"]), # ("Time[]{2018-03-10 X:X (X/morning)}", "2018-03-07T12:43", ["Samstagfrüh"]), # ( # "Time[]{2018-03-11 X:X (X/night)}", # "2018-03-07T12:43", # ["sunday night", "Sonntagnacht"], # ), # ruleNamedMonth ("Time[]{2023-01-01 X:X (X/X)}", "2022-11-28T12:43", ["1st January", "1st jan."]), ("Time[]{2023-04-15 X:X (X/X)}", "2022-11-28T12:43", ["15 April", "15 apr."]), ("Time[]{X-07-X X:X (X/X)}", "2022-11-28T12:43", ["Juli", "July", "Jul"]), ( "Time[]{2022-12-24 X:X (X/X)}", "2022-11-28T12:43", ["24 Dezember", "December 24", "24 Dec.", "24 Dez."], ), # ruleAtDOW ("Time[]{2018-03-13 X:X (X/X)}", "2018-03-07T12:43", ["am Dienstag", "on Tue"]), ( "Time[]{2018-03-14 X:X (X/X)}", "2018-03-07T12:43", ["this Wednesday", "diesen Mittwoch"], ), # ruleNextDOW ( "Time[]{2018-03-16 X:X (X/X)}", "2018-03-07T12:43", [ "am nächsten Freitag", "next Friday", "nächste Woche Freitag", "Friday next week", "on the following Friday", ], ), # ruleDOYYear, ruleDDMM, ruleDDMMYYYY ( "Time[]{2018-05-08 X:X (X/X)}", "2018-03-07T12:43", [ "8.5.2018", "8. Mai 2018", "8. Mai 18", "8 May 2018", "8 May", "May 8", "8/5", "8.5.", "am 8. Mai 2018", "diesen 8. Mai 18", "den 8.5.", "8th May", "8th of May", "May 8th", "at 8th May", "on 8th of May", "this May 8th", "may 8", ], ), ( "Time[]{2022-12-24 X:X (X/X)}", "2022-11-29T12:43", [ "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "12/24", "24/12", "24/12", "24/12", ], ), # ruleDOWDOM ( "Time[]{2022-11-29 X:X (X/X)}", "2022-11-28T12:43", ["Tuesday 29th", "Tuesday the 29th", "Dienstag der 29."], ), ( "Time[]{2018-06-02 X:X (X/X)}", "2018-03-07T12:43", ["Saturday 2nd", "Jun 2nd", "am 2ten Juni"], ), # ruleDOWDate, ruleDateDOW ( "Time[]{2018-05-08 X:X (X/X)}", "2018-03-07T12:43", ["Tuesday 8.5", "8.5 Tuesday"], ), # ( # "Time[]{2018-05-08 X:X (X/morning)}", # "2018-03-07T12:43", # ["Dienstagmorgen 8.5.", "8.5. Dienstagmorgen"], # ), # rulePOD, ruleLatentPOD # ( # "Time[]{2018-03-08 X:X (X/morning)}", # "2018-03-07T12:43", # ["morgens", "früh", "in der früh", "early", "morning"], # ), # ( # "Time[]{2018-03-08 X:X (X/earlymorning)}", # "2018-03-07T12:43", # ["früh morgens", "sehr früh", "early morning"], # ), # ( # "Time[]{2018-03-08 X:X (X/forenoon)}", # "2018-03-07T12:43", # ["vormittags", "forenoon"], # ), # before noon case # ( # "Interval[]{None - 2018-03-08 X:X (X/noon)}", # "2018-03-07T12:43", # ["vor mittags", "before noon"], # ), # ( # "Time[]{2018-03-08 X:X (X/afternoon)}", # "2018-03-07T12:43", # ["nachmittag", "afternoon"], # ), # # past noon case # ( # "Interval[]{2018-03-08 X:X (X/noon) - None}", # "2018-03-07T12:43", # ["nach mittag", "after noon"], # ), # ("Time[]{2018-03-08 X:X (X/noon)}", "2018-03-07T12:43", ["mittags", "noon"]), # ( # "Time[]{2018-03-07 X:X (X/evening)}", # "2018-03-07T12:43", # ["abends", "late", "spät"], # ), # ( # "Time[]{2018-03-07 X:X (X/lateevening)}", # "2018-03-07T12:43", # ["später abend", "very late", "late evening"], # ), # ( # "Time[]{2018-03-08 X:X (X/veryearlyafternoon)}", # "2018-03-07T12:43", # ["sehr früher nachmittag", "very early afternoon"], # ), # ( # "Time[]{2018-03-07 X:X (X/night)}", # "2018-03-07T12:43", # ["heute nacht", "this night", "nachts"], # ), # # First/Last # ( # "Time[]{2018-03-08 X:X (X/first)}", # "2018-03-07T12:43", # [ # "tomorrow first", # "morgen erster", # "morgen so früh wie möglich", # "tomorrow earliest possible", # ], # ), # ( # "Time[]{2018-03-08 X:X (X/last)}", # "2018-03-07T12:43", # [ # "tomorrow last", # "morgen letzter", # "tomorrow as late as possible", # "morgen spätest möglicher", # ], # ), # ( # "Time[]{2018-03-09 X:X (X/first)}", # "2018-03-07T12:43", # ["Friday first", "Freitag erster"], # ), # ( # "Time[]{2018-03-13 X:X (X/last)}", # "2018-03-07T12:43", # ["Tuesday last", "Dienstag letzter"], # ), # # Date + POD # ( # "Time[]{2017-01-25 X:X (X/evening)}", # "2018-03-07T12:43", # [ # "25.01.2017 abends", # "evening of January 25th 2017", # "25.01.2017 late", # "25.01.2017 spät", # "25.01.2017 (spät)", # ], # ), # ( # "Time[]{2017-01-25 X:X (X/lateafternoon)}", # "2018-03-07T12:43", # [ # "25.01.2017 spät nachmittags", # "am 25. Januar 2017 am späten Nachmittag", # "am 25. Januar 2017 am späten Nachmittag", # "am 25. Januar 2017 am späten Nachmittag", # "late afternoon of January 25th 2017", # ], # ), # ( # "Time[]{2020-01-25 X:X (X/evening)}", # "2018-03-07T12:43", # [ # "25.01.2020 abends", # "25.01.2020 late", # "25.01.2020 spät", # "25. Januar 2020 abends", # "abends 25.01.2020", # "evening of January 25th 2020", # ], # ), # ( # "Time[]{2018-03-25 X:X (X/evening)}", # "2018-03-07T12:43", # ["evening of the 25th", "am 25. abends", "abends am 25."], # ), # # ruleTODPOD # ( # "Time[]{X-X-X 16:30 (X/X)}", # "2018-03-07T12:43", # ["um 4:30 nachmittags", "at 4:30 in the afternoon"], # ), # rulePODTOD # ( # "Time[]{X-X-X 20:00 (X/X)}", # next day since moning is already over # "2018-03-07T12:43", # ["morgens um 8", "late morning at 8"], # ), ( "Time[]{X-X-X 16:30 (X/X)}", "2018-03-07T12:43", ["nachmittags um 16:30", "afternoon at 16:30", "16:30"], ), # ruleDateTOD ( "Time[]{2018-08-05 20:00 (X/X)}", "2018-03-07T12:43", [ "5. August um 8", "August 5th at 8", # "august 5 at 8am", "5. Aug gegen 8", "05.08.2018 8Uhr", "05.08.2018 8pm", "august 5th 8" ], ), # ruleTODDate ( "Time[]{2018-08-05 20:00 (X/X)}", "2018-03-07T12:43", ["um 8 5. August", "at 8 on August 5th"], ), # ruleDateDate, ruleDOMDate, ruleDateDOM ( "Interval[]{2018-08-05 X:X (X/X) - 2018-08-16 X:X (X/X)}", "2018-03-07T12:43", [ "5.8. - 16.8.", "August 5th - August 16th", "Aug 5 - 16", "from Aug 5 to 16", "5 to 16 Aug", "from 5 to 16 Aug", "5. - 16.8.", "5.8. - 16.8.2018", "5.8. bis 16.8.2018", "5.8. - 16.8.", "5.8. bis 16.8.", "5. - 16.8.", "5.8. - 16.8.2018", "5.8. bis 16.8.2018", "5.8. - 16.8.", "5.8. bis 16.8.", "5. bis zum 16.8.", "vom 05.08.2018 zum 16.08.2018", ], ), # ruleDOYDate ( "Interval[]{2017-08-05 X:X (X/X) - 2017-08-16 X:X (X/X)}", "2018-03-07T12:43", ["5.8. - 16.8.2017", "Samstag 5.8. - Mittwoch 16.8.2017"], ), # ruleDateTimeDateTime ( "Interval[]{2018-08-05 08:00 (X/X) - 2018-08-16 13:00 (X/X)}", "2018-03-07T12:43", ["5.8. 8am - 16.8. 13Uhr", "August 5th 8am - August 16th 13h"], ), ( "Interval[]{X-X-X 08:00 (X/X) - X-X-X 13:00 (X/X)}", "2018-03-07T12:43", ["8am - 13:00", "8am - 13Uhr", "8am to 13h", "8am-13"], ), # increasing coverage for int-int hours ( "Interval[]{X-X-X 10:00 (X/X) - X-X-X 12:00 (X/X)}", "2018-03-07T12:43", ["10am - 12:00", "10am - 12Uhr", "10am to 12h", "10-12am", "10-12", "10-12", "10-12", "10-12", "10-12", "10-12", "10-12", "10-12", "10-12", "10-12", "10-12", "10-12",], ), ( "Interval[]{X-X-X 15:00 (X/X) - X-X-X 16:00 (X/X)}", "2018-03-07T12:43", ["03:00 - 04:00", "3Uhr - 4Uhr", "3h to 4h", "3-4"], ), # rulePODPOD # ( # "Interval[]{X-X-X X:X (X/evening) - X-X-X X:X (X/night)}", # "2018-05-08T10:32", # ["evening/night"], # ), # ruleAfterTime ( "Interval[]{2017-11-26 20:00 (X/X) - None}", "2018-03-07T12:43", ["26.11.2017 ab 08:00 Uhr"], ), ( "Interval[]{2018-11-26 20:00 (X/X) - None}", "2018-03-07T12:43", [ "26.11.2018 ab 08:00 Uhr", "26.11. ab 08:00 Uhr", "26.11. frühestens um 08:00 Uhr", "November 26th earliest 08:00 Uhr", "November 26th earliest after 08:00 Uhr", "November 26th from earliest 08:00 Uhr", "26.11. nicht vor 08:00 Uhr", ], ), # ruleBeforeTime ( "Interval[]{None - 2017-11-26 20:00 (X/X)}", "2018-03-07T12:43", [ "26.11.2017 vor 08:00 Uhr", "26.11.2017 bis spätestens 08:00 Uhr", "26.11.2017 spätestens bis 08:00 Uhr", ], ), ( "Interval[]{None - 2018-11-26 20:00 (X/X)}", "2018-03-07T12:43", ["26.11.2018 vor 08:00 Uhr", "26.11. vor 08:00 Uhr", "26.11. not after 08:00"], ), # ruleHHMM ( "Time[]{X-X-X 20:00 (X/X)}", "2018-03-07T00:00", ["8h", "8 Uhr", "8:00", "8h00", "8"], ), ( "Time[]{X-X-X 20:00 (X/X)}", "2018-03-07T00:00", ["20h", "20 Uhr", "20:00", "20pm", "20"], ), # <-- ignore am, since this makes no sense # ruleMonthDOM ( "Time[]{2018-04-07 X:X (X/X)}", "2018-03-07T00:00", ["april 7", "april 7th", "7. April"], ), # ruleAbsorbOnTime ( "Time[]{X-X-X 20:00 (X/X)}", "2018-03-07T00:00", ["at 8pm", "um 20h", "gegen 20:00", "about 8pm", "at around 8pm"], ), # ruleAbsorbOnTime + X ( "Time[]{2018-06-21 08:00 (X/X)}", "2018-03-07T00:00", [ "Jun 21 at 8am", "Jun 21 8am", "Jun 21 at 8am", "Jun 21 on 8am", "21. Juni um 8am", ], ), # ruleDateInterval ( "Interval[]{2018-11-13 13:30 (X/X) - 2018-11-13 15:35 (X/X)}", "2018-03-07T00:00", [ "Mon, Nov 13 1:30 PM - 3:35 PM", "Montag, 13. November von 13:30 bis 15:35", "Nov 13 13:30 - 15:35", ], ), ( "Interval[]{2018-11-13 13:30 (X/X) - None}", "2018-03-07T00:00", [ "Mon, Nov 13 after 1:30 PM", "Montag, 13. November nach 13:30", "Montag, 13. November 2018 nach 13:30", "13.11. ab 13:30", ], ), ( "Interval[]{2016-11-13 13:30 (X/X) - None}", "2018-03-07T00:00", [ "Mon, Nov 13 2016 after 1:30 PM", "Montag, 13. November 2016 nach 13:30", "Montag, 13. November 2016 nach 13:30", "13.11.16 ab 13:30", ], ), ( "Interval[]{2018-03-11 X:X (X/noon) - None}", "2018-03-07T00:00", ["Sunday after noon", "Sonntag ab Mittag", "Sonntag, 11. März 2018 ab Mittag"], ), # ( # "Interval[]{2018-03-11 21:00 (X/X) - None}", # "2018-03-07T00:00", # [ # "Sunday Mar 11 after 9", # "Sonntag, 11. März 2018 nach 9", # "Sonntag, der 11. Mrz. nach 9", # ], # ), # ( # "Interval[]{2016-03-11 21:00 (X/X) - None}", # "2018-03-07T00:00", # [ # "Sunday Mar 11 2016 after 9", # "Sonntag, 11. März 2016 nach 9", # "Sonntag, der 11. Mrz 2016 nach 9", # ], # ), # ruleDateInterval - day wrap ( "Interval[]{2018-11-13 23:30 (X/X) - 2018-11-14 03:35 (X/X)}", "2018-03-07T00:00", ["Mon, Nov 13 11:30 PM - 3:35 AM", "Nov 13 23:30 - 3:35am"], ), ( "Interval[]{2018-02-20 21:00 (X/X) - 2018-02-21 04:00 (X/X)}", "2018-02-20T09:37", ["today 9pm - 4am"], ), # ruleAbsorbDOWComma -- deleted, comma should be removed by caller ( "Time[]{2018-07-27 X:X (X/X)}", "2018-07-26T00:00", ["Freitag, dem 27.", "Fri, the 27th", "fri 27"], ), # ruleNamedHour ("Time[]{X-X-X 09:00 (X/X)}", "2018-07-26T00:00", ["neun", "nine"]), # ruleQuarterBeforeHH # ( # "Time[]{2018-07-26 19:45 (X/X)}", # "2018-07-26T00:00", # ["viertel vor acht", "viertel vor 8", "quarter to eight"], # ), # ruleQuarterBeforeHH midnight wrap ("Time[]{X-X-X 23:45 (X/X)}", "2018-07-26T00:00", ["viertel vor 0"]), # ruleQuarterAfterHH # ( # "Time[]{2018-07-26 08:15 (X/X)}", # "2018-07-26T00:00", # ["viertel nach acht", "viertel nach 8", "quarter past eight"], # ), # ruleHalfBeforeHH # ( # "Time[]{2018-07-26 07:30 (X/X)}", # "2018-07-26T00:00", # ["half eight"], # ), # ruleHalfBeforeHH not when minutes are present ("Time[]{X-X-X 19:35 (X/X)}", "2018-07-26T00:00", ["halb 7:35"]), # ruleHalfBeforeHH midnight wrap ("Time[]{X-X-X 23:30 (X/X)}", "2018-07-26T00:00", ["halb mitternacht"]), # ruleHalfAfterHH ( "Time[]{X-X-X 08:30 (X/X)}", "2018-07-26T00:00", ["halb nach acht", "halfe past eight"], ), # ruleHalfAfterHH not when minutes are present ("Time[]{X-X-X 20:32 (X/X)}", "2018-07-26T00:00", ["halb nach 8:32"]), # rulePODInterval # ( # "Interval[]{None - 2018-09-17 22:00 (X/X)}", # "2018-07-26T00:00", # ["am 17.9. abends vor 10", "at Sep 17th in the evening before 10"], # ), # ( # "Interval[]{X-X-X 22:00 (X/X) - None}", # "2018-07-26T00:00", # ["abends nach 10", "in the evening after 10", "in the evening after 22h"], # ), # ( # "Interval[]{X-X-X 20:00 (X/X) - X-X-X 21:00 (X/X)}", # "2018-07-26T00:00", # ["in the evening between 8 and 9", "Jul 26th between 20 and 21"], # ), # ( # "Interval[]{X-X-X 08:00 (X/X) - X-X-X 09:00 (X/X)}", # "2018-07-26T00:00", # ["in the morning between 8 and 9", "Jul 26th between 8 and 9"], # ), # rule # # ----------------------------------------------------------------------------- # OLD CORPUS # ----------------------------------------------------------------------------- # ( "Interval[]{2017-12-19 21:30 (X/X) - 2017-12-19 22:45 (X/X)}", "2017-12-18T12:34", [ "tomorrow 09:30 - 10:45", "tomorrow 0930 - 1045", "19. Dezember von 09:30 bis 10:45", "19th of December from 09:30 til 10:45", "19.12. 09:30 - 10:45", "19.12.17 09:30 - 10:45", "19.12.2017 09:30 - 19.12.2017 10:45", "19.12.2017 09:30 - 10:45", "19 dec 0930-1045", "Dec 19th 9:30pm to 10:45pm", ], ), ( "Interval[]{2018-02-16 X:X (X/X) - 2018-02-21 X:X (X/X)}", "2017-12-18T12:34", ["16.02.2018 - 21.02.2018", "16. bis 21.02.2018"], ), ( "Interval[]{2018-08-07 X:X (X/X) - 2018-08-10 X:X (X/X)}", "2017-12-18T12:34", ["07.-10.08.2018"], ), # ('Range[]{2018-12-09 - 2018-12-13}', # '2017-12-18T12:34', # [ # '09.-13.12.2018 von Samstag bis Time[]{2017-05-11 X:X (X/X)}' # ]), # ('Range[]{2018-04-27 - 2018-04-30}', # '2017-12-18T12:34', # [ # # 'from the 27th to the 30th of April 2018', # '27.-30.04.2018 von Freitag bis Montag' # ]), ( "Time[]{2018-01-13 X:X (X/X)}", "2017-12-18T12:34", ["am 13.1.", "am 13.01.", "am 13. Januar", "13.01", "13.1", "13th Jan"], ), ( "Time[]{2017-12-19 X:X (X/X)}", "2017-12-18T12:34", [ "am Dienstag", "am 19.12", "Dienstag 19.12", "Tuesday 19th of December", "Tuesday December 19th", "Dienstag 19. Dezember", "Dienstag Dezember 19.", "Dienstag", ], ), ( "Time[]{2018-03-01 14:30 (X/X)}", "2017-12-18T12:34", [ # mm/dd does not work yet # '03/01/2018 at 2:30 pm', "am 01.03.2018 um 14:30", "Mar 1st 2:30 pm", "1. März um 1430 Uhr", "01.03.2018 14:30", ], ), ( "Time[]{2018-01-03 14:30 (X/X)}", "2017-12-18T12:34", [ # mm/dd does not work yet # '01/03/2018 at 2:30 pm', "am 03.01.2018 um 14:30", "Jan. 3rd 2:30 pm", "3. Januar 1430 Uhr", "03.01.2018 14:30", "3 Jan 2018 14:30", ], ), ("Time[]{2018-04-23 23:00 (X/X)}", "2017-12-18T12:34", ["23.04.2018 11:00"]), ("Time[]{2018-11-19 18:00 (X/X)}", "2017-12-18T12:34", ["19.11.2018 18:00"]), # ( # "Time[]{2017-12-20 X:X (X/morning)}", # "2017-12-18T12:34", # ["Wednesday, 20th December morning", "december 20 morning"], # ), # ( # "Time[]{2018-12-06 X:X (X/morning)}", # "2018-03-07T12:43", # [ # "6. dezember morgens", # "6. dezember früh", # "6. dezember in der früh", # "december 6 early", # "december 6th morning", # ], # ), # ( # "Time[]{2018-12-06 X:X (X/earlymorning)}", # "2018-03-07T12:43", # ["6. dezember früh morgens", "december 6 early morning"], # ), # ( # "Time[]{2018-12-06 X:X (X/forenoon)}", # "2018-03-07T12:43", # ["6. Dezember vormittags", "december 6th forenoon"], # ), # ( # "Time[]{2018-12-06 X:X (X/afternoon)}", # "2018-03-07T12:43", # ["6. Dezember nachmittag", "december 6 afternoon"], # ), # ( # "Time[]{2018-12-06 X:X (X/noon)}", # "2018-03-07T12:43", # ["6. Dezember mittags", "december 6 noon"], # ), # ( # "Time[]{2018-12-06 X:X (X/evening)}", # "2018-03-07T12:43", # ["6. Dezember abends", "december 6 late"], # ), # ( # "Time[]{2018-12-06 X:X (X/lateevening)}", # "2018-03-07T12:43", # ["6. Dezember später abend", "december 6 late evening"], # ), # ( # "Time[]{2018-12-06 X:X (X/veryearlyafternoon)}", # "2018-03-07T12:43", # ["6. Dezember sehr früher nachmittag", "december 6 very early afternoon"], # ), # ('DateTime[]{2017-12-20Tmorning}', # '2017-12-18T12:34', # ['Wednesday, morning, 20.12.17']), # ('DateTime[]{2017-12-20Tafternoon}', # '2017-12-18T12:34', # ['Wednesday, afternoon, 20.12.17']), # ('DateTime[]{2017-12-20 XX:XX (X/evening)}', # '2017-12-18T12:34', # ['Wednesday, evening, 20.12.17']), ("Time[]{2017-12-20 18:45 (X/X)}", "2017-12-18T12:34", ["6:45 Uhr 20.12.2017"]), ("Time[]{2018-08-04 15:00 (X/X)}", "2017-12-18T12:34", ["04.08.2018 15:00"]), ("Time[]{2018-09-01 13:00 (X/X)}", "2017-12-18T12:34", ["01.09.2018 01:00"]), ("Time[]{2018-11-29 22:00 (X/X)}", "2017-12-18T12:34", ["29.11.2018 22:00"]), ("Time[]{2018-02-27 19:00 (X/X)}", "2017-12-18T12:34", ["27.02.2018 07:00"]), ("Time[]{2018-05-09 21:30 (X/X)}", "2017-12-18T12:34", ["09.05.2018 09:30"]), ("Time[]{2018-01-17 14:30 (X/X)}", "2017-12-18T12:34", ["17.01.2018 14:30"]), ( "Interval[]{2018-06-21 11:00 (X/X) - 2018-06-21 13:00 (X/X)}", "2017-12-18T12:34", ["21.06.2018 11:00-13:00", "Jun 21st between 11am and 1pm"], ), ( "Interval[]{2018-07-09 20:00 (X/X) - 2018-07-13 22:00 (X/X)}", "2017-12-18T12:34", ["09.07.2018 08:00 - 13.07.2018 10:00"], ), # Military time tests ("Time[]{2020-02-03 X:X (X/X)}", "2020-02-25T12:34", ["3 Feb 2020"]), # Duration tests # ( # "Duration[]{1 nights}", # "2020-02-25T12:34", # ["one night", "ein nacht", "eine übernachtung"], # ), ("Duration[]{30 days}", "2020-02-25T12:34", ["in 30 days", "in 30 tage"],), ("Duration[]{7 weeks}", "2020-02-25T12:34", ["in 7 weeks", "in 7 wochen"],), ( "Duration[]{20 minutes}", "2020-02-25T12:34", ["in 20 minutes", "in twenty minutes", "in zwanzig Minuten"], ), ("Duration[]{1 months}", "2020-02-25T12:34", ["in 1 month", "in one month", "in ein Monat"]), ( "Duration[]{30 minutes}", "2020-02-25T12:34", ["in half an hour", "in half hour", "in 1/2 hour", "in 1/2h", "in 1/2 h", "in halbe Stunde"], ), # ruleTimeDuration # ( # "Interval[]{2020-02-27 X:X (X/X) - 2020-02-28 X:X (X/X)}", # "2020-02-25T12:34", # ["on the 27th for one day", "on the 27th for one night"], # ), # ( # "Interval[]{2020-02-25 15:00 (X/X) - 2020-02-25 16:00 (X/X)}", # "2020-02-25T12:34", # ["today 15:00 for one hour"], # ), # # ruleDurationInterval, ruleIntervalDuration # ( # "Interval[]{2020-11-15 X:X (X/X) - 2020-11-18 X:X (X/X)}", # "2020-02-25T12:34", # ["3 days 15-18 Nov", "15-18 Nov 3 Nächte", "15-18 Nov für 3 Nächte"], # ), ] ================================================ FILE: ctparse/time/postprocess_latent.py ================================================ """Those rules are applied as postprocessing steps after scoring has been already done. Needed for backwards compatibility.""" from ctparse.types import Artifact, Interval, Time from datetime import datetime from dateutil.relativedelta import relativedelta def apply_postprocessing_rules(ts: datetime, art: Artifact) -> Artifact: """Apply postprocessing rules to a resolution *art*. This is introduced for backwards compatibility reasons. Example: 8:00 pm, ts=2020.01.01 07:00 produces a resolution: X-X-X 20:00 after postprocessing this is anchored to the reference time: 2020-01-01 20:00 """ if isinstance(art, Time): if art.isTOD: return _latent_tod(ts, art) if isinstance(art, Interval): if art.isTimeInterval: return _latent_time_interval(ts, art) return art def _latent_tod(ts: datetime, tod: Time) -> Time: dm = ts + relativedelta(hour=tod.hour, minute=tod.minute or 0) if dm <= ts: dm += relativedelta(days=1) res = Time( year=dm.year, month=dm.month, day=dm.day, hour=dm.hour, minute=dm.minute, period=tod.period, ) res.mstart = tod.mstart res.mend = tod.mend return res def _latent_time_interval(ts: datetime, ti: Interval) -> Interval: assert ti.t_from and ti.t_to # guaranteed by the caller dm_from = ts + relativedelta(hour=ti.t_from.hour, minute=ti.t_from.minute or 0) dm_to = ts + relativedelta(hour=ti.t_to.hour, minute=ti.t_to.minute or 0) if dm_from <= ts: dm_from += relativedelta(days=1) dm_to += relativedelta(days=1) # pm-am interval overlap if ti.t_from.period == "pm" and ti.t_to.period == "am": dm_to += relativedelta(days=1) res = Interval( t_from=Time( year=dm_from.year, month=dm_from.month, day=dm_from.day, hour=dm_from.hour, minute=dm_from.minute, period=ti.t_from.period, ), t_to=Time( year=dm_to.year, month=dm_to.month, day=dm_to.day, hour=dm_to.hour, minute=dm_to.minute, period=ti.t_to.period, ), ) res.mstart = ti.mstart res.mend = ti.mend return res ================================================ FILE: ctparse/time/rules.py ================================================ from typing import Optional, Any, cast from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta from dateutil.rrule import rrule, MONTHLY from ..rule import rule, predicate, dimension, _regex_to_join from ..types import Time, Duration, Interval, pod_hours, RegexMatch, DurationUnit, Recurring, RecurringFrequency, \ RecurringArray # removed about, around, approx, ( the)? due to conflicts in regular sentences ("sync about their tech") @rule( r"at|on|am|um|gegen|den|dem|der|ca\.?|(in|of)", dimension(Time), ) def ruleAbsorbOnTime(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch, t: Time) -> Time: return t @rule(r"von|vom|zwischen|from|between", dimension(Interval)) def ruleAbsorbFromInterval(ts: datetime, pm_bias: bool, date_format: str, _: Any, i: Interval) -> Interval: return i _dows = [ ("mon", r"\bmontag\b|\bmonday\b|\bmon\.?\b"), ("tue", r"\bdie?nstag\b|\bdie\.?\b|\btuesday\b|\btue\.?\b"), ("wed", r"\bmittwoch\b|\bmi\.?\b|\bwednesday\b|\bwed\.?\b"), ("thu", r"\bdonn?erstag\b|\bthursday\b|\bthur?\.?\b"), ("fri", r"\bfreitag\b|\bfriday\b|\bfri\.?\b"), ("sat", r"\bsamstag\b|\bsonnabends?\b|\bsaturday\b|\bsat\.?\b"), ("sun", r"\bsonntag\b|\bso\.?\b|\bsunday\b|\bsun\.?\b"), ] _rule_dows = r"|".join(r"(?P<{}>{})".format(dow, expr) for dow, expr in _dows) _rule_dows = r"({})\s*".format(_rule_dows) @rule(_rule_dows) def ruleNamedDOW(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Time]: for i, (name, _) in enumerate(_dows): if m.match.group(name): return Time(DOW=i) return None _months = [ ("january", r"\bjanuary?\b|\bjan\.?\b"), ("february", r"\bfebruary?\b|\bfeb\.?\b"), ("march", r"\bmärz\b|\bmarch\b|\bmar\.?\b|\bmrz\.?\b|\bmär\.?\b"), ("april", r"\bapril\b|\bapr\.?\b"), ("may", r"\bmai\b|\bmay\.?\b"), ("june", r"\bjuni\b|\bjune\b|\bjun\.?\b"), ("july", r"\bjuli\b|\bjuly\b|\bjul\.?\b"), ("august", r"\baugust\b|\baug\.?\b"), ("september", r"\bseptember\b|\bsept?\.?\b"), ("october", r"\boktober\b|\boctober\b|\boct\.?\b|\bokt\.?\b"), ("november", r"\bnovember\b|\bnov\.?\b"), ("december", r"\bdecember\b|\bdezember\b|\bdez\.?\b|\bdec\.?\b"), ] _rule_months = "|".join(r"(?P<{}>{})".format(name, expr) for name, expr in _months) @rule(_rule_months) def ruleNamedMonth(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Time]: match = m.match for i, (name, _) in enumerate(_months): if match.group(name): return Time(month=i + 1) return None _named_ts = ( (1, r"\bone\b|\beins\b?"), (2, r"\btwo\b|\bzwei\b"), (3, r"\bthree\b|\bdrei\b"), (4, r"\bfour\b|\bvier\b"), (5, r"\bfive\b|\bfünf\b"), (6, r"\bsix\b|\bsechs\b"), (7, r"\bseven\b|\bsieben\b"), (8, r"\beight\b|\bacht\b"), (9, r"\bnine\b|\bneun\b"), (10, r"\bten\b|\bzehn\b"), (11, r"\beleven\b|\belf\b"), (12, r"\btwelve\b|\bzwölf\b"), ) _rule_named_ts = "|".join(r"(?P{})".format(n, expr) for n, expr in _named_ts) _rule_named_ts = r"({})\s*".format(_rule_named_ts) @rule(_rule_named_ts + r"(uhr|h|o\'?clock)?") def ruleNamedHour(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Time]: match = m.match for n, _, in _named_ts: if match.group("t_{}".format(n)): return Time(hour=n, minute=0) return None @rule("mitternacht|midnight") def ruleMidnight(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: return Time(hour=0, minute=0) def _pod_from_match(pod: str, m: RegexMatch) -> str: mod = "" if m.match.group("mod_early"): mod = "early" elif m.match.group("mod_late"): mod = "late" if m.match.group("mod_very"): mod = "very" + mod return mod + pod @rule( r"(?P(sehr|very)\s+)?" "((?Pfrüh(e(r|n|m))?|early)" "|(?P(spät(e(r|n|m))?|late)))", predicate("isPOD"), ) def ruleEarlyLatePOD(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch, p: Time) -> Time: return Time(POD=_pod_from_match(p.POD, m)) _pods = [ # ( # "first", # ( # r"(erster?|first|earliest|as early|frühe?st(ens?)?|so früh)" # "( (as )?possible| (wie )?möglich(er?)?)?" # ), # ), # ( # "last", # ( # r"(letzter?|last|latest|as late as possible|spätest möglich(er?)?|" # "so spät wie möglich(er?)?)" # ), # ), # ("earlymorning", r"very early|sehr früh"), # ("lateevening", r"very late|sehr spät"), ("morning", r"\bmorning\b|\bmorgend?s?\b"), ("forenoon", r"\bforenoon\b|\bvormittags?\b"), ("afternoon", r"\bafternoon\b|\bnachmittags?\b"), ("noon", r"\bnoon\b|\bmittags?\b"), ("evening", r"\bevening\b|\btonight\b|\babend?s?\b|\bspät\b"), ("night", r"\bnight\b|\bnachts?\b"), ] _rule_pods = "|".join("(?P<{}>{})".format(pod, expr) for pod, expr in _pods) @rule(_rule_pods) def rulePOD(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Time]: for _, (pod, _) in enumerate(_pods): if m.match.group(pod): return Time(POD=pod) return None @rule(r"(?(?&_day))\.?(?!\d)") def ruleDOM1(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: # Ordinal day "5." return Time(day=int(m.match.group("day"))) @rule(r"(?(?&_month))\.?(?!\d)") def ruleMonthOrdinal(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: # Ordinal day "5." return Time(month=int(m.match.group("month"))) @rule(r"(?(?&_day))\s*(?:st|nd|rd|th|s?ten|ter)") # a "[0-31]" followed by a th/st def ruleDOM2(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: return Time(day=int(m.match.group("day"))) @rule(r"(?(?&_year))(?!\d)") def ruleYear(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: # Since we may have two-digits years, we have to make a call # on how to handle which century does the time refers to. # We are using a strategy inspired by excel. Reference: # https://github.com/comtravo/ctparse/issues/56 # https://docs.microsoft.com/en-us/office/troubleshoot/excel/two-digit-year-numbers y = int(m.match.group("year")) SAME_CENTURY_THRESHOLD = 10 # Let the reference year be ccyy (e.g. 1983 => cc=19, yy=83) cc = ts.year // 100 yy = ts.year % 100 # Check if year is two digits if y < 100: # Then any two digit year between 0 and # yy+10 is interpreted to be within the # century cc (e.g. 83 maps to 1983, 93 to 1993), # anything above maps to the previous century (e.g. 94 maps to 1894). if y < yy + SAME_CENTURY_THRESHOLD: return Time(year=cc * 100 + y) else: return Time(year=(cc - 1) * 100 + y) else: return Time(year=y) @rule( r"heute|(um diese zeit|zu dieser zeit|um diesen zeitpunkt|zu diesem zeitpunkt)|" "todays?|(at this time)" ) def ruleToday(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: return Time(year=ts.year, month=ts.month, day=ts.day) @rule( r"(genau\s*)?jetzt|diesen moment|in diesem moment|gerade eben|" r"((just|right)\s*)?now|immediately" ) def ruleNow(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: return Time( year=ts.year, month=ts.month, day=ts.day, hour=ts.hour, minute=ts.minute ) @rule(r"(morgen){e<=1}|tmrw?|(tomm?or?rows?){e<=1}|tom") def ruleTomorrow(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: dm = ts + relativedelta(days=1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(r"übermorgen") def ruleAfterTomorrow(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: dm = ts + relativedelta(days=2) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(r"gestern|yesterdays?") def ruleYesterday(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: dm = ts + relativedelta(days=-1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(r"vor\s?gestern") def ruleBeforeYesterday(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: dm = ts + relativedelta(days=-2) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(r"(das )?ende (des|dieses) monats?|(the )?(\bEOM\b|end of (the )?month)") def ruleEOM(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: dm = ts + relativedelta(day=1, months=1, days=-1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule( r"(das )?(\bEOY\b|jahr(es)? ?ende|ende (des )?jahr(es)?)|" r"(the )?(\bEOY\b|end of (the )?year)" ) def ruleEOY(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch) -> Time: dm = ts + relativedelta(day=1, month=1, years=1, days=-1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(predicate("isDOM"), predicate("isMonth")) def ruleDOMMonth(ts: datetime, pm_bias: bool, date_format: str, dom: Time, m: Time) -> Time: return Time(day=dom.day, month=m.month) @rule(predicate("isDOM"), r"of", predicate("isMonth")) def ruleDOMMonth2(ts: datetime, pm_bias: bool, date_format: str, dom: Time, _: RegexMatch, m: Time) -> Time: return Time(day=dom.day, month=m.month) @rule(predicate("isMonth"), predicate("isDOM")) def ruleMonthDOM(ts: datetime, pm_bias: bool, date_format: str, m: Time, dom: Time) -> Time: return Time(month=m.month, day=dom.day) @rule(r"am|diese(n|m)|at|on|this", predicate("isDOW")) def ruleAtDOW(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch, dow: Time) -> Time: dm = ts + relativedelta(weekday=dow.DOW) if dm.date() == ts.date(): dm += relativedelta(weeks=1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule( r"((am )?(dem |den )?((kommenden?|nächsten?)( Woche)?))|" "((on |at )?(the )?((next|following)( week)?))", predicate("isDOW"), ) def ruleNextDOW(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch, dow: Time) -> Time: dm = ts + relativedelta(weekday=dow.DOW, weeks=1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(predicate("isDOW"), r"((kommende|nächste) Woche)|((next|following) week)") def ruleDOWNextWeek(ts: datetime, pm_bias: bool, date_format: str, dow: Time, _: RegexMatch) -> Time: dm = ts + relativedelta(weekday=dow.DOW, weeks=1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(predicate("isDOY"), predicate("isYear")) def ruleDOYYear(ts: datetime, pm_bias: bool, date_format: str, doy: Time, y: Time) -> Time: return Time(year=y.year, month=doy.month, day=doy.day) @rule(predicate("isDOW"), predicate("isPOD")) def ruleDOWPOD(ts: datetime, pm_bias: bool, date_format: str, dow: Time, pod: Time) -> Time: return Time(DOW=dow.DOW, POD=pod.POD) @rule(predicate("isDOW"), predicate("isDOM")) def ruleDOWDOM(ts: datetime, pm_bias: bool, date_format: str, dow: Time, dom: Time) -> Time: # Monday 5th # Find next date at this day of week and day of month dm = rrule(MONTHLY, dtstart=ts, byweekday=dow.DOW, bymonthday=dom.day, count=1)[0] return Time(year=dm.year, month=dm.month, day=dm.day) @rule(predicate("hasDOW"), predicate("isDate")) def ruleDOWDate(ts: datetime, pm_bias: bool, date_format: str, dow: Time, date: Time) -> Time: # Monday 5th December - ignore DOW, but carry over e.g. POD from dow return Time(date.year, date.month, date.day, POD=dow.POD) @rule(predicate("isDate"), predicate("hasDOW")) def ruleDateDOW(ts: datetime, pm_bias: bool, date_format: str, date: Time, dow: Time) -> Time: # Monday 5th December - ignore DOW, but carry over e.g. POD from dow return Time(date.year, date.month, date.day, POD=dow.POD) # LatentX: handle time entities that are not grounded to a date yet # and assume the next date+time in the future @rule(predicate("isDOM")) def ruleLatentDOM(ts: datetime,pm_bias: bool, date_format: str, dom: Time) -> Time: dm = ts + relativedelta(day=dom.day) if dm <= ts: dm += relativedelta(months=1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(predicate("isDOW")) def ruleLatentDOW(ts: datetime, pm_bias: bool, date_format: str, dow: Time) -> Time: dm = ts + relativedelta(weekday=dow.DOW) if dm <= ts: dm += relativedelta(weeks=1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(predicate("isDOY")) def ruleLatentDOY(ts: datetime, pm_bias: bool, date_format: str, doy: Time) -> Time: dm = ts + relativedelta(month=doy.month, day=doy.day) if dm < ts: dm += relativedelta(years=1) return Time(year=dm.year, month=dm.month, day=dm.day) @rule(predicate("isPOD")) def ruleLatentPOD(ts: datetime, pm_bias: bool, date_format: str, pod: Time) -> Time: # Set the time to the pre-defined POD values, but keep the POD # information. The date is chosen based on what ever is the next # possible slot for these times h_from, h_to = pod_hours[pod.POD] t_from = ts + relativedelta(hour=h_from, minute=0) if t_from <= ts: t_from += relativedelta(days=1) return Time(year=t_from.year, month=t_from.month, day=t_from.day, POD=pod.POD) @rule( r"(?(?&_day))[\.\/]" # removed \- r"((?P(?&_month))|(?P({})))\.?" r"(?!\d|am|\s*pm)".format(_rule_months), date_format="EU" ) # do not allow dd.ddam, dd.ddpm, but allow dd.dd am - e.g. in the German # "13.06 am Nachmittag" def ruleDDMM(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: if m.match.group("month"): month = int(m.match.group("month")) else: for i, (name, _) in enumerate(_months): if m.match.group(name): month = i + 1 day = int(m.match.group("day")) # TODO remove the hack below and extend the DDMM and MMDD rules to be more readable and clear. if date_format == "US": if day <= 12: return Time(month=day, day=month) return Time(month=month, day=day) @rule( r"(?(?&_month))|(?P({})))[\.\/]" r"(?P(?&_day))" r"(?!\d|am|\s*pm)".format(_rule_months), date_format="US" ) def ruleMMDD(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: if m.match.group("month"): month = int(m.match.group("month")) else: for i, (name, _) in enumerate(_months): if m.match.group(name): month = i + 1 return Time(month=month, day=int(m.match.group("day"))) @rule( r"(?(?&_day))[\/\.]" r"((?P(?&_month))|(?P({})))[\/\.]" r"(?P(?&_year))(?!\d)".format(_rule_months), date_format="EU" ) def ruleDDMMYYYY(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: y = int(m.match.group("year")) if y < 100: y += 2000 if m.match.group("month"): month = int(m.match.group("month")) else: for i, (name, _) in enumerate(_months): if m.match.group(name): month = i + 1 time = Time(year=y, month=month, day=int(m.match.group("day"))) try: time.dt return time except ValueError: return None @rule( r"(?(?&_month))|(?P({})))\s*[\/\.]" r"(?P(?&_day))\s*[\/\.]" r"\s*(?P(?&_year))(?!\d)".format(_rule_months), date_format="US" ) def ruleMMDDYYYY(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: y = int(m.match.group("year")) if y < 100: y += 2000 if m.match.group("month"): month = int(m.match.group("month")) else: for i, (name, _) in enumerate(_months): if m.match.group(name): month = i + 1 day = int(m.match.group("day")) time = Time(year=y, month=month, day=day) try: time.dt return time except ValueError: return None def _is_valid_military_time(ts: datetime, pm_bias: bool, date_format: str, t: Time) -> bool: if t.hour is None or t.minute is None: return False t_year = t.hour * 100 + t.minute # Military times (i.e. no separator) are notriously difficult to # distinguish from yyyy; these are some heuristics to avoid an abundance # of false positives for hhmm # # If hhmm is the current year -> assume it is a year if t_year == ts.year: return False # If hhmm is the year in 3 month from now -> same, prefer year if t_year == (ts + relativedelta(months=3)).year: return False # If the minutes is not a multiple of 5 prefer year. # Since military times are typically used for flights, # and flight times are only multiples of 5, we use this heuristic as evidence # for military times. if t.minute % 5: return False return True def _maybe_apply_am_pm(t: Time, pm_bias: bool, date_format: str, ampm_match: str) -> Time: # add pm_bias, to access if not t.hour: return t if ampm_match is None: if not pm_bias: return Time(hour=t.hour, minute=t.minute) # PM bias if t.hour < 12: return Time(hour=t.hour + 12, minute=t.minute) else: t.period = "pm" return t if ampm_match.lower().startswith("a") and t.hour <= 12: if t.hour == 12: t.hour = 0 t.period = "am" return t if ampm_match.lower().startswith("p") and t.hour < 12: return Time(hour=t.hour + 12, minute=t.minute, period='pm') # the case ampm_match.startswith('a') and t.hour > # 12 (e.g. 13:30am) makes no sense, lets ignore the ampm # likewise if hour >= 12 no 'pm' action is needed return t @rule( # match hhmm r"(?(?:[01]\d)|(?:2[0-3]))(?P(?&_minute))" r"\s*(?Puhr|h)?" # optional uhr r"\s*(?P\s*[ap]\.?m\.?)?(?!\d)" # optional am/pm ) def ruleHHMMmilitary(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Time]: t = Time(hour=int(m.match.group("hour")), minute=int(m.match.group("minute") or 0)) if m.match.group("clock") or _is_valid_military_time(ts, pm_bias, date_format, t): return _maybe_apply_am_pm(t, pm_bias, date_format, m.match.group("ampm")) return None @rule( r"(?(?&_hour))" # We certainly match an hour # We try to match also the minute r"((?P:|uhr|h|)(?P(?&_minute)))?" r"\s*(?Puhr|h)?" # We match uhr with no minute r"(?P\s*[ap]\.?m\.?)?" # AM PM r"(?!\d)" ) def ruleHHMM(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: # hh [am|pm] # hh:mm # hhmm t = Time(hour=int(m.match.group("hour")), minute=int(m.match.group("minute") or 0)) return _maybe_apply_am_pm(t, pm_bias, date_format, m.match.group("ampm")) @rule(r"(?(?&_hour))\s*(uhr|h|o\'?clock)") def ruleHHOClock(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Time: return Time(hour=int(m.match.group("hour"))) @rule(r"(a |one )?quarter( to| till| before| of)|vie?rtel vor", predicate("isTOD")) def ruleQuarterBeforeHH(ts: datetime, pm_bias: bool, date_format:str, _: RegexMatch, t: Time) -> Optional[Time]: # no quarter past hh:mm where mm is not 0 or missing if t.minute: return None if t.hour > 0: return Time(hour=t.hour - 1, minute=45) else: return Time(hour=23, minute=45) @rule(r"((a |one )?quarter( after| past)|vie?rtel nach)", predicate("isTOD")) def ruleQuarterAfterHH(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch, t: Time) -> Optional[Time]: if t.minute: return None return Time(hour=t.hour, minute=15) @rule(r"halfe?( to| till| before| of)?|halb( vor)?", predicate("isTOD")) def ruleHalfBeforeHH(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch, t: Time) -> Optional[Time]: if t.minute: return None if t.hour > 0: return Time(hour=t.hour - 1, minute=30) else: return Time(hour=23, minute=30) @rule(r"halfe?( after| past)|halb nach", predicate("isTOD")) def ruleHalfAfterHH(ts: datetime, pm_bias: bool, date_format: str, _: RegexMatch, t: Time) -> Optional[Time]: if t.minute: return None return Time(hour=t.hour, minute=30) @rule(predicate("isTOD"), predicate("isPOD")) def ruleTODPOD(ts: datetime, pm_bias: bool, date_format: str, tod: Time, pod: Time) -> Optional[Time]: # time of day may only be an hour as in "3 in the afternoon"; this # is only relevant for time <= 12 if tod.hour < 12 and ( "afternoon" in pod.POD or "evening" in pod.POD or "night" in pod.POD or "last" in pod.POD ): h = tod.hour + 12 elif tod.hour > 12 and ( "forenoon" in pod.POD or "morning" in pod.POD or "first" in pod.POD ): # 17Uhr morgen -> do not merge return None else: h = tod.hour return Time(hour=h, minute=tod.minute) @rule(predicate("isPOD"), predicate("isTOD")) def rulePODTOD(ts: datetime, pm_bias: bool, date_format: str, pod: Time, tod: Time) -> Optional[Time]: return cast(Time, ruleTODPOD(ts, pm_bias, date_format, tod, pod)) @rule(predicate("isDate"), predicate("isTOD")) def ruleDateTOD(ts: datetime, pm_bias: bool, date_format: str, date: Time, tod: Time) -> Time: return Time( year=date.year, month=date.month, day=date.day, hour=tod.hour, minute=tod.minute ) @rule(predicate("isTOD"), predicate("isDate")) def ruleTODDate(ts: datetime, pm_bias: bool, date_format: str, tod: Time, date: Time) -> Time: return Time( year=date.year, month=date.month, day=date.day, hour=tod.hour, minute=tod.minute ) @rule(predicate("isDate"), predicate("isPOD")) def ruleDatePOD(ts: datetime, pm_bias: bool, date_format: str, d: Time, pod: Time) -> Time: return Time(year=d.year, month=d.month, day=d.day, POD=pod.POD) @rule(predicate("isPOD"), predicate("isDate")) def rulePODDate(ts: datetime, pm_bias: bool, date_format: str, pod: Time, d: Time) -> Time: return Time(year=d.year, month=d.month, day=d.day, POD=pod.POD) @rule( r"((?Pnot |nicht )?(vor|before))|(bis )?spätestens( bis)?|bis|latest", dimension(Time), ) def ruleBeforeTime(ts: datetime, pm_bias: bool, date_format: str, r: RegexMatch, t: Time) -> Interval: if r.match.group("not"): return Interval(t_from=t, t_to=None) else: return Interval(t_from=None, t_to=t) @rule( r"((?Pnot |nicht )?(nach|after))|(ab )?frühe?stens( ab)?|ab|" "(from )?earliest( after)?|from", dimension(Time), ) def ruleAfterTime(ts: datetime, pm_bias: bool, date_format: str, r: RegexMatch, t: Time) -> Interval: if r.match.group("not"): return Interval(t_from=None, t_to=t) else: return Interval(t_from=t, t_to=None) @rule(predicate("isDate"), _regex_to_join, predicate("isDate")) def ruleDateDate(ts: datetime, pm_bias: bool, date_format: str, d1: Time, _: RegexMatch, d2: Time) -> Optional[Interval]: if d1.year > d2.year: return None if d1.year == d2.year and d1.month > d2.month: return None if d1.year == d2.year and d1.month == d2.month and d1.day >= d2.day: return None return Interval(t_from=d1, t_to=d2) @rule(predicate("isDOM"), _regex_to_join, predicate("isDate")) def ruleDOMDate(ts: datetime, pm_bias: bool, date_format: str, d1: Time, _: RegexMatch, d2: Time) -> Optional[Interval]: if d1.day >= d2.day: return None return Interval(t_from=Time(year=d2.year, month=d2.month, day=d1.day), t_to=d2) @rule(predicate("isDate"), _regex_to_join, predicate("isDOM")) def ruleDateDOM(ts: datetime, pm_bias: bool, date_format: str, d1: Time, _: RegexMatch, d2: Time) -> Optional[Interval]: if d1.day >= d2.day: return None return Interval(t_from=d1, t_to=Time(year=d1.year, month=d1.month, day=d2.day)) @rule(predicate("isDOY"), _regex_to_join, predicate("isDate")) def ruleDOYDate(ts: datetime, pm_bias: bool, date_format: str, d1: Time, _: RegexMatch, d2: Time) -> Optional[Interval]: if d1.month > d2.month: return None elif d1.month == d2.month and d1.day >= d2.day: return None return Interval(t_from=Time(year=d2.year, month=d1.month, day=d1.day), t_to=d2) @rule(predicate("isDateTime"), _regex_to_join, predicate("isDateTime")) def ruleDateTimeDateTime( ts: datetime, pm_bias: bool, date_format: str, d1: Time, _: RegexMatch, d2: Time ) -> Optional[Interval]: if d1.year > d2.year: return None if d1.year == d2.year and d1.month > d2.month: return None if d1.year == d2.year and d1.month == d2.month and d1.day > d2.day: return None if ( d1.year == d2.year and d1.month == d2.month and d1.day == d2.day and d1.hour > d2.hour ): return None if ( d1.year == d2.year and d1.month == d2.month and d1.day == d2.day and d1.hour == d2.hour and d1.minute >= d2.minute ): return None return Interval(t_from=d1, t_to=d2) @rule(predicate("isTOD"), _regex_to_join, predicate("isTOD")) def ruleTODTOD(ts: datetime, pm_bias: bool, date_format: str, t1: Time, _: RegexMatch, t2: Time) -> Interval: if not pm_bias: if (t2.hour < t1.hour): if t2.hour < 12: t2.hour += 12 return Interval(t_from=t1, t_to=t2) # 9-5 handling on pm bias if (t2.hour < t1.hour) and (t2.hour >= 12 and t1.hour >= 12): t1.hour -= 12 return Interval(t_from=t1, t_to=t2) # am override if not t1.period and t2.period == "am" and t1.hour > 12: t1.hour -= 12 return Interval(t_from=t1, t_to=t2) else: return Interval(t_from=t1, t_to=t2) @rule(predicate("isPOD"), _regex_to_join, predicate("isPOD")) def rulePODPOD(ts: datetime, pm_bias: bool, date_format: str, t1: Time, _: RegexMatch, t2: Time) -> Interval: return Interval(t_from=t1, t_to=t2) @rule(predicate("isDate"), dimension(Interval)) def ruleDateInterval(ts: datetime, pm_bias: bool, date_format: str, d: Time, i: Interval) -> Optional[Interval]: if not ( (i.t_from is None or i.t_from.isTOD or i.t_from.isPOD) and (i.t_to is None or i.t_to.isTOD or i.t_to.isPOD) ): return None t_from = t_to = None if i.t_from is not None: t_from = Time( year=d.year, month=d.month, day=d.day, hour=i.t_from.hour, minute=i.t_from.minute, POD=i.t_from.POD, ) if i.t_to is not None: t_to = Time( year=d.year, month=d.month, day=d.day, hour=i.t_to.hour, minute=i.t_to.minute, POD=i.t_to.POD, ) if t_from and t_to and t_from.dt >= t_to.dt: t_to_dt = t_to.dt + relativedelta(days=1) t_to = Time( year=t_to_dt.year, month=t_to_dt.month, day=t_to_dt.day, hour=t_to_dt.hour, minute=t_to_dt.minute, POD=t_to.POD, ) return Interval(t_from=t_from, t_to=t_to) @rule(dimension(Interval), predicate("isDate")) def ruleIntervalDate(ts: datetime, pm_bias: bool, date_format: str, i: Interval, d: Time) -> Optional[Interval]: if not ( (i.t_from is None or i.t_from.isTOD or i.t_from.isPOD) and (i.t_to is None or i.t_to.isTOD or i.t_to.isPOD) ): return None t_from = t_to = None if i.t_from is not None: t_from = Time( year=d.year, month=d.month, day=d.day, hour=i.t_from.hour, minute=i.t_from.minute, POD=i.t_from.POD, ) if i.t_to is not None: t_to = Time( year=d.year, month=d.month, day=d.day, hour=i.t_to.hour, minute=i.t_to.minute, POD=i.t_to.POD, ) if t_from and t_to and t_from.dt >= t_to.dt: t_to_dt = t_to.dt + relativedelta(days=1) t_to = Time( year=t_to_dt.year, month=t_to_dt.month, day=t_to_dt.day, hour=t_to_dt.hour, minute=t_to_dt.minute, POD=t_to.POD, ) return Interval(t_from=t_from, t_to=t_to) @rule(predicate("isPOD"), dimension(Interval)) def rulePODInterval(ts: datetime, pm_bias: bool, date_format: str, p: Time, i: Interval) -> Optional[Interval]: def _adjust_h(t: Time) -> Optional[int]: if t.hour is None: return None if t.hour < 12 and ( "afternoon" in p.POD or "evening" in p.POD or "night" in p.POD or "last" in p.POD ): return t.hour + 12 else: return t.hour # only makes sense if i is a time interval if not ( (i.t_from is None or i.t_from.hasTime) and (i.t_to is None or i.t_to.hasTime) ): return None t_to = t_from = None if i.t_to is not None: t_to = Time( year=i.t_to.year, month=i.t_to.month, day=i.t_to.day, hour=_adjust_h(i.t_to), minute=i.t_to.minute, DOW=i.t_to.DOW, ) if i.t_from is not None: t_from = Time( year=i.t_from.year, month=i.t_from.month, day=i.t_from.day, hour=_adjust_h(i.t_from), minute=i.t_from.minute, DOW=i.t_from.DOW, ) return Interval(t_from=t_from, t_to=t_to) # We add named numbers at least until 31 (max number of days in a month) _named_number = ( (1, r"an?|one|ein[es]?"), (2, r"two|zwei"), (3, r"three|drei"), (4, r"four|vier"), (5, r"five|fünf"), (6, r"six|sechs"), (7, r"seven|sieben"), (8, r"eight|acht"), (9, r"nine|neun"), (10, r"ten|zehn"), (11, r"eleven|elf"), (12, r"twelve|zwölf"), (13, r"thirteen|dreizehn"), (14, r"fourteen|vierzehn"), (15, r"fifteen|fünfzehn"), (16, r"sixteen|sechszehn"), (17, r"seventeen|siebzehn"), (18, r"eighteen|achtzehn"), (19, r"nineteen|neunzehn"), (20, r"twenty|zwanzig"), (21, r"twentyone|einund?zwanzig"), (22, r"twentytwo|zweiund?zwanzig"), (23, r"twentythree|dreiund?zwanzig"), (24, r"twentyfour|vierund?zwanzig"), (25, r"twentyfive|fünfund?zwanzig"), (26, r"twentysix|sechsund?zwanzig"), (27, r"twentyseven|siebenud?zwanzig"), (28, r"twentyeight|achtund?zwanzig"), (29, r"twentynine|neunund?zwanzig"), (30, r"thirty|drei(ß|ss)ig"), (31, r"thirtyone|einundrei(ß|ss)ig"), ) _rule_named_number = "|".join( r"(?P{}\b)".format(n, expr) for n, expr in _named_number ) _rule_named_number = r"({})\s*".format(_rule_named_number) _durations = [ (DurationUnit.NIGHTS, r"\bn[aä]chte?\b|\bnights?\b|\b[üu]bernachtung\b"), (DurationUnit.DAYS, r"\btage?\b|days?|d"), (DurationUnit.MINUTES, r"\bmins?\b|m(inute[ns]?)?"), (DurationUnit.HOURS, r"\bstunden?\b|h(ours?)?|h|hrs?"), (DurationUnit.WEEKS, r"weeks?|\bwochen?\b|w"), (DurationUnit.MONTHS, r"\bmonate?\b|\bmonths?\b"), (DurationUnit.YEARS, r'\bjahre?\b|\byears?\b|\by\b|\byrs?\b'), ] _rule_durations = r"|".join( r"(?P{}\b)".format(dur.value, expr) for dur, expr in _durations ) _rule_durations = r"({})\s*".format(_rule_durations) # Rules regarding durations @rule(r"(in)\s*" + r"(?P\d+)\s*" + _rule_durations) def ruleDigitDuration(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Duration]: # 1 day, 1 night etc. num = m.match.group("num") if num: for n, _, in _durations: unit = m.match.group("d_" + n.value) if unit: return Duration(int(num), n) return None @rule(r"(in)\s*" + _rule_named_number + _rule_durations) def ruleNamedNumberDuration(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Duration]: # one day, two nights, thirty days etc. num = None for n, _ in _named_number: match = m.match.group("n_{}".format(n)) if match: num = n continue if num: for d, _, in _durations: unit = m.match.group("d_" + d.value) if unit: return Duration(num, d) return None @rule(r"(in)\s*" + r"(hal[fb]e?|1/2)(\s+an?)?\s*" + _rule_durations) def ruleDurationHalf(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Duration]: # half day, half hour, 1/2 hour for n, _, in _durations: if m.match.group("d_" + n.value): if n == DurationUnit.HOURS: return Duration(30, DurationUnit.MINUTES) if n == DurationUnit.DAYS: return Duration(12, DurationUnit.HOURS) return None # discarding these rules for now and adding their functional counterparts below. # These have no use case for us at the moment # TODO: update corpus.py and auto_corpus.py # @rule(predicate("isDateInterval"), r"f[üo]r", dimension(Duration)) # def ruleIntervalConjDuration( # ts: datetime, interval: Interval, _: RegexMatch, dur: Duration # ) -> Optional[Interval]: # # Example: people tend to repeat themselves when specifying durations # # 15-16 Nov für 1 Nacht # return ruleDurationInterval(ts, dur, interval) # type: ignore # @rule(predicate("isDateInterval"), dimension(Duration)) # def ruleIntervalDuration( # ts: datetime, interval: Interval, dur: Duration # ) -> Optional[Interval]: # # Variant without conjunction # # 15-16 Nov 1 Nacht # return ruleDurationInterval(ts, dur, interval) # type: ignore # # # @rule(dimension(Duration), predicate("isDateInterval")) # def ruleDurationInterval( # ts: datetime, dur: Duration, interval: Interval # ) -> Optional[Interval]: # # 3 days 15-18 Nov # delta = interval.t_to.dt - interval.t_from.dt # dur_delta = _duration_to_relativedelta(dur) # if delta.days == dur_delta.days: # return interval # return None # @rule(dimension(Time), "(for)\s*" + r"(?P\d+)\s*" + _rule_durations) def ruleIntervalFromDuration( ts: datetime, pm_bias: bool, date_format: str, t: Time, m: RegexMatch, ) -> Optional[Interval]: # task 8pm for 30 minutes dur = ruleDigitDuration(ts, pm_bias, date_format, m) if t.hasDate: time_dt = t.dt else: t.day, t.month, t.year = ts.day, ts.month, ts.year time_dt = t.dt if dur.unit in ( DurationUnit.DAYS, DurationUnit.NIGHTS, DurationUnit.WEEKS, DurationUnit.MONTHS, ): delta = _duration_to_relativedelta(dur) end_ts = time_dt + delta end = Time(year=end_ts.year, month=end_ts.month, day=end_ts.day) if t.hour: end = Time(year=end_ts.year, month=end_ts.month, day=end_ts.day, hour=end_ts.hour, minute=end_ts.minute) return Interval(t_from=t, t_to=end) if dur.unit in (DurationUnit.HOURS, DurationUnit.MINUTES): delta = _duration_to_relativedelta(dur) end_ts = time_dt + delta end = Time( year=end_ts.year, month=end_ts.month, day=end_ts.day, hour=end_ts.hour, minute=end_ts.minute, ) return Interval(t_from=t, t_to=end) return None def _duration_to_relativedelta(dur: Duration) -> relativedelta: return { DurationUnit.DAYS: relativedelta(days=dur.value), DurationUnit.NIGHTS: relativedelta(days=dur.value), DurationUnit.WEEKS: relativedelta(weeks=dur.value), DurationUnit.MONTHS: relativedelta(months=dur.value), DurationUnit.HOURS: relativedelta(hours=dur.value), DurationUnit.MINUTES: relativedelta(minutes=dur.value), }[dur.unit] @rule(dimension(Time), dimension(Duration)) def ruleTimeDuration(ts: datetime, pm_bias: bool, date_format: str, t: Time, d: Duration) -> Time: # beer 4am in 3 days delta = d.time(ts) time = Time( year=delta.year, month=delta.month, day=delta.day, hour=t.hour, minute=t.minute ) return time @rule(dimension(Duration), dimension(Time)) def ruleDurationTime(ts: datetime, pm_bias: bool, date_format: str, d: Duration, t: Time) -> Time: # beer in 3 days 4am delta = d.time(ts) time = Time( year=delta.year, month=delta.month, day=delta.day, hour=t.hour, minute=t.minute ) return time @rule(dimension(Duration), dimension(Interval)) def ruleDurationInterval(ts: datetime, pm_bias: bool, date_format: str, d: Duration, i: Interval) -> Interval: # beer in 3 days 4-6pm if not i.isTimeInterval: return None delta = d.time(ts) start_time = Time( year=delta.year, month=delta.month, day=delta.day, hour=i.t_from.hour, minute=i.t_from.minute ) end_time = Time( year=delta.year, month=delta.month, day=delta.day, hour=i.t_to.hour, minute=i.t_to.minute ) return Interval(t_from=start_time, t_to=end_time) @rule(dimension(Interval), dimension(Duration)) def ruleIntervalDuration(ts: datetime, pm_bias: bool, date_format: str, i: Interval, d: Duration) -> Interval: # beer 4-6pm in 3 days # TODO: "4-6 in 3 days" doesn't work if not i.isTimeInterval: return None delta = d.time(ts) start_time = Time( year=delta.year, month=delta.month, day=delta.day, hour=i.t_from.hour, minute=i.t_from.minute ) end_time = Time( year=delta.year, month=delta.month, day=delta.day, hour=i.t_to.hour, minute=i.t_to.minute ) return Interval(t_from=start_time, t_to=end_time) ######### Recurring events ######### _named_interval = ( (2, r"2|2nd|second|other|two"), (3, r"3|3rd|third|three"), (4, r"4|4th|four"), (5, r"5|5th|five"), (6, r"6|6th|six"), (7, r"7|7th|seven"), (7, r"8|8th|eight"), (9, r"9|9th|nine"), (10, r"10|10th|ten"), (11, r"11|11th|eleven"), ) _rule_named_interval = "|".join( r"(?P{}\b)".format(itv, expr) for itv, expr in _named_interval ) _rule_named_interval = r"({})\s*".format(_rule_named_interval) _single_frequencies = [ (RecurringFrequency.DAILY, r"daily"), (RecurringFrequency.WEEKLY, r"weekly"), (RecurringFrequency.MONTHLY, r"monthly"), (RecurringFrequency.YEARLY, r"yearly"), ] _rule_single_frequencies = r"|".join( r"(?P{}\b)".format(freq.value, expr) for freq, expr in _single_frequencies ) _rule_single_frequencies = r"({})\s*".format(_rule_single_frequencies) _frequencies = [ (RecurringFrequency.DAILY, r"days?|d"), (RecurringFrequency.WEEKLY, r"weeks?|w"), (RecurringFrequency.MONTHLY, r"months?|m"), (RecurringFrequency.YEARLY, r"years?|y"), ] _rule_frequencies = r"|".join( r"(?P{}\b)".format(freq.value, expr) for freq, expr in _frequencies ) _rule_frequencies = r"({})\s*".format(_rule_frequencies) _recurring_dows = [ ("mon", r"\bmontags\b|\bmondays\b|\bmons\.?\b"), ("tue", r"\bdie?nstags\b|\bdies\.?\b|\btuesdays\b|\btues\.?\b"), ("wed", r"\bmittwochs\b|\bmis\.?\b|\bwednesdays\b|\bweds\.?\b"), ("thu", r"\bdonn?erstags\b|\bdons\.?\b|\bthursdays\b|\bthurs\.?\b"), ("fri", r"\bfreitags\b|\bfridays\b|\bfris\.?\b"), ("sat", r"\bsamstags\b|\bsonnabends\b|\bsaturdays\b|\bsats\.?\b"), ("sun", r"\bsonntags\b|\bsos\.?\b|\bsundays\b|\bsuns\.?\b"), ] _rule_recurring_dows = r"|".join(r"(?P<{}>{})".format(dow, expr) for dow, expr in _recurring_dows) _rule_recurring_dows = r"({})\s*".format(_rule_recurring_dows) @rule(_rule_single_frequencies) def ruleRecurringSingle(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Recurring]: # daily / weekly for f, _ in _single_frequencies: freq = m.match.group("f_" + f.value) if freq: time = Time(year=ts.year, month=ts.month, day=ts.day) return Recurring(f.value, 1, start_time=time, end_time=time) return None # r"(? Optional[Recurring]: # every day / every week for f, _ in _frequencies: freq = m.match.group("f_" + f.value) if freq: time = Time(year=ts.year, month=ts.month, day=ts.day) return Recurring(frequency=f.value, interval=1, start_time=time, end_time=time) return None # r"(? Optional[Recurring]: # every other week / every 2nd day for i, _ in _named_interval: match = m.match.group("n_{}".format(i)) if match: itv = i for f, _ in _frequencies: freq = m.match.group("f_" + f.value) if freq: time = Time(year=ts.year, month=ts.month, day=ts.day) return Recurring(frequency=f.value, interval=itv, start_time=time, end_time=time) return None @rule(dimension(Recurring), r"(starting|beginning|from|starts?|begins?)\s*", predicate("isDate")) def ruleDefinedRecurringIntervals(ts: datetime, pm_bias: bool, date_format: str, r: Recurring, m: RegexMatch, start: Time) -> Optional[Recurring]: # every other week from monday / every 2nd day from today / every day starting monday / beer 4am weekly from next monday start_time = Time( year=start.year, month=start.month, day=start.day, hour=r.start_time.hour or None, minute=r.start_time.minute ) end_time = Time( year=start.year, month=start.month, day=start.day, hour=r.end_time.hour or None, minute=r.end_time.minute ) return Recurring(frequency=r.frequency, interval=r.interval, start_time=start_time, end_time=end_time) @rule(r"(starting|beginning|from|starts?|begins?)\s*", predicate("isDate"), dimension(Recurring)) def ruleDefinedRecurringIntervals2(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch, start: Time, r: Recurring) -> Optional[Recurring]: # beer from 25th every other week start_time = Time( year=start.year, month=start.month, day=start.day, hour=r.start_time.hour or None, minute=r.start_time.minute ) end_time = Time( year=start.year, month=start.month, day=start.day, hour=r.end_time.hour or None, minute=r.end_time.minute ) return Recurring(frequency=r.frequency, interval=r.interval, start_time=start_time, end_time=end_time) @rule(dimension(Time), dimension(Recurring)) def ruleRecurringTime(ts: datetime, pm_bias: bool, date_format: str, t: Time, r: Recurring) -> Optional[Recurring]: # 4 every day / 4pm daily / 7am tomorrow weekly / friday 4pm daily r_time = r.start_time.dt if t.hasDate: r_time = t.dt dm = ts + relativedelta(hour=t.hour, minute=t.minute or 0, day=r_time.day) if dm <= ts: r_time += relativedelta(days=1) time = Time( year=r_time.year, month=r_time.month, day=r_time.day, hour=dm.hour, minute=dm.minute ) return Recurring(frequency=r.frequency, interval=r.interval, start_time=time, end_time=time, byday=r.byday) @rule(dimension(Recurring), dimension(Time)) def ruleRecurringTime2(ts: datetime, pm_bias: bool, date_format: str, r: Recurring, t: Time) -> Optional[Recurring]: # every day 4 / daily 4pm r_time = r.start_time.dt if t.hasDate: r_time = t.dt dm = ts + relativedelta(hour=t.hour, minute=t.minute or 0, day=r_time.day) if dm <= ts: r_time += relativedelta(days=1) time = Time( year=r_time.year, month=r_time.month, day=r_time.day, hour=dm.hour, minute=dm.minute ) return Recurring(frequency=r.frequency, interval=r.interval, start_time=time, end_time=time, byday=r.byday) @rule(dimension(Recurring), predicate("isTimeInterval")) def ruleRecurringTimeInterval(ts: datetime, pm_bias: bool, date_format: str, r: Recurring, t: Interval) -> Optional[Recurring]: # every day 4-6 / daily 9-5 r_time = r.start_time.dt dm = ts + relativedelta(hour=t.t_from.hour, minute=t.t_from.minute or 0, day=r_time.day) if dm <= ts: r_time += relativedelta(days=1) start_time = Time( year=r_time.year, month=r_time.month, day=r_time.day, hour=t.t_from.hour, minute=t.t_from.minute ) end_time = Time( year=r_time.year, month=r_time.month, day=r_time.day, hour=t.t_to.hour, minute=t.t_to.minute ) return Recurring(frequency=r.frequency, interval=r.interval, start_time=start_time, end_time=end_time, byday=r.byday) @rule(predicate("isTimeInterval"), dimension(Recurring)) def ruleRecurringTimeInterval2(ts: datetime, pm_bias: bool, date_format: str, t: Interval, r: Recurring) -> Optional[Recurring]: # 4-6 every day / 9-5 daily r_time = r.start_time.dt dm = ts + relativedelta(hour=t.t_from.hour, minute=t.t_from.minute or 0, day=r_time.day) if dm <= ts: r_time += relativedelta(days=1) start_time = Time( year=r_time.year, month=r_time.month, day=r_time.day, hour=t.t_from.hour, minute=t.t_from.minute ) end_time = Time( year=r_time.year, month=r_time.month, day=r_time.day, hour=t.t_to.hour, minute=t.t_to.minute ) return Recurring(frequency=r.frequency, interval=r.interval, start_time=start_time, end_time=end_time, byday=r.byday) @rule(r"(every|each)\s*", predicate("isDOW")) def ruleRecurringDOW(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch, dow: Time) -> Optional[Recurring]: # every thursday dm = ts + relativedelta(weekday=dow.DOW) if dm <= ts: dm += relativedelta(weeks=1) time = Time(year=dm.year, month=dm.month, day=dm.day, DOW=dow.DOW) return Recurring(frequency=RecurringFrequency.WEEKLY.value, interval=1, start_time=time, end_time=time, byday=dm.weekday()) @rule(r"(every|each)\s*", predicate('isDOY')) def ruleRecurringDOY(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch, doy: Time) -> Optional[Recurring]: # every 23.9 / every september 3rd dm = ts + relativedelta(month=doy.month, day=doy.day) if dm <= ts: dm += relativedelta(years=1) time = Time(year=dm.year, month=doy.month, day=doy.day) return Recurring(frequency=RecurringFrequency.YEARLY.value, interval=1, start_time=time, end_time=time, byday=dm.weekday()) @rule(r"(every|each)\s*" + _rule_named_interval, predicate("isDOW")) def ruleRecurringIntervalDOW(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch, dow: Time) -> Optional[Recurring]: # every other thursday itv = None for i, _ in _named_interval: match = m.match.group("n_{}".format(i)) if match: itv = i dm = ts + relativedelta(weekday=dow.DOW) if dm <= ts: dm += relativedelta(weeks=1) time = Time(year=dm.year, month=dm.month, day=dm.day, DOW=dow.DOW) return Recurring(frequency=RecurringFrequency.WEEKLY.value, interval=itv, start_time=time, end_time=time, byday=dm.weekday()) @rule(_rule_recurring_dows) def ruleRecurringDOWS(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Recurring]: # thursdays for i, (name, _) in enumerate(_recurring_dows): if m.match.group(name): dow = i dm = ts + relativedelta(weekday=dow) if dm <= ts: dm += relativedelta(weeks=1) time = Time(year=dm.year, month=dm.month, day=dm.day, DOW=dow) return Recurring(frequency=RecurringFrequency.WEEKLY.value, interval=1, start_time=time, end_time=time, byday=dm.weekday()) return None @rule(dimension(Recurring), r"(and)\s*", dimension(Recurring)) def ruleRecurringSimpleDOWDOW(ts: datetime, pm_bias: bool, date_format: str, rec1: Recurring, m: RegexMatch, rec2: Recurring) -> Optional[Recurring]: # thursdays and wednesdays return Recurring(frequency=rec1.frequency, interval=rec1.interval, start_time=rec1.start_time, end_time=rec1.end_time, byday=(rec1.start_time.dt.weekday(), rec2.start_time.dt.weekday())) @rule(r"(every|each)\s*", predicate("isDOW"), r"(and)\s*", predicate("isDOW")) def ruleRecurringDOWDOW(ts: datetime, pm_bias: bool, date_format: str, m1: RegexMatch, dow1: Time, m2: RegexMatch, dow2: Time) -> Optional[Recurring]: # every thursday and wednesday dm = ts + relativedelta(weekday=dow1.DOW) if dm <= ts: dm += relativedelta(weeks=1) time1 = Time(year=dm.year, month=dm.month, day=dm.day, DOW=dow1.DOW) dm2 = ts + relativedelta(weekday=dow2.DOW) if dm2 <= ts: dm2 += relativedelta(weeks=1) time2 = Time(year=dm2.year, month=dm2.month, day=dm2.day, DOW=dow2.DOW) return Recurring(frequency=RecurringFrequency.WEEKLY.value, interval=1, start_time=time1, end_time=time1, byday=(time1.dt.weekday(), time2.dt.weekday())) @rule(r"(every|each)\s*", predicate("isDOW"), r"(to)\s*", predicate("isDOW")) def ruleRecurringDOW2DOW(ts: datetime, pm_bias: bool, date_format: str, m1: RegexMatch, dow1: Time, m2: RegexMatch, dow2: Time) -> Optional[Recurring]: # every wednesday to monday dows = [] if dow1.DOW < dow2.DOW: dows = [day for day in range(dow1.DOW, dow2.DOW+1)] elif dow1.DOW > dow2.DOW: i = dow1.DOW dows.append(i) while i != dow2.DOW: if i == 6: i = 0 dows.append(i) continue i += 1 dows.append(i) dows = tuple(dows) for dow in dows: dm = ts + relativedelta(weekday=dow) if dm <= ts: dm += relativedelta(weeks=1) time = Time(year=dm.year, month=dm.month, day=dm.day) if dm >= ts: dm += relativedelta(weekday=dow) time = Time(year=dm.year, month=dm.month, day=dm.day) return Recurring(frequency=RecurringFrequency.WEEKLY.value, interval=1, start_time=time, end_time=time, byday=dows) # TODO 5-6 not working @rule(r"(weekdays|every weekday)\s*") def ruleRecurringWeekdays(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch) -> Optional[Recurring]: # weekdays 5-6 / every weekday 4pm dows = (0, 1, 2, 3, 4) for dow in dows: dm = ts + relativedelta(weekday=dow) if dm <= ts: dm += relativedelta(weeks=1) time = Time(year=dm.year, month=dm.month, day=dm.day) if dm >= ts: dm += relativedelta(weekday=dow) time = Time(year=dm.year, month=dm.month, day=dm.day) return Recurring(frequency=RecurringFrequency.WEEKLY.value, interval=1, start_time=time, end_time=time, byday=dows) @rule(dimension(Duration), dimension(Recurring)) def ruleDurationRecurring(ts: datetime, pm_bias: bool, date_format: str, d: Duration, r: Recurring) -> Optional[Recurring]: # beer in 3 days every week dur = d.time(ts=ts) time = Time( year=dur.year, month=dur.month, day=dur.day ) return Recurring(frequency=r.frequency, interval=r.interval, start_time=time, end_time=time, byday=dur.dt.weekday()) @rule(r"(next)\s*" + _rule_durations) def ruleNextFrequency(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch): for n, _, in _durations: unit = m.match.group("d_" + n.value) if unit: if unit == "week": d = ts + relativedelta(days=7) return Time( year=d.year, month=d.month, day=d.day, ) if unit == "month": d = ts + relativedelta(months=1) return Time( year=d.year, month=d.month, day=d.day, ) return None @rule(r"(last)\s*" + _rule_dows) def ruleLastDOM(ts: datetime, pm_bias: bool, date_format: str, m: RegexMatch): # last monday of the month for i, (name, _) in enumerate(_dows): if m.match.group(name): dom = i break last_dom = (datetime.now().replace(day=1) + timedelta(days=32)).replace(day=1) while True: last_dom -= timedelta(days=1) if last_dom.weekday() == dom: return Time(month=last_dom.month, day=last_dom.day) return None ================================================ FILE: ctparse/timers.py ================================================ """Utilities for tracking time spent in functions. Although this module is not part of the public API, it is used in various parts of the ctparse package. """ from time import perf_counter from typing import Any, Callable, TypeVar, Union, Tuple from functools import wraps T = TypeVar("T") def timeout(timeout: Union[float, int]) -> Callable[[], None]: """Generate a functions that raises an exceptions if a timeout has passed. Example: sentinel = timeout(1.0) time.sleep(0.5) sentinel() # Do nothing time.sleep(0.6) sentinel() # Raises CTParseTimeoutException :param timeout: time in seconds. If it is equal to zero, it means to never raise an exception. :returns: A function that raises a `CTParseTimeoutException` if `timeout` seconds have expired. """ start_time = perf_counter() def _tt() -> None: if timeout == 0: return if perf_counter() - start_time > timeout: raise CTParseTimeoutError() return _tt def timeit(f: Callable[..., T]) -> Callable[..., Tuple[T, float]]: """Wrapper to time a function. The wrapped function is modified so that it returns a tuple `(f(args), t)` where `t` the time in seconds the function call took to run. Example: def fun(x): return x * x result, exec_time = timeit(fun)(3) """ @wraps(f) def _wrapper(*args: Any, **kwargs: Any) -> Tuple[T, float]: start_time = perf_counter() res = f(*args, **kwargs) return res, perf_counter() - start_time return _wrapper # NOTE: TimeoutError is a built-in exception that means that # system function timed out at the system level. Hence we opt # for a custom exception. class CTParseTimeoutError(Exception): """Exception raised by the `timeout` function.""" ================================================ FILE: ctparse/types.py ================================================ from datetime import datetime from typing import Any, Dict, Optional, Tuple, Type, TypeVar, List from dateutil.relativedelta import relativedelta from dateutil.rrule import rrule, YEARLY, MONTHLY, WEEKLY, DAILY import regex from regex import Regex import enum T = TypeVar("T", bound="Artifact") class Artifact: def __init__(self) -> None: self.mstart = 0 self.mend = 0 self._attrs = ["mstart", "mend"] def update_span(self: T, *args: "Artifact") -> T: self.mstart = args[2].mstart self.mend = args[-1].mend return self def __len__(self) -> int: return self.mend - self.mstart def __bool__(self) -> bool: return True def __str__(self) -> str: return "" def __repr__(self) -> str: return "{}[{}-{}]{{{}}}".format( self.__class__.__name__, self.mstart, self.mend, str(self) ) def nb_str(self) -> str: """Return a string representation without the bounds information.""" return "{}[]{{{}}}".format(self.__class__.__name__, str(self)) def __eq__(self, other: Any) -> bool: if type(other) != type(self): return False else: return all(getattr(self, a) == getattr(other, a) for a in self._attrs) def __hash__(self) -> int: return hash(tuple(getattr(self, a) for a in self._attrs)) def _hasOnly(self, *args: str) -> bool: """check that all attributes set to True are set (i.e. not None) and all set to False are not set (i.e. None) """ return all( getattr(self, a) is not None if a in args else getattr(self, a) is None for a in self._attrs ) def _hasAtLeast(self, *args: str) -> bool: """check that all attributes set to True are set (i.e. not None) and all set to False are not set (i.e. None) """ return all(getattr(self, a) is not None for a in args) class RegexMatch(Artifact): def __init__(self, id: int, m: Regex) -> None: super().__init__() self._attrs = ["mstart", "mend", "id"] self.key = "R{}".format(id) self.id = id self.match = m self.mstart = m.span(self.key)[0] self.mend = m.span(self.key)[1] self._text = m.group(self.key) def __str__(self) -> str: return "{}:{}".format(self.id, self._text) _pod_hours = { "earlymorning": { "offset": (4, 7), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "morning": { "offset": (6, 9), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "forenoon": { "offset": (9, 12), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "noon": { "offset": (11, 13), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "afternoon": { "offset": (12, 17), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "evening": { "offset": (17, 20), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "lateevening": { "offset": (18, 21), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "night": { "offset": (19, 22), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (-1, -1), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (1, 1), }, }, "first": { "offset": (0, 0), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (0, 0), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (0, 0), }, }, "last": { "offset": (23, 23), "early": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (0, 0), }, "late": { "early": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "late": {"offset": (0, 0), "very": {"offset": (0, 0)}}, "very": {"offset": (0, 0)}, "offset": (0, 0), }, }, } def _mk_pod_hours() -> Dict[str, Tuple[int, int]]: def _add_ts(t1: Tuple[int, int], t2: Tuple[int, int]) -> Tuple[int, int]: return (t1[0] + t2[0], t1[1] + t2[1]) def _mk( pod: str, pod_data: Dict[str, Any], t: Tuple[int, int] ) -> Dict[str, Tuple[int, int]]: r = {pod: _add_ts(t, pod_data["offset"])} for k, v in pod_data.items(): if k == "offset": continue r.update(_mk(k + pod, v, r[pod])) return r res = {} for k, v in _pod_hours.items(): if k == "offset": continue res.update(_mk(k, v, (0, 0))) return res pod_hours = _mk_pod_hours() _TIME_REGEX = regex.compile( r"(\d{4}|X)-(\d{2}|X)-(\d{2}|X) (\d{2}|X):(\d{2}|X) \((\d|X)\/(\w+)\)" ) class Time(Artifact): def __init__( self, year: Optional[int] = None, month: Optional[int] = None, day: Optional[int] = None, hour: Optional[int] = None, minute: Optional[int] = None, DOW: Optional[int] = None, POD: Optional[str] = None, period: Optional[str] = None, ) -> None: super().__init__() self._attrs = ["year", "month", "day", "hour", "minute", "DOW", "POD", "period"] # Might add some validation here, did not to avoid the overhead self.year = year self.month = month self.day = day self.hour = hour self.minute = minute self.DOW = DOW self.POD = POD self.period = period # ----------------------------------------------------------------------------- # Make sure to not accidentially test bool(x) as False when x==0, but you meant # x==None # ----------------------------------------------------------------------------- @property def isDOY(self) -> bool: """isDayOfYear <=> a dd.mm but not year """ return self._hasOnly("month", "day") @property def isDOM(self) -> bool: """isDayOfMonth <=> a dd but no month """ return self._hasOnly("day") @property def isDOW(self) -> bool: """isDayOfWeek <=> DOW is the 0=Monday index; fragile test, as the DOW could be accompanied by e.g. a full date etc.; in practice, however, the production rules do not do that. """ return self._hasOnly("DOW") @property def isMonth(self) -> bool: return self._hasOnly("month") @property def isPOD(self) -> bool: """isPartOfDay <=> morning, etc.; fragile, tests only that there is a POD and neither a full date nor a full time """ return self._hasOnly("POD") @property def isHour(self) -> bool: """only has an hour""" return self._hasOnly("hour") @property def isTOD(self) -> bool: """isTimeOfDay - only a time, not date""" return self._hasOnly("hour") or self._hasOnly("hour", "minute") or self._hasOnly("hour", "period") or self._hasOnly("hour", "minute", "period") @property def isDate(self) -> bool: """isDate - only a date, not time""" return self._hasOnly("year", "month", "day") @property def isDateTime(self) -> bool: """a date and a time""" return self._hasOnly("year", "month", "day", "hour") or self._hasOnly( "year", "month", "day", "hour", "minute" ) @property def isYear(self) -> bool: """just a year""" return self._hasOnly("year") @property def hasDate(self) -> bool: """at least a date""" return self._hasAtLeast("year", "month", "day") @property def hasDOY(self) -> bool: """at least a day of year""" return self._hasAtLeast("month", "day") @property def hasDOW(self) -> bool: """at least a day of week""" return self._hasAtLeast("DOW") @property def hasTime(self) -> bool: """at least a time to the hour""" return self._hasAtLeast("hour") or self._hasOnly("hour", "period") @property def hasPeriod(self) -> bool: """at least a period""" return self._hasAtLeast("period") @property def hasPOD(self) -> bool: """at least a part of day""" return self._hasAtLeast("POD") def __str__(self) -> str: return "{}-{}-{} {}:{} ({}/{})".format( "{:04d}".format(self.year) if self.year is not None else "X", "{:02d}".format(self.month) if self.month is not None else "X", "{:02d}".format(self.day) if self.day is not None else "X", "{:02d}".format(self.hour) if self.hour is not None else "X", "{:02d}".format(self.minute) if self.minute is not None else "X", "{:d}".format(self.DOW) if self.DOW is not None else "X", "{}".format(self.POD) if self.POD is not None else "X", ) @classmethod def from_str(cls: Type["Time"], text: str) -> "Time": match = _TIME_REGEX.match(text) if not match: raise ValueError("Invalid format") else: def parse_opt_int(x: str) -> Optional[int]: return None if x == "X" else int(x) pod = match.group(7) return cls( year=parse_opt_int(match.group(1)), month=parse_opt_int(match.group(2)), day=parse_opt_int(match.group(3)), hour=parse_opt_int(match.group(4)), minute=parse_opt_int(match.group(5)), DOW=parse_opt_int(match.group(6)), POD=None if pod == "X" else pod, ) @property def start(self) -> "Time": if self.hour is None and self.hasPOD: hour = pod_hours[self.POD][0] # type: ignore else: hour = self.hour or 0 return Time( year=self.year, month=self.month, day=self.day, hour=hour, minute=self.minute or 0, period=self.period, ) @property def end(self) -> "Time": if self.hour is None and self.hasPOD: hour = pod_hours[self.POD][1] # type: ignore else: hour = self.hour if self.hour is not None else 23 return Time( year=self.year, month=self.month, day=self.day, hour=hour, minute=self.minute if self.minute is not None else 59, period=self.period, ) @property def dt(self) -> datetime: # Use the start time, in case we have a POD specification t = self.start if t.year is None or t.month is None or t.day is None: raise ValueError( "cannot convert underspecified Time into datetime" ", missing at least one of year, month or day" ) return datetime(t.year, t.month, t.day, t.hour or 0, t.minute or 0) class Interval(Artifact): def __init__( self, t_from: Optional[Time] = None, t_to: Optional[Time] = None ) -> None: super().__init__() self._attrs = ["t_from", "t_to"] self.t_from = t_from self.t_to = t_to @property def isTimeInterval(self) -> bool: if self.t_from is None or self.t_to is None: return False else: return self.t_from.isTOD and self.t_to.isTOD @property def isDateInterval(self) -> bool: if self.t_from is None or self.t_to is None: return False return self.t_from.isDate and self.t_to.isDate def __str__(self) -> str: return "{} - {}".format(str(self.t_from), str(self.t_to)) @classmethod def from_str(cls: Type["Interval"], text: str) -> "Interval": bounds = text.split(" - ") if len(bounds) != 2: raise ValueError("Invalid format") t_from = None if bounds[0] == "None" else Time.from_str(bounds[0]) t_to = None if bounds[1] == "None" else Time.from_str(bounds[1]) return cls(t_from=t_from, t_to=t_to) @property def start(self) -> Optional[Time]: if self.t_from is not None: return self.t_from.start else: return None @property def end(self) -> Optional[Time]: if self.t_to is not None: return self.t_to.end else: return None @enum.unique class DurationUnit(enum.Enum): MINUTES = "minutes" HOURS = "hours" DAYS = "days" NIGHTS = "nights" WEEKS = "weeks" MONTHS = "months" YEARS = "years" class Duration(Artifact): def __init__(self, value: int, unit: DurationUnit): """Create a Duration using value and unit. Typical values for unit are: minute, hour, day, night, week, month, year """ super().__init__() self.value = value self.unit = unit def __str__(self) -> str: return "{} {}".format(self.value, self.unit.value) @classmethod def from_str(cls: Type["Duration"], text: str) -> "Duration": value, unit = text.split() return Duration(int(value), DurationUnit(unit)) def time(self, ts: datetime) -> Time: if self.unit == DurationUnit.MINUTES: dm = ts + relativedelta(minutes=+self.value) return Time(year=dm.year, month=dm.month, day=dm.day, hour=dm.hour, minute=dm.minute) if self.unit == DurationUnit.HOURS: dm = ts + relativedelta(hours=+self.value) return Time(year=dm.year, month=dm.month, day=dm.day, hour=dm.hour, minute=dm.minute) if self.unit == DurationUnit.DAYS: dm = ts + relativedelta(days=+self.value) if self.unit == DurationUnit.WEEKS: dm = ts + relativedelta(days=+self.value*7) if self.unit == DurationUnit.MONTHS: dm = ts + relativedelta(months=+self.value) if self.unit == DurationUnit.YEARS: dm = ts + relativedelta(years=+self.value) return Time(year=dm.year, month=dm.month, day=dm.day) @enum.unique class RecurringFrequency(enum.Enum): DAILY = "DAILY" WEEKLY = "WEEKLY" MONTHLY = "MONTHLY" YEARLY = "YEARLY" class Recurring(Artifact): def __init__( self, frequency: Optional[RecurringFrequency] = None, interval: Optional[int] = None, start_time: Optional[Time] = None, end_time: Optional[Time] = None, byday: Optional[tuple[int, ...]] = None, ): super().__init__() self._attrs = ['start_time', 'end_time', 'frequency', 'interval', 'byday'] self.start_time = start_time self.end_time = end_time self.frequency = frequency self.interval = interval self.frequency_map = {RecurringFrequency.DAILY.value: DAILY, RecurringFrequency.WEEKLY.value: WEEKLY, RecurringFrequency.MONTHLY.value: MONTHLY, RecurringFrequency.YEARLY.value: YEARLY} self.byday = byday def __str__(self) -> str: return "{} {} {} {}".format(self.frequency, self.interval, self.start_time, self.end_time, self.byday) @property def isRecurring(self) -> bool: if self.frequency and self.interval is None: return False else: return True @property def isRecurringDOW(self) -> bool: if not self.start_time.DOW: return False else: return True @property def isRecurringTime(self) -> bool: if not self.start_time.hasTime: return False else: return True def to_rrule(self) -> rrule: r_rule = rrule(freq=self.frequency_map[self.frequency], interval=self.interval, byweekday=self.byday) r_rule = r_rule.__str__().split('\n')[1] return r_rule class RecurringArray(Artifact): def __init__(self, rec_1: Optional[Recurring] = None, rec_2: Optional[Recurring] = None, rec_3: Optional[Recurring] = None, rec_4: Optional[Recurring] = None, rec_5: Optional[Recurring] = None, ): super().__init__() self._attrs = ['rec_1', 'rec_2', 'rec_3', 'rec_4', 'rec_5'] self.rec_1 = rec_1 self.rec_2 = rec_2 self.rec_3 = rec_3 self.rec_4 = rec_4 self.rec_5 = rec_5 def __str__(self) -> str: return "\n Recurring instance: {} \n Recurring instance: {} \n Recurring instance: {} \n Recurring instance: {} \n Recurring instance: {}".format(self.rec_1, self.rec_2, self.rec_3, self.rec_4, self.rec_5) @property def to_list(self) -> list: array = [self.rec_1, self.rec_2, self.rec_3, self.rec_4, self.rec_5] array = [i for i in array if i != None] return array ================================================ FILE: datasets/README.rst ================================================ ================== Time Parse Dataset ================== The dataset included in ``datasets/timeparse_corpus.json`` contains a set of ~2000 human annotated time expression in english and german. The dataset is a list of json records with the following fields: - *text*: the text for the time expression - *ref_time*: a timestamp in ISO 8601 format ``YYYY-MM-DDTHH:MM:SS`` - *gold_parse*: the human annotation of the time expression. It can be a ``Time`` or ``Interval``. - *language*: a two-digit code indicating the language. In this dataset it is either "en" or "de". For ``Time``, the format is as follows:: Time[]{YYYY-MM-DD HH:MM (dow/tod)} Where: - ``YYYY`` is a four-digit year or ``X``, if year is missing - ``MM`` is a two-digit month or ``X``, if month is missing - ``DD`` is a two-digit day or ``X``, if day is missing - ``HH`` is a two-digit hour (24 hour clock) or ``X``, if hour is missing - ``MM`` is a two-digit minute or ``X``, if minute is missing - ``dow`` is an integer between 0 and 6 representing day of week or X, if missing (in the dataset, day of week is always missing) - ``tod`` is a string representing the time of day (such as earlymorning, morning, forenoon, noon, afternoon, evening, lateevening) or X if not specified. Example:: Morning of the 11th June 2017 Time[]{2017-06-11 X:X (X/morning)} For ``Interval`` the format is as follows:: Interval[]{ - } Where ```` and ```` are the beginning and end of the interval. ```` or ```` can be None if the interval is open-ended. They can be specified using the same representation for times, as described above:: YYYY-MM-DD HH:MM (dow/tod) Example:: Wed, Oct 11 2017 8:30 PM - 9:47 PM Interval[]{2017-10-11 08:30 (X/X) - 2017-10-11 09:47 (X/X)} ================================================ FILE: datasets/timeparse_corpus.json ================================================ [ { "text": "Donnerstag, den 05.10. ca 6:55", "ref_time": "2017-09-25T16:06:55", "gold_parse": "Time[]{2017-10-05 06:55 (X/X)}", "language": "de" }, { "text": "22.05.2017 früh", "ref_time": "2017-05-16T05:42:09", "gold_parse": "Time[]{2017-05-22 X:X (X/earlymorning)}", "language": "de" }, { "text": "19.7", "ref_time": "2017-07-11T20:21:25", "gold_parse": "Time[]{2017-07-19 X:X (X/X)}", "language": "de" }, { "text": "04.07.2017 19:55 Uhr", "ref_time": "2017-06-29T09:19:38", "gold_parse": "Time[]{2017-07-04 19:55 (X/X)}", "language": "de" }, { "text": "22.10.2017 ca. ab 19.00 Uhr", "ref_time": "2017-10-13T12:32:36", "gold_parse": "Interval[]{2017-10-22 19:00 (X/X) - None}", "language": "de" }, { "text": "one night", "ref_time": "2017-10-03T14:30:35", "gold_parse": "Duration[]{1 nights}", "language": "en" }, { "text": "vom 21 auf 22 November", "ref_time": "2017-11-13T07:36:19", "gold_parse": "Interval[]{2017-11-21 X:X (X/X) - 2017-11-22 X:X (X/X)}", "language": "de" }, { "text": "Fr, 23.6. möglichst spät", "ref_time": "2017-05-29T15:36:03", "gold_parse": "Time[]{2017-06-23 X:X (X/lateevening)}", "language": "de" }, { "text": "Heute", "ref_time": "2017-08-16T14:01:23", "gold_parse": "Time[]{2017-08-16 X:X (X/X)}", "language": "de" }, { "text": "Sonntag dieser Woche", "ref_time": "2017-05-16T14:22:31", "gold_parse": "Time[]{2017-05-21 X:X (X/X)}", "language": "de" }, { "text": "25.07.", "ref_time": "2017-06-28T11:51:53", "gold_parse": "Time[]{2017-07-25 X:X (X/X)}", "language": "de" }, { "text": "12 September - Late evening", "ref_time": "2017-09-01T08:44:52", "gold_parse": "Time[]{2017-09-12 X:X (X/lateevening)}", "language": "en" }, { "text": "am 22.05.", "ref_time": "2017-05-16T08:24:16", "gold_parse": "Time[]{2017-05-22 X:X (X/X)}", "language": "de" }, { "text": "Montag 3.7.2017 11:55", "ref_time": "2017-06-23T12:37:04", "gold_parse": "Time[]{2017-07-03 11:55 (X/X)}", "language": "de" }, { "text": "31.01.2018 12:00 Uhr", "ref_time": "2017-09-27T09:37:06", "gold_parse": "Time[]{2018-01-31 12:00 (X/X)}", "language": "de" }, { "text": "am 14.November 2017", "ref_time": "2017-09-07T12:57:04", "gold_parse": "Time[]{2017-11-14 X:X (X/X)}", "language": "de" }, { "text": "11. auf 12.", "ref_time": "2017-06-28T15:41:46", "gold_parse": "Interval[]{2017-07-11 X:X (X/X) - 2017-07-12 X:X (X/X)}", "language": "de" }, { "text": "heute 17:48h", "ref_time": "2017-09-14T12:25:47", "gold_parse": "Time[]{2017-09-14 17:48 (X/X)}", "language": "de" }, { "text": "Dienstag, 31.10.2017 08:30", "ref_time": "2017-10-26T11:53:15", "gold_parse": "Time[]{2017-10-31 08:30 (X/X)}", "language": "de" }, { "text": "16.05.2017", "ref_time": "2017-05-11T06:19:21", "gold_parse": "Time[]{2017-05-16 X:X (X/X)}", "language": "de" }, { "text": "20.11.2017 morgens 10 Uhr", "ref_time": "2017-10-26T07:42:36", "gold_parse": "Interval[]{None - 2017-11-20 10:00 (X/X)}", "language": "de" }, { "text": "Mittwoch, 11.10. so spät wie möglich", "ref_time": "2017-10-07T07:29:09", "gold_parse": "Time[]{2017-10-11 X:X (X/last)}", "language": "de" }, { "text": "02.08. 1845-1955", "ref_time": "2017-07-28T09:54:12", "gold_parse": "Interval[]{2017-08-02 18:45 (X/X) - 2017-08-02 19:55 (X/X)}", "language": "de" }, { "text": "08.07", "ref_time": "2017-06-14T10:15:04", "gold_parse": "Time[]{2017-07-08 X:X (X/X)}", "language": "de" }, { "text": "14-12-2017", "ref_time": "2017-11-22T13:00:06", "gold_parse": "Time[]{2017-12-14 X:X (X/X)}", "language": "de" }, { "text": "08.09.2017 gegen 6:30 Uhr", "ref_time": "2017-07-27T09:41:10", "gold_parse": "Time[]{2017-09-08 06:30 (X/X)}", "language": "de" }, { "text": "01.06.", "ref_time": "2017-05-30T16:58:00", "gold_parse": "Time[]{2017-06-01 X:X (X/X)}", "language": "de" }, { "text": "13.06.2017 10:40 Uhr", "ref_time": "2017-05-31T10:57:42", "gold_parse": "Time[]{2017-06-13 10:40 (X/X)}", "language": "de" }, { "text": "morgen 11:57", "ref_time": "2017-11-05T09:26:19", "gold_parse": "Time[]{2017-11-06 11:57 (X/X)}", "language": "de" }, { "text": "diesen Donnerstag, 21.09. 08:30 Uhr", "ref_time": "2017-09-18T13:35:43", "gold_parse": "Time[]{2017-09-21 08:30 (X/X)}", "language": "de" }, { "text": "Abend", "ref_time": "2017-10-26T09:09:44", "gold_parse": "Time[]{X-X-X X:X (X/evening)}", "language": "de" }, { "text": "Dienstag, den 17.10.2017 05:25 Uhr", "ref_time": "2017-10-12T09:17:36", "gold_parse": "Time[]{2017-10-17 05:25 (X/X)}", "language": "de" }, { "text": "18.09.2017 Morgens", "ref_time": "2017-09-06T12:49:56", "gold_parse": "Time[]{2017-09-18 X:X (X/morning)}", "language": "de" }, { "text": "30.11. Zum 1.12.17", "ref_time": "2017-11-25T18:38:46", "gold_parse": "Interval[]{2017-11-30 X:X (X/X) - 2017-12-01 X:X (X/X)}", "language": "de" }, { "text": "vom 09.08. -10-08", "ref_time": "2017-08-08T06:44:11", "gold_parse": "Interval[]{2017-08-09 X:X (X/X) - 2017-08-10 X:X (X/X)}", "language": "de" }, { "text": "11.9.", "ref_time": "2017-09-09T05:50:20", "gold_parse": "Time[]{2017-09-11 X:X (X/X)}", "language": "en" }, { "text": "01.12. morgens ab 8:00", "ref_time": "2017-11-01T13:40:52", "gold_parse": "Interval[]{2017-12-01 08:00 (X/X) - None}", "language": "de" }, { "text": "27.09.", "ref_time": "2017-09-21T04:44:34", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "Thursday 14th December approximately 17.30.", "ref_time": "2017-11-07T10:45:50", "gold_parse": "Time[]{2017-12-14 17:30 (X/X)}", "language": "en" }, { "text": "Mittwoch, den 20.09.", "ref_time": "2017-09-13T11:21:39", "gold_parse": "Time[]{2017-09-20 X:X (X/X)}", "language": "de" }, { "text": "am 09.11. zwischen 19 und 20 Uhr", "ref_time": "2017-10-09T11:31:36", "gold_parse": "Interval[]{2017-11-09 19:00 (X/X) - 2017-11-09 20:00 (X/X)}", "language": "de" }, { "text": "24. Mai ca. 17.15 Uhr", "ref_time": "2017-05-19T09:14:39", "gold_parse": "Time[]{2017-05-24 17:15 (X/X)}", "language": "de" }, { "text": "MO 3.7.17 8:30h", "ref_time": "2017-06-30T14:46:33", "gold_parse": "Time[]{2017-07-03 08:30 (X/X)}", "language": "de" }, { "text": "18.07 abends", "ref_time": "2017-07-14T16:17:39", "gold_parse": "Time[]{2017-07-18 X:X (X/evening)}", "language": "de" }, { "text": "Dienstag 20.06.207 19:05 Uhr", "ref_time": "2017-05-29T06:51:19", "gold_parse": "Time[]{2017-06-20 19:05 (X/X)}", "language": "de" }, { "text": "am 28.9. ab 20 Uhr", "ref_time": "2017-07-03T10:29:08", "gold_parse": "Interval[]{2017-09-28 20:00 (X/X) - None}", "language": "de" }, { "text": "27. Juni am Abend", "ref_time": "2017-06-01T06:55:32", "gold_parse": "Time[]{2017-06-27 X:X (X/evening)}", "language": "de" }, { "text": "vom 18.07 bis 20.07.", "ref_time": "2017-07-12T13:33:30", "gold_parse": "Interval[]{2017-07-18 X:X (X/X) - 2017-07-20 X:X (X/X)}", "language": "de" }, { "text": "am 27.09.", "ref_time": "2017-09-25T12:21:15", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "am 18.10 um 8:10", "ref_time": "2017-08-03T13:30:21", "gold_parse": "Time[]{2017-10-18 08:10 (X/X)}", "language": "de" }, { "text": "07.09.17 ab 12 Uhr", "ref_time": "2017-08-04T11:00:27", "gold_parse": "Interval[]{2017-09-07 12:00 (X/X) - None}", "language": "de" }, { "text": "29.06. 17-18 Uhr", "ref_time": "2017-06-26T15:33:40", "gold_parse": "Interval[]{2017-06-29 17:00 (X/X) - 2017-06-29 18:00 (X/X)}", "language": "de" }, { "text": "18.07.-19.07.2017", "ref_time": "2017-07-10T10:19:25", "gold_parse": "Interval[]{2017-07-18 X:X (X/X) - 2017-07-19 X:X (X/X)}", "language": "de" }, { "text": "Mo, 20.11. ca. 18.00Uhr", "ref_time": "2017-11-19T04:44:14", "gold_parse": "Time[]{2017-11-20 18:00 (X/X)}", "language": "de" }, { "text": "morgen abends", "ref_time": "2017-09-27T06:34:18", "gold_parse": "Time[]{2017-09-28 X:X (X/evening)}", "language": "de" }, { "text": "26.9. around 17:00", "ref_time": "2017-09-19T10:21:58", "gold_parse": "Time[]{2017-09-26 17:00 (X/X)}", "language": "en" }, { "text": "25 JUL abends", "ref_time": "2017-06-19T07:21:09", "gold_parse": "Time[]{2017-07-25 X:X (X/evening)}", "language": "de" }, { "text": "18.10.2017 ab 16:00 Uhr", "ref_time": "2017-10-12T08:35:51", "gold_parse": "Interval[]{2017-10-18 16:00 (X/X) - None}", "language": "de" }, { "text": "18.06.2017 00:05", "ref_time": "2017-06-16T08:10:07", "gold_parse": "Time[]{2017-06-18 00:05 (X/X)}", "language": "de" }, { "text": "18.09. - 20.09.2017", "ref_time": "2017-08-08T08:39:00", "gold_parse": "Interval[]{2017-09-18 X:X (X/X) - 2017-09-20 X:X (X/X)}", "language": "de" }, { "text": "on the 05.12.2017", "ref_time": "2017-11-28T14:21:23", "gold_parse": "Time[]{2017-12-05 X:X (X/X)}", "language": "en" }, { "text": "26.09.2017 ab 16:00 Uhr", "ref_time": "2017-09-26T05:41:05", "gold_parse": "Interval[]{2017-09-26 16:00 (X/X) - None}", "language": "de" }, { "text": "vom 22. - 23.09.", "ref_time": "2017-09-11T08:02:20", "gold_parse": "Interval[]{2017-09-22 X:X (X/X) - 2017-09-23 X:X (X/X)}", "language": "de" }, { "text": "06.10.17", "ref_time": "2017-10-05T06:37:28", "gold_parse": "Time[]{2017-10-06 X:X (X/X)}", "language": "de" }, { "text": "von Montag, den 06.11.2017 (Anreise ca. 19.00 Uhr) bis Mittwoch, den 08.11.2017", "ref_time": "2017-11-03T11:58:59", "gold_parse": "Interval[]{2017-11-06 19:00 (X/X) - 2017-11-08 X:X (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-10-22T15:09:22", "gold_parse": "Time[]{2017-10-22 X:X (X/X)}", "language": "de" }, { "text": "Monday 03.07 to Thursday 06.07", "ref_time": "2017-07-02T13:06:59", "gold_parse": "Interval[]{2017-07-03 X:X (X/X) - 2017-07-06 X:X (X/X)}", "language": "en" }, { "text": "31.05.17", "ref_time": "2017-05-17T06:37:40", "gold_parse": "Time[]{2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "July 30", "ref_time": "2017-07-21T15:13:21", "gold_parse": "Time[]{2017-07-30 X:X (X/X)}", "language": "en" }, { "text": "Donnerstag", "ref_time": "2017-07-10T11:47:37", "gold_parse": "Time[]{2017-07-13 X:X (X/X)}", "language": "de" }, { "text": "am 05.07.", "ref_time": "2017-06-27T08:05:03", "gold_parse": "Time[]{2017-07-05 X:X (X/X)}", "language": "de" }, { "text": "von 22.11.17 - 23.11.17", "ref_time": "2017-11-20T13:56:52", "gold_parse": "Interval[]{2017-11-22 X:X (X/X) - 2017-11-23 X:X (X/X)}", "language": "de" }, { "text": "02.12. um 14:45h", "ref_time": "2017-11-09T08:12:33", "gold_parse": "Time[]{2017-12-02 14:45 (X/X)}", "language": "de" }, { "text": "05.10.17 nicht vor 19.00 Uhr", "ref_time": "2017-07-21T12:43:29", "gold_parse": "Interval[]{2017-10-05 19:00 (X/X) - None}", "language": "de" }, { "text": "12.-17. Dezember", "ref_time": "2017-09-28T08:50:55", "gold_parse": "Interval[]{2017-12-12 X:X (X/X) - 2017-12-17 X:X (X/X)}", "language": "de" }, { "text": "31/08 0935-1101", "ref_time": "2017-08-11T06:26:42", "gold_parse": "Interval[]{2017-08-31 09:35 (X/X) - 2017-08-31 11:01 (X/X)}", "language": "en" }, { "text": "23. November 2017 spätestens 15 Uhr", "ref_time": "2017-11-15T09:01:57", "gold_parse": "Interval[]{None - 2017-11-23 15:00 (X/X)}", "language": "de" }, { "text": "morgen abend", "ref_time": "2017-08-24T09:54:37", "gold_parse": "Time[]{2017-08-25 X:X (X/evening)}", "language": "de" }, { "text": "Freitag den 14.07. um 19:40", "ref_time": "2017-07-10T07:50:28", "gold_parse": "Time[]{2017-07-14 19:40 (X/X)}", "language": "de" }, { "text": "05.09.2017 später", "ref_time": "2017-07-05T06:04:05", "gold_parse": "Interval[]{2017-09-05 16:10 (X/X) - None}", "language": "de" }, { "text": "Thursday 20/10/2017", "ref_time": "2017-09-11T11:23:21", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "en" }, { "text": "25.", "ref_time": "2017-07-07T21:05:34", "gold_parse": "Time[]{2017-07-25 X:X (X/X)}", "language": "en" }, { "text": "13.10. um 18.30 Uhr", "ref_time": "2017-09-13T18:01:01", "gold_parse": "Time[]{2017-10-13 18:30 (X/X)}", "language": "de" }, { "text": "20.11.2017 Ab 15:31 Uhr", "ref_time": "2017-11-13T14:19:38", "gold_parse": "Time[]{2017-11-20 15:31 (X/X)}", "language": "de" }, { "text": "28.10.", "ref_time": "2017-08-11T11:40:43", "gold_parse": "Time[]{2017-10-28 X:X (X/X)}", "language": "de" }, { "text": "05.07.17", "ref_time": "2017-06-28T13:35:30", "gold_parse": "Time[]{2017-07-05 X:X (X/X)}", "language": "de" }, { "text": "16.12", "ref_time": "2017-11-29T15:07:33", "gold_parse": "Time[]{2017-12-16 X:X (X/X)}", "language": "en" }, { "text": "18.-21.12.", "ref_time": "2017-09-01T13:05:27", "gold_parse": "Interval[]{2017-12-18 X:X (X/X) - 2017-12-21 X:X (X/X)}", "language": "de" }, { "text": "next Tuesday lunchtime", "ref_time": "2017-05-30T13:10:19", "gold_parse": "Time[]{2017-06-06 X:X (X/noon)}", "language": "en" }, { "text": "Samstag 10ter Juni", "ref_time": "2017-05-19T12:36:53", "gold_parse": "Time[]{2017-06-10 X:X (X/X)}", "language": "de" }, { "text": "12.06.", "ref_time": "2017-06-02T12:06:48", "gold_parse": "Time[]{2017-06-12 X:X (X/X)}", "language": "de" }, { "text": "24.09.2017", "ref_time": "2017-09-22T10:59:04", "gold_parse": "Time[]{2017-09-24 X:X (X/X)}", "language": "de" }, { "text": "2. Dez. 2017 15:40", "ref_time": "2017-10-24T12:51:01", "gold_parse": "Time[]{2017-12-02 15:40 (X/X)}", "language": "de" }, { "text": "am 22.08.2017 um 21:30", "ref_time": "2017-08-16T14:29:54", "gold_parse": "Time[]{2017-08-22 21:30 (X/X)}", "language": "de" }, { "text": "31.05", "ref_time": "2017-05-23T12:10:55", "gold_parse": "Time[]{2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch, 16. August ab 15:00 Uhr", "ref_time": "2017-08-08T13:16:00", "gold_parse": "Interval[]{2017-08-16 15:00 (X/X) - None}", "language": "de" }, { "text": "am Freitag, 15. Dezember 14:00", "ref_time": "2017-11-29T13:25:29", "gold_parse": "Time[]{2017-12-15 14:00 (X/X)}", "language": "de" }, { "text": "So., 24. Sep. 06:45 - 08:00", "ref_time": "2017-09-06T07:36:39", "gold_parse": "Interval[]{2017-09-24 06:45 (X/X) - 2017-09-24 08:00 (X/X)}", "language": "de" }, { "text": "05.12.2017 7:15am", "ref_time": "2017-11-24T14:27:51", "gold_parse": "Time[]{2017-12-05 07:15 (X/X)}", "language": "de" }, { "text": "29.11. ca. 18.00 h", "ref_time": "2017-11-07T10:30:09", "gold_parse": "Time[]{2017-11-29 18:00 (X/X)}", "language": "de" }, { "text": "Fri 19 May 18:40 - 19:55", "ref_time": "2017-05-11T17:16:49", "gold_parse": "Interval[]{2017-05-19 18:40 (X/X) - 2017-05-19 19:55 (X/X)}", "language": "en" }, { "text": "15.10 - 16.10", "ref_time": "2017-10-11T08:04:38", "gold_parse": "Interval[]{2017-10-15 X:X (X/X) - 2017-10-16 X:X (X/X)}", "language": "en" }, { "text": "21.10", "ref_time": "2017-10-04T10:56:41", "gold_parse": "Time[]{2017-10-21 X:X (X/X)}", "language": "de" }, { "text": "28.09. 09:05 - 09:50", "ref_time": "2017-09-06T16:07:18", "gold_parse": "Interval[]{2017-09-28 09:05 (X/X) - 2017-09-28 09:50 (X/X)}", "language": "de" }, { "text": "17.07.2017", "ref_time": "2017-07-10T10:10:11", "gold_parse": "Time[]{2017-07-17 X:X (X/X)}", "language": "de" }, { "text": "am 04.10.2017 um 20:50", "ref_time": "2017-09-26T07:22:23", "gold_parse": "Time[]{2017-10-04 20:50 (X/X)}", "language": "de" }, { "text": "morgen", "ref_time": "2017-06-02T18:29:51", "gold_parse": "Time[]{2017-06-03 X:X (X/X)}", "language": "de" }, { "text": "on 04.09 at 9h15", "ref_time": "2017-08-20T16:08:20", "gold_parse": "Time[]{2017-09-04 09:15 (X/X)}", "language": "en" }, { "text": "am 27.9. morgens gg 9", "ref_time": "2017-08-23T09:40:37", "gold_parse": "Time[]{2017-09-27 09:00 (X/X)}", "language": "de" }, { "text": "next Thrusday in the afternoon around 18 or 19", "ref_time": "2017-11-22T09:12:41", "gold_parse": "Interval[]{2017-11-30 18:00 (X/X) - 2017-11-30 19:00 (X/X)}", "language": "en" }, { "text": "am 08.12. vormittags ab ca. 11 Uhr", "ref_time": "2017-11-08T20:33:04", "gold_parse": "Interval[]{2017-12-08 11:00 (X/X) - None}", "language": "de" }, { "text": "Oct 27, 2017 at 1540-1030", "ref_time": "2017-07-09T12:25:02", "gold_parse": "Interval[]{2017-10-27 15:40 (X/X) - 2017-10-28 10:30 (X/X)}", "language": "de" }, { "text": "16.10., gegen 9h", "ref_time": "2017-08-31T10:54:18", "gold_parse": "Time[]{2017-10-16 09:00 (X/X)}", "language": "de" }, { "text": "20.06.2017", "ref_time": "2017-06-19T21:28:12", "gold_parse": "Time[]{2017-06-20 X:X (X/X)}", "language": "de" }, { "text": "vom 21. auf 22. eine Nacht", "ref_time": "2017-11-15T05:49:48", "gold_parse": "Interval[]{2017-11-21 X:X (X/X) - 2017-11-22 X:X (X/X)}", "language": "de" }, { "text": "30.11.2017 14:27 Uhr", "ref_time": "2017-11-08T11:10:34", "gold_parse": "Time[]{2017-11-30 14:27 (X/X)}", "language": "de" }, { "text": "26.07.2017 morgens 06:35h", "ref_time": "2017-07-18T08:04:42", "gold_parse": "Time[]{2017-07-26 06:35 (X/X)}", "language": "de" }, { "text": "am 29.11.", "ref_time": "2017-09-25T15:59:52", "gold_parse": "Time[]{2017-11-29 X:X (X/X)}", "language": "de" }, { "text": "10.10.2017 Morgens", "ref_time": "2017-09-19T10:11:55", "gold_parse": "Time[]{2017-10-10 X:X (X/morning)}", "language": "de" }, { "text": "on June 16th at 08.00", "ref_time": "2017-06-13T14:35:43", "gold_parse": "Time[]{2017-06-16 08:00 (X/X)}", "language": "en" }, { "text": "20.10.2017 Nachmittags", "ref_time": "2017-10-18T14:58:09", "gold_parse": "Time[]{2017-10-20 X:X (X/afternoon)}", "language": "de" }, { "text": "heute bis 14:00 Uhr", "ref_time": "2017-09-07T07:10:59", "gold_parse": "Interval[]{2017-09-07 08:00 (X/X) - 2017-09-07 14:00 (X/X)}", "language": "de" }, { "text": "02.12. um 14:45h", "ref_time": "2017-10-23T08:36:51", "gold_parse": "Time[]{2017-12-02 14:45 (X/X)}", "language": "de" }, { "text": "Mon, Sep 18 3:25 PM - 11:55 PM", "ref_time": "2017-09-06T08:31:37", "gold_parse": "Interval[]{2017-09-18 15:25 (X/X) - 2017-09-18 23:55 (X/X)}", "language": "en" }, { "text": "am Sonntag, den 14.05.17 23:14 Uhr", "ref_time": "2017-05-09T13:37:24", "gold_parse": "Time[]{2017-05-14 23:14 (X/X)}", "language": "de" }, { "text": "Kalenderwoche 32", "ref_time": "2017-07-24T23:46:36", "gold_parse": "Interval[]{2017-08-07 X:X (X/X) - 2017-08-13 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag 25.05.17 frühmorgens", "ref_time": "2017-05-15T07:47:37", "gold_parse": "Time[]{2017-05-25 X:X (X/earlymorning)}", "language": "de" }, { "text": "18.11 11:20", "ref_time": "2017-11-16T18:17:55", "gold_parse": "Time[]{2017-11-18 11:20 (X/X)}", "language": "de" }, { "text": "26. November 2017 ab 19.00 Uhr", "ref_time": "2017-11-09T10:58:13", "gold_parse": "Interval[]{2017-11-26 19:00 (X/X) - None}", "language": "de" }, { "text": "10.11.2017 at around 12:30", "ref_time": "2017-11-02T07:39:31", "gold_parse": "Time[]{2017-11-10 12:30 (X/X)}", "language": "en" }, { "text": "Morgen, 21.07.2017 15:13 Uhr", "ref_time": "2017-07-20T09:25:11", "gold_parse": "Time[]{2017-07-21 15:13 (X/X)}", "language": "de" }, { "text": "27.06 18:14", "ref_time": "2017-05-23T07:49:54", "gold_parse": "Time[]{2017-06-27 18:14 (X/X)}", "language": "de" }, { "text": "am 02.12. um 15:30 Uhr", "ref_time": "2017-11-09T09:37:56", "gold_parse": "Time[]{2017-12-02 15:30 (X/X)}", "language": "de" }, { "text": "23.11.2017", "ref_time": "2017-11-21T09:26:50", "gold_parse": "Time[]{2017-11-23 X:X (X/X)}", "language": "de" }, { "text": "night 13-14.6.", "ref_time": "2017-05-29T13:51:49", "gold_parse": "Interval[]{2017-06-13 X:X (X/X) - 2017-06-14 X:X (X/X)}", "language": "en" }, { "text": "am 14.9 gegen 20 Uhr", "ref_time": "2017-08-29T08:57:54", "gold_parse": "Time[]{2017-09-14 20:00 (X/X)}", "language": "de" }, { "text": "29.05. ab 07:00 Uhr", "ref_time": "2017-05-24T08:34:28", "gold_parse": "Interval[]{2017-05-29 07:00 (X/X) - None}", "language": "de" }, { "text": "17.11. um 21:00 h", "ref_time": "2017-10-18T13:12:28", "gold_parse": "Time[]{2017-11-17 21:00 (X/X)}", "language": "de" }, { "text": "20 october", "ref_time": "2017-10-19T08:47:39", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "en" }, { "text": "27.6.2017 um 10:00 Uhr", "ref_time": "2017-06-08T09:22:34", "gold_parse": "Time[]{2017-06-27 10:00 (X/X)}", "language": "de" }, { "text": "Mittwoch, 30.08.2017 9:23 Uhr", "ref_time": "2017-08-28T05:24:12", "gold_parse": "Time[]{2017-08-30 09:23 (X/X)}", "language": "de" }, { "text": "am Sonntag 10.09", "ref_time": "2017-09-08T11:38:44", "gold_parse": "Time[]{2017-09-10 X:X (X/X)}", "language": "de" }, { "text": "01.08.17 ab 14 Uhr", "ref_time": "2017-07-10T08:11:14", "gold_parse": "Interval[]{2017-08-01 14:00 (X/X) - None}", "language": "de" }, { "text": "Thu Nov 16 1:50 PM", "ref_time": "2017-11-08T13:05:30", "gold_parse": "Time[]{2017-11-16 13:50 (X/X)}", "language": "de" }, { "text": "19.09 10:45", "ref_time": "2017-08-17T07:31:24", "gold_parse": "Time[]{2017-09-19 10:45 (X/X)}", "language": "de" }, { "text": "28.6. 18:15h", "ref_time": "2017-06-27T08:53:42", "gold_parse": "Time[]{2017-06-28 18:15 (X/X)}", "language": "de" }, { "text": "am 18.9.2017", "ref_time": "2017-09-07T07:08:57", "gold_parse": "Time[]{2017-09-18 X:X (X/X)}", "language": "de" }, { "text": "Dienstag, den 17.10.2017 20:33 Uhr", "ref_time": "2017-10-12T09:17:36", "gold_parse": "Time[]{2017-10-17 20:33 (X/X)}", "language": "de" }, { "text": "23", "ref_time": "2017-06-24T10:52:58", "gold_parse": "Time[]{2017-08-23 X:X (X/X)}", "language": "de" }, { "text": "20.11.", "ref_time": "2017-07-21T08:27:42", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "de" }, { "text": "From Wed to Fri this week 2330", "ref_time": "2017-11-29T12:13:58", "gold_parse": "Time[]{2017-11-29 23:30 (X/X)}", "language": "en" }, { "text": "31.01.2018 12:00 Uhr", "ref_time": "2017-09-27T09:37:06", "gold_parse": "Time[]{2018-01-31 12:00 (X/X)}", "language": "de" }, { "text": "Freitag 25.08. 13:02 Uhr", "ref_time": "2017-08-21T09:26:59", "gold_parse": "Time[]{2017-08-25 13:02 (X/X)}", "language": "de" }, { "text": "22.09. 14:47 Uhr", "ref_time": "2017-09-04T13:08:44", "gold_parse": "Time[]{2017-09-22 14:47 (X/X)}", "language": "de" }, { "text": "vom 14.-15.06.", "ref_time": "2017-06-07T08:36:04", "gold_parse": "Interval[]{2017-06-14 X:X (X/X) - 2017-06-15 X:X (X/X)}", "language": "de" }, { "text": "abends am 19.07.2017", "ref_time": "2017-06-29T12:24:38", "gold_parse": "Time[]{2017-07-19 X:X (X/evening)}", "language": "de" }, { "text": "Freitag, 4.8. um 10:00h", "ref_time": "2017-07-27T13:08:56", "gold_parse": "Time[]{2017-08-04 10:00 (X/X)}", "language": "de" }, { "text": "20.9. ab 20:30", "ref_time": "2017-09-14T10:30:10", "gold_parse": "Interval[]{2017-09-20 20:30 (X/X) - None}", "language": "de" }, { "text": "am 18.07. so früh wie möglich", "ref_time": "2017-07-03T06:23:53", "gold_parse": "Time[]{2017-07-18 X:X (X/earlymorning)}", "language": "de" }, { "text": "12.7. ab 18 Uhr", "ref_time": "2017-06-28T15:41:46", "gold_parse": "Time[]{2017-07-12 18:00 (X/X)}", "language": "de" }, { "text": "Donnerstag, 01.06.2017 um 10:15 Uhr bis 11:20 Uhr", "ref_time": "2017-05-24T12:15:15", "gold_parse": "Interval[]{2017-06-01 10:15 (X/X) - 2017-06-01 11:20 (X/X)}", "language": "de" }, { "text": "the 9th of October evening", "ref_time": "2017-09-24T12:50:45", "gold_parse": "Time[]{2017-10-09 X:X (X/evening)}", "language": "en" }, { "text": "24.8. Monday 10.00", "ref_time": "2017-07-02T10:36:06", "gold_parse": "Time[]{2017-08-24 10:00 (X/X)}", "language": "en" }, { "text": "06.12.17", "ref_time": "2017-11-14T10:55:56", "gold_parse": "Time[]{2017-12-06 X:X (X/X)}", "language": "de" }, { "text": "Freitag, 10. November gegen 18 Uhr", "ref_time": "2017-11-07T09:15:37", "gold_parse": "Time[]{2017-11-10 18:00 (X/X)}", "language": "de" }, { "text": "07.06.2017 frühestmöglich", "ref_time": "2017-05-24T12:05:12", "gold_parse": "Time[]{2017-06-07 X:X (X/first)}", "language": "de" }, { "text": "08.07. früher Nachmittag", "ref_time": "2017-07-03T18:47:58", "gold_parse": "Time[]{2017-07-08 X:X (X/earlyafternoon)}", "language": "de" }, { "text": "am 8.11. um 9 Uhr ca", "ref_time": "2017-10-02T04:40:50", "gold_parse": "Time[]{2017-11-08 09:00 (X/X)}", "language": "de" }, { "text": "Freitag, den 30.6. um 16:00 Uhr", "ref_time": "2017-06-27T13:45:30", "gold_parse": "Time[]{2017-06-30 16:00 (X/X)}", "language": "de" }, { "text": "10.06.", "ref_time": "2017-06-08T18:42:47", "gold_parse": "Time[]{2017-06-10 X:X (X/X)}", "language": "de" }, { "text": "26.01.1o sa gegen 16:30", "ref_time": "2017-11-18T13:06:26", "gold_parse": "Time[]{2018-01-26 16:30 (X/X)}", "language": "en" }, { "text": "am 20.09., 18:30 Uhr", "ref_time": "2017-09-12T15:11:14", "gold_parse": "Time[]{2017-09-20 18:30 (X/X)}", "language": "de" }, { "text": "31.9 around 0720", "ref_time": "2017-08-25T13:44:00", "gold_parse": "Time[]{2017-10-01 07:20 (X/X)}", "language": "en" }, { "text": "24.10.2017 09:27 - 10:16 Uhr", "ref_time": "2017-10-23T13:50:24", "gold_parse": "Interval[]{2017-10-24 09:27 (X/X) - 2017-10-24 10:16 (X/X)}", "language": "de" }, { "text": "24.11.17", "ref_time": "2017-10-26T09:13:13", "gold_parse": "Time[]{2017-11-24 X:X (X/X)}", "language": "en" }, { "text": "26.06. 16:00 Uhr bis 17:10 Uhr", "ref_time": "2017-06-21T14:54:38", "gold_parse": "Interval[]{2017-06-26 16:00 (X/X) - 2017-06-26 17:10 (X/X)}", "language": "de" }, { "text": "next Friday 6/9 around 170", "ref_time": "2017-05-31T11:23:55", "gold_parse": "Time[]{2017-06-09 17:00 (X/X)}", "language": "en" }, { "text": "23.08. 19- 20 Uhr", "ref_time": "2017-08-18T11:04:16", "gold_parse": "Interval[]{2017-08-23 19:00 (X/X) - 2017-08-23 20:00 (X/X)}", "language": "de" }, { "text": "4.9. späteste", "ref_time": "2017-08-17T07:58:33", "gold_parse": "Time[]{2017-09-04 X:X (X/last)}", "language": "de" }, { "text": "12 Nov 1115", "ref_time": "2017-08-25T12:15:35", "gold_parse": "Time[]{2017-11-13 11:15 (X/X)}", "language": "en" }, { "text": "18.10.2017 6:00 Uhr", "ref_time": "2017-10-12T08:35:51", "gold_parse": "Time[]{2017-10-18 06:00 (X/X)}", "language": "de" }, { "text": "evening", "ref_time": "2017-10-02T12:57:20", "gold_parse": "Time[]{X-X-X X:X (X/evening)}", "language": "en" }, { "text": "10:40 - 11:50 am Dienstag 3.12.", "ref_time": "2017-11-28T08:15:24", "gold_parse": "Interval[]{2017-12-03 10:40 (X/X) - 2017-12-03 11:50 (X/X)}", "language": "de" }, { "text": "Do, 01.06.2017, 07:25", "ref_time": "2017-05-31T14:11:10", "gold_parse": "Time[]{2017-06-01 07:25 (X/X)}", "language": "de" }, { "text": "am 08.08.2017 um 06.35 Uhr", "ref_time": "2017-07-28T07:17:26", "gold_parse": "Time[]{2017-08-08 06:35 (X/X)}", "language": "de" }, { "text": "Monday 11th December by late afternoon early evening", "ref_time": "2017-11-07T10:45:50", "gold_parse": "Interval[]{2017-12-11 X:X (X/lateafternoon) - 2017-12-11 X:X (X/earlyevening)}", "language": "en" }, { "text": "Dienstag 11.07. um 19:30", "ref_time": "2017-07-05T10:25:11", "gold_parse": "Time[]{2017-07-11 19:30 (X/X)}", "language": "de" }, { "text": "from 24th - 26th June", "ref_time": "2017-06-21T14:11:13", "gold_parse": "Interval[]{2017-06-24 X:X (X/X) - 2017-06-26 X:X (X/X)}", "language": "en" }, { "text": "Friday 27th of October", "ref_time": "2017-08-22T14:54:12", "gold_parse": "Time[]{2017-10-27 X:X (X/X)}", "language": "de" }, { "text": "21.08.2017 17:40", "ref_time": "2017-08-16T13:38:09", "gold_parse": "Time[]{2017-08-21 17:40 (X/X)}", "language": "de" }, { "text": "tomorrow", "ref_time": "2017-07-12T14:41:15", "gold_parse": "Time[]{2017-07-13 X:X (X/X)}", "language": "en" }, { "text": "9:00 Do 13. Jul", "ref_time": "2017-07-05T12:39:59", "gold_parse": "Time[]{2017-07-13 09:00 (X/X)}", "language": "de" }, { "text": "Montag 19.03.2018", "ref_time": "2017-11-16T09:29:29", "gold_parse": "Time[]{2018-03-19 X:X (X/X)}", "language": "de" }, { "text": "vom 23-25.08", "ref_time": "2017-08-21T15:39:02", "gold_parse": "Interval[]{2017-08-23 X:X (X/X) - 2017-08-25 X:X (X/X)}", "language": "de" }, { "text": "Mi, 08.11.2017 10:46", "ref_time": "2017-11-07T10:40:00", "gold_parse": "Time[]{2017-11-08 10:46 (X/X)}", "language": "de" }, { "text": "26.09.17 ab 19:00", "ref_time": "2017-09-08T13:34:03", "gold_parse": "Interval[]{2017-09-26 19:00 (X/X) - None}", "language": "de" }, { "text": "18 Uhr", "ref_time": "2017-05-22T08:34:36", "gold_parse": "Time[]{X-X-X 18:00 (X/X)}", "language": "de" }, { "text": "am 07.12. morgens", "ref_time": "2017-11-30T09:26:45", "gold_parse": "Time[]{2017-12-07 X:X (X/morning)}", "language": "de" }, { "text": "heute", "ref_time": "2017-11-02T12:55:21", "gold_parse": "Time[]{2017-11-02 X:X (X/X)}", "language": "de" }, { "text": "6.12.17", "ref_time": "2017-11-24T11:26:43", "gold_parse": "Time[]{2017-12-06 X:X (X/X)}", "language": "de" }, { "text": "Di, 21.11.17 17:21", "ref_time": "2017-11-16T12:19:19", "gold_parse": "Time[]{2017-11-21 17:21 (X/X)}", "language": "de" }, { "text": "10.11.17 bis 10 Uhr", "ref_time": "2017-11-06T06:02:59", "gold_parse": "Interval[]{None - 2017-11-10 10:00 (X/X)}", "language": "de" }, { "text": "21.06.17 18:45", "ref_time": "2017-06-16T12:40:13", "gold_parse": "Time[]{2017-06-21 18:45 (X/X)}", "language": "de" }, { "text": "Fri Sep 8th 7:00 PM", "ref_time": "2017-08-29T08:43:49", "gold_parse": "Time[]{2017-09-08 19:00 (X/X)}", "language": "en" }, { "text": "Mittwoch, den 27.9. nach 19:30 Uhr", "ref_time": "2017-06-27T12:55:02", "gold_parse": "Interval[]{2017-09-27 19:30 (X/X) - None}", "language": "de" }, { "text": "am Montag, den 14.08.", "ref_time": "2017-08-11T13:32:11", "gold_parse": "Time[]{2017-08-14 X:X (X/X)}", "language": "de" }, { "text": "27.05. 09:25", "ref_time": "2017-05-23T08:47:03", "gold_parse": "Time[]{2017-05-27 09:25 (X/X)}", "language": "de" }, { "text": "09.08.2017, 07:30 Uhr", "ref_time": "2017-08-08T08:09:50", "gold_parse": "Time[]{2017-08-09 07:30 (X/X)}", "language": "de" }, { "text": "13.04. - 15.04.18", "ref_time": "2017-11-28T09:12:01", "gold_parse": "Interval[]{2018-04-13 X:X (X/X) - 2018-04-15 X:X (X/X)}", "language": "de" }, { "text": "Mo, 21.8.17", "ref_time": "2017-07-10T08:20:22", "gold_parse": "Time[]{2017-08-21 X:X (X/X)}", "language": "de" }, { "text": "30.11. um 19:00h", "ref_time": "2017-10-23T13:07:08", "gold_parse": "Time[]{2017-11-30 19:00 (X/X)}", "language": "de" }, { "text": "24.10.17", "ref_time": "2017-08-23T12:59:44", "gold_parse": "Time[]{2017-10-24 X:X (X/X)}", "language": "de" }, { "text": "22.08.", "ref_time": "2017-08-17T07:17:17", "gold_parse": "Time[]{2017-08-22 X:X (X/X)}", "language": "de" }, { "text": "vom 28.11 (14:00) - 30.11 (23:00)", "ref_time": "2017-11-22T13:05:32", "gold_parse": "Interval[]{2017-11-28 14:00 (X/X) - 2017-11-30 23:00 (X/X)}", "language": "de" }, { "text": "6. morgens", "ref_time": "2017-11-29T12:30:19", "gold_parse": "Time[]{2017-12-06 X:X (X/morning)}", "language": "de" }, { "text": "Mittwoch, 13.09., 09:30 Uhr", "ref_time": "2017-09-11T06:38:01", "gold_parse": "Time[]{2017-09-13 09:30 (X/X)}", "language": "de" }, { "text": "22.10.", "ref_time": "2017-10-10T17:20:47", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "de" }, { "text": "am 19.06.2017 17:31 Uhr", "ref_time": "2017-06-14T08:00:48", "gold_parse": "Time[]{2017-06-19 17:31 (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-07-17T18:01:16", "gold_parse": "Time[]{2017-07-17 X:X (X/X)}", "language": "de" }, { "text": "Mon, Dec 11 6:40 PM - 8:20 PM", "ref_time": "2017-11-24T11:13:34", "gold_parse": "Interval[]{2017-12-11 18:49 (X/X) - 2017-12-11 20:20 (X/X)}", "language": "de" }, { "text": "Wednesday 18th October", "ref_time": "2017-09-13T13:29:16", "gold_parse": "Time[]{2017-10-18 X:X (X/X)}", "language": "en" }, { "text": "25th September", "ref_time": "2017-09-07T10:03:03", "gold_parse": "Time[]{2017-09-25 X:X (X/X)}", "language": "en" }, { "text": "22.10. 19:05 Uhr", "ref_time": "2017-10-17T06:24:21", "gold_parse": "Time[]{2017-10-22 19:05 (X/X)}", "language": "de" }, { "text": "Nacht vom 29.05. - 30.05.17", "ref_time": "2017-05-23T07:06:17", "gold_parse": "Interval[]{2017-05-29 X:X (X/X) - 2017-05-30 X:X (X/X)}", "language": "de" }, { "text": "Montag, 18.09.2017", "ref_time": "2017-09-13T14:55:25", "gold_parse": "Time[]{2017-09-18 X:X (X/X)}", "language": "de" }, { "text": "10.9 später nachmittag", "ref_time": "2017-08-31T14:58:46", "gold_parse": "Time[]{2017-09-10 X:X (X/lateafternoon)}", "language": "de" }, { "text": "9 November", "ref_time": "2017-11-06T10:57:20", "gold_parse": "Time[]{2017-11-09 X:X (X/X)}", "language": "en" }, { "text": "19.6 - 21.6", "ref_time": "2017-06-14T13:56:09", "gold_parse": "Interval[]{2017-06-19 X:X (X/X) - 2017-06-21 X:X (X/X)}", "language": "de" }, { "text": "1st December around 6pm", "ref_time": "2017-11-23T08:59:53", "gold_parse": "Time[]{2017-12-01 18:00 (X/X)}", "language": "en" }, { "text": "am Do 01.06", "ref_time": "2017-05-29T07:36:12", "gold_parse": "Time[]{2017-06-01 X:X (X/X)}", "language": "de" }, { "text": "27.06.2017", "ref_time": "2017-06-21T06:43:59", "gold_parse": "Time[]{2017-06-27 X:X (X/X)}", "language": "de" }, { "text": "18.10.2017 12:40", "ref_time": "2017-09-15T12:17:47", "gold_parse": "Time[]{2017-10-18 12:40 (X/X)}", "language": "de" }, { "text": "13.10.2017 10:15 Uhr", "ref_time": "2017-10-02T16:06:45", "gold_parse": "Time[]{2017-10-13 10:15 (X/X)}", "language": "de" }, { "text": "4.7. 6:34-10:09", "ref_time": "2017-07-03T13:27:52", "gold_parse": "Interval[]{2017-07-04 06:34 (X/X) - 2017-07-04 10:09 (X/X)}", "language": "de" }, { "text": "Jun 7 1440-1825", "ref_time": "2017-06-06T18:09:53", "gold_parse": "Interval[]{2017-06-07 14:40 (X/X) - 2017-06-07 18:25 (X/X)}", "language": "en" }, { "text": "Mittwoch 24.1.", "ref_time": "2017-11-11T15:06:20", "gold_parse": "Time[]{2018-01-24 X:X (X/X)}", "language": "de" }, { "text": "Montag, 10. Juli 2017, 8.50 Uhr", "ref_time": "2017-07-05T05:42:53", "gold_parse": "Time[]{2017-07-10 08:50 (X/X)}", "language": "de" }, { "text": "28.09.2017 13:05 - 19:10", "ref_time": "2017-09-15T11:44:20", "gold_parse": "Interval[]{2017-09-28 13:05 (X/X) - 2017-09-28 19:10 (X/X)}", "language": "de" }, { "text": "9.10 23:00", "ref_time": "2017-09-21T07:07:45", "gold_parse": "Time[]{2017-10-09 23:00 (X/X)}", "language": "en" }, { "text": "26.08. früh morgens", "ref_time": "2017-08-16T10:21:36", "gold_parse": "Time[]{2017-08-26 X:X (X/earlymorning)}", "language": "de" }, { "text": "12 loka 13:10", "ref_time": "2017-09-13T14:48:21", "gold_parse": "Time[]{2017-10-12 13:10 (X/X)}", "language": "en" }, { "text": "um 18:00 Uhr", "ref_time": "2017-09-05T09:48:10", "gold_parse": "Time[]{X-X-X 18:00 (X/X)}", "language": "de" }, { "text": "18th Nov", "ref_time": "2017-11-17T21:08:07", "gold_parse": "Time[]{2017-11-18 X:X (X/X)}", "language": "en" }, { "text": "am 27.06.2017 um 10:50 Uhr", "ref_time": "2017-06-26T08:25:32", "gold_parse": "Time[]{2017-06-27 10:50 (X/X)}", "language": "de" }, { "text": "11.10.2017", "ref_time": "2017-10-10T12:45:18", "gold_parse": "Time[]{2017-10-11 X:X (X/X)}", "language": "de" }, { "text": "29.07.17", "ref_time": "2017-07-04T06:39:18", "gold_parse": "Time[]{2017-07-29 X:X (X/X)}", "language": "de" }, { "text": "21/09 2205-0455", "ref_time": "2017-08-11T06:30:46", "gold_parse": "Interval[]{2017-09-21 22:05 (X/X) - 2017-09-22 04:55 (X/X)}", "language": "en" }, { "text": "05.10.2017 morgens", "ref_time": "2017-10-02T10:38:56", "gold_parse": "Time[]{2017-10-05 X:X (X/morning)}", "language": "de" }, { "text": "24.07. 2017 gegen 08:00 Uhr", "ref_time": "2017-07-18T10:37:54", "gold_parse": "Time[]{2017-07-24 08:00 (X/X)}", "language": "de" }, { "text": "Nov 12 2215-1835", "ref_time": "2017-07-21T16:36:54", "gold_parse": "Interval[]{2017-11-12 22:15 (X/X) - 2017-11-12 18:35 (X/X)}", "language": "en" }, { "text": "13.11.17", "ref_time": "2017-10-17T09:28:44", "gold_parse": "Time[]{2017-11-13 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch 31.5 gegen 13:00", "ref_time": "2017-05-24T14:17:38", "gold_parse": "Time[]{2017-05-31 13:00 (X/X)}", "language": "de" }, { "text": "13.09.2017", "ref_time": "2017-08-24T08:34:21", "gold_parse": "Time[]{2017-09-13 X:X (X/X)}", "language": "de" }, { "text": "spätestens am 13.01.18", "ref_time": "2017-11-29T20:24:32", "gold_parse": "Interval[]{None - 2018-01-13 23:59 (X/X)}", "language": "de" }, { "text": "Montag, 11.Dezember 10:55", "ref_time": "2017-11-29T13:25:29", "gold_parse": "Time[]{2017-12-11 10:55 (X/X)}", "language": "de" }, { "text": "5pm", "ref_time": "2017-05-24T15:42:27", "gold_parse": "Time[]{X-X-X 17:00 (X/X)}", "language": "en" }, { "text": "28.-30.06.17", "ref_time": "2017-06-27T12:10:08", "gold_parse": "Interval[]{2017-06-28 X:X (X/X) - 2017-06-30 X:X (X/X)}", "language": "de" }, { "text": "Mo, 21.8.17", "ref_time": "2017-07-10T08:20:22", "gold_parse": "Time[]{2017-08-21 X:X (X/X)}", "language": "de" }, { "text": "20 November", "ref_time": "2017-11-17T13:51:22", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "en" }, { "text": "Abends 23.11.2017", "ref_time": "2017-11-09T14:22:48", "gold_parse": "Time[]{2017-11-23 X:X (X/evening)}", "language": "de" }, { "text": "am 21.11. um 19:20 Uhr", "ref_time": "2017-11-09T11:28:42", "gold_parse": "Time[]{2017-11-21 19:20 (X/X)}", "language": "de" }, { "text": "vom 06.-08.08.", "ref_time": "2017-08-04T09:46:34", "gold_parse": "Interval[]{2017-08-06 X:X (X/X) - 2017-08-08 X:X (X/X)}", "language": "de" }, { "text": "27.06.17 Abends", "ref_time": "2017-06-14T14:53:38", "gold_parse": "Time[]{2017-06-27 X:X (X/evening)}", "language": "de" }, { "text": "08.11.2017 7 Uhr", "ref_time": "2017-11-02T09:41:10", "gold_parse": "Time[]{2017-11-08 07:00 (X/X)}", "language": "de" }, { "text": "26.10.2017 19:10 - 22:00", "ref_time": "2017-10-09T10:12:29", "gold_parse": "Interval[]{2017-10-26 19:10 (X/X) - 2017-10-26 22:00 (X/X)}", "language": "de" }, { "text": "24.9 Späteste", "ref_time": "2017-09-19T15:38:06", "gold_parse": "Time[]{2017-09-24 X:X (X/last)}", "language": "de" }, { "text": "vom 29.11.2017 bis zum 30.11.2017", "ref_time": "2017-11-28T10:44:02", "gold_parse": "Interval[]{2017-11-29 X:X (X/X) - 2017-11-30 X:X (X/X)}", "language": "de" }, { "text": "am 28.09. ab frühestens 13:30 h", "ref_time": "2017-09-27T20:53:11", "gold_parse": "Interval[]{2017-09-28 13:30 (X/X) - None}", "language": "de" }, { "text": "thursday night", "ref_time": "2017-05-11T10:03:19", "gold_parse": "Time[]{2017-05-18 X:X (X/night)}", "language": "en" }, { "text": "16.11.1992", "ref_time": "2017-10-27T15:09:35", "gold_parse": "Time[]{1992-11-16 X:X (X/X)}", "language": "de" }, { "text": "Vom 19-20.07.2017", "ref_time": "2017-07-18T08:53:20", "gold_parse": "Interval[]{2017-07-19 X:X (X/X) - 2017-07-20 X:X (X/X)}", "language": "de" }, { "text": "09.10.17 Frühmorgens", "ref_time": "2017-09-29T07:31:57", "gold_parse": "Time[]{2017-10-09 X:X (X/earlymorning)}", "language": "de" }, { "text": "4.12.", "ref_time": "2017-11-20T09:50:25", "gold_parse": "Time[]{2017-12-04 X:X (X/X)}", "language": "de" }, { "text": "Wednesday evening", "ref_time": "2017-06-09T08:32:49", "gold_parse": "Time[]{2017-06-14 X:X (X/evening)}", "language": "en" }, { "text": "05.07.2017 früh morgens 16:45 Uhr", "ref_time": "2017-06-06T08:31:36", "gold_parse": "Time[]{2017-07-05 16:45 (X/X)}", "language": "de" }, { "text": "25 SEP, 15:50", "ref_time": "2017-09-10T15:46:24", "gold_parse": "Time[]{2017-09-25 15:50 (X/X)}", "language": "en" }, { "text": "18.07. 09.55 Uhr", "ref_time": "2017-07-11T09:37:01", "gold_parse": "Time[]{2017-07-18 09:55 (X/X)}", "language": "de" }, { "text": "Mittwoch den 20/09 ab gegen 21.00 Uhr", "ref_time": "2017-09-18T17:00:04", "gold_parse": "Interval[]{2017-09-20 21:00 (X/X) - None}", "language": "de" }, { "text": "13.11. morgens", "ref_time": "2017-10-10T15:22:48", "gold_parse": "Time[]{2017-11-13 X:X (X/morning)}", "language": "de" }, { "text": "von heute auf morgen", "ref_time": "2017-06-26T07:55:07", "gold_parse": "Interval[]{2017-06-26 X:X (X/X) - 2017-06-27 X:X (X/X)}", "language": "de" }, { "text": "von Mittwoch, 11.10.2017, bis Donnerstag, 12.10.2017", "ref_time": "2017-09-25T10:17:10", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "Freitag", "ref_time": "2017-07-10T06:42:21", "gold_parse": "Time[]{2017-07-14 X:X (X/X)}", "language": "de" }, { "text": "19.10. 10:00", "ref_time": "2017-08-29T12:30:16", "gold_parse": "Time[]{2017-10-19 10:00 (X/X)}", "language": "de" }, { "text": "Thursday November 16th around 14:30-15:00", "ref_time": "2017-11-14T10:50:19", "gold_parse": "Interval[]{2017-11-16 14:30 (X/X) - 2017-11-16 15:00 (X/X)}", "language": "en" }, { "text": "am 09.11. um 8:28 Uhr", "ref_time": "2017-11-03T15:22:07", "gold_parse": "Time[]{2017-11-09 08:28 (X/X)}", "language": "de" }, { "text": "06 JUL ab 16:00", "ref_time": "2017-05-30T14:04:39", "gold_parse": "Interval[]{2017-07-06 16:00 (X/X) - None}", "language": "de" }, { "text": "4.9. späteste", "ref_time": "2017-08-17T07:58:33", "gold_parse": "Time[]{2017-09-04 X:X (X/last)}", "language": "de" }, { "text": "16.08.2017 (ab ca. 18.00 Uhr", "ref_time": "2017-07-12T09:10:31", "gold_parse": "Interval[]{2017-08-16 18:00 (X/X) - None}", "language": "de" }, { "text": "19.05.2017 07:30 Uhr", "ref_time": "2017-05-10T11:12:26", "gold_parse": "Time[]{2017-05-19 07:30 (X/X)}", "language": "de" }, { "text": "28/10 morgens", "ref_time": "2017-10-20T09:36:41", "gold_parse": "Time[]{2017-10-28 X:X (X/morning)}", "language": "de" }, { "text": "am Freitag am Freitag nach 17:00 Uhr", "ref_time": "2017-09-25T14:04:34", "gold_parse": "Interval[]{2017-09-29 17:00 (X/X) - None}", "language": "de" }, { "text": "11.07.2017 in the evening", "ref_time": "2017-07-07T14:56:20", "gold_parse": "Time[]{2017-07-11 X:X (X/evening)}", "language": "en" }, { "text": "20.10 spätestens 12:00 Uhr", "ref_time": "2017-10-16T10:02:38", "gold_parse": "Interval[]{None - 2017-10-20 12:00 (X/X)}", "language": "de" }, { "text": "2nd Oct", "ref_time": "2017-09-08T17:14:10", "gold_parse": "Time[]{2017-10-02 X:X (X/X)}", "language": "en" }, { "text": "on Wednesday 23.08. around 7pm.", "ref_time": "2017-08-17T18:01:53", "gold_parse": "Time[]{2017-08-23 19:00 (X/X)}", "language": "en" }, { "text": "18.06. morgens", "ref_time": "2017-05-11T12:23:01", "gold_parse": "Time[]{2017-06-18 X:X (X/morning)}", "language": "de" }, { "text": "am 2.6.", "ref_time": "2017-05-25T20:13:35", "gold_parse": "Time[]{2017-06-02 X:X (X/X)}", "language": "de" }, { "text": "Tuesday late morning", "ref_time": "2017-11-10T01:18:15", "gold_parse": "Time[]{2017-11-14 X:X (X/morning)}", "language": "en" }, { "text": "16.11.", "ref_time": "2017-11-14T09:08:43", "gold_parse": "Time[]{2017-11-16 X:X (X/X)}", "language": "de" }, { "text": "25. Oktober ab 7 Uhr morgens", "ref_time": "2017-09-07T14:33:21", "gold_parse": "Interval[]{2017-10-25 07:00 (X/X) - None}", "language": "de" }, { "text": "Tuesday afternoon 16.29h", "ref_time": "2017-11-02T11:20:38", "gold_parse": "Time[]{2017-11-07 16:29 (X/X)}", "language": "en" }, { "text": "12 loka 18:30", "ref_time": "2017-09-13T14:48:21", "gold_parse": "Time[]{2017-10-12 18:30 (X/X)}", "language": "en" }, { "text": "June 22", "ref_time": "2017-06-13T07:28:43", "gold_parse": "Time[]{2017-06-22 X:X (X/X)}", "language": "de" }, { "text": "19.06.2017 20.25 Uhr", "ref_time": "2017-06-08T08:43:17", "gold_parse": "Time[]{2017-06-19 20:25 (X/X)}", "language": "de" }, { "text": "31. August 6.55AM", "ref_time": "2017-07-20T10:17:32", "gold_parse": "Time[]{2017-08-31 06:55 (X/X)}", "language": "de" }, { "text": "Thursday 16.11.2017 late afternoon", "ref_time": "2017-11-13T15:19:05", "gold_parse": "Time[]{2017-11-16 X:X (X/lateafternoon)}", "language": "en" }, { "text": "early afternoon", "ref_time": "2017-10-24T19:11:30", "gold_parse": "Time[]{X-X-X X:X (X/earlyafternoon)}", "language": "en" }, { "text": "Donnerstag gegen 18:30", "ref_time": "2017-11-07T10:12:41", "gold_parse": "Time[]{2017-11-16 18:30 (X/X)}", "language": "de" }, { "text": "Thursday 16.11.2017 6:30am", "ref_time": "2017-11-13T15:19:05", "gold_parse": "Time[]{2017-11-16 06:30 (X/X)}", "language": "en" }, { "text": "27.6. zu 28.6", "ref_time": "2017-06-27T05:54:33", "gold_parse": "Interval[]{2017-06-27 X:X (X/X) - 2017-06-28 X:X (X/X)}", "language": "de" }, { "text": "05.08.2017 Vormittags", "ref_time": "2017-07-05T11:53:05", "gold_parse": "Time[]{2017-08-05 X:X (X/morning)}", "language": "de" }, { "text": "Jun 7, Wed at 1515pm", "ref_time": "2017-06-01T11:15:13", "gold_parse": "Time[]{2017-06-07 15:15 (X/X)}", "language": "en" }, { "text": "16 NOV, 09:10", "ref_time": "2017-10-23T09:29:04", "gold_parse": "Time[]{2017-11-16 09:10 (X/X)}", "language": "en" }, { "text": "am 13.11. um 19:00", "ref_time": "2017-11-10T09:18:54", "gold_parse": "Time[]{2017-11-13 19:00 (X/X)}", "language": "de" }, { "text": "on Monday 28 August, at around 8am", "ref_time": "2017-08-14T10:44:12", "gold_parse": "Time[]{2017-08-28 08:00 (X/X)}", "language": "en" }, { "text": "20.10. 16.20h", "ref_time": "2017-09-21T09:36:31", "gold_parse": "Time[]{2017-10-20 16:20 (X/X)}", "language": "de" }, { "text": "05.07.2017 um 09:30", "ref_time": "2017-06-14T07:30:41", "gold_parse": "Time[]{2017-07-05 09:30 (X/X)}", "language": "de" }, { "text": "am 10.01.2018", "ref_time": "2017-11-17T09:26:37", "gold_parse": "Time[]{2018-01-10 X:X (X/X)}", "language": "de" }, { "text": "14.11. morgens", "ref_time": "2017-11-07T13:39:18", "gold_parse": "Time[]{2017-11-14 X:X (X/morning)}", "language": "de" }, { "text": "vom 27.11 - 29.11.", "ref_time": "2017-11-27T09:36:48", "gold_parse": "Interval[]{2017-11-27 X:X (X/X) - 2017-11-29 X:X (X/X)}", "language": "de" }, { "text": "20.11. - 27.11.2017", "ref_time": "2017-10-26T14:07:56", "gold_parse": "Interval[]{2017-11-20 X:X (X/X) - 2017-11-27 X:X (X/X)}", "language": "de" }, { "text": "29. November abends nicht vor 18 Uhr", "ref_time": "2017-11-09T15:07:55", "gold_parse": "Interval[]{2017-11-29 18:00 (X/X) - None}", "language": "de" }, { "text": "10:30 18. Juni", "ref_time": "2017-05-15T17:37:06", "gold_parse": "Time[]{2017-06-18 10:30 (X/X)}", "language": "de" }, { "text": "23.10.2017 12:15 Uhr", "ref_time": "2017-10-13T13:11:51", "gold_parse": "Time[]{2017-10-23 12:15 (X/X)}", "language": "de" }, { "text": "6. August 11.05", "ref_time": "2017-07-26T09:21:31", "gold_parse": "Time[]{2017-08-06 11:05 (X/X)}", "language": "de" }, { "text": "on 14/12/2017 6:00PM", "ref_time": "2017-11-17T09:52:14", "gold_parse": "Time[]{2017-12-14 18:00 (X/X)}", "language": "en" }, { "text": "Sonntag, 29.10.", "ref_time": "2017-10-25T13:30:35", "gold_parse": "Time[]{2017-10-29 X:X (X/X)}", "language": "de" }, { "text": "am 05.12.2017 ab 17 Uhr", "ref_time": "2017-11-07T13:25:19", "gold_parse": "Interval[]{2017-12-05 17:00 (X/X) - None}", "language": "de" }, { "text": "20.11. - 27.11.2017", "ref_time": "2017-10-26T14:07:56", "gold_parse": "Interval[]{2017-11-20 X:X (X/X) - 2017-11-27 X:X (X/X)}", "language": "de" }, { "text": "17.07.2017", "ref_time": "2017-07-10T10:10:11", "gold_parse": "Time[]{2017-07-17 X:X (X/X)}", "language": "de" }, { "text": "um 21:00 h", "ref_time": "2017-10-24T06:31:58", "gold_parse": "Time[]{X-X-X 21:00 (X/X)}", "language": "de" }, { "text": "12.6. abends", "ref_time": "2017-06-02T10:21:48", "gold_parse": "Time[]{2017-06-12 X:X (X/evening)}", "language": "de" }, { "text": "Eine Übernachtung", "ref_time": "2017-11-08T12:59:30", "gold_parse": "Duration[]{1 nights}", "language": "de" }, { "text": "25.11.2017", "ref_time": "2017-11-07T08:20:46", "gold_parse": "Time[]{2017-11-25 X:X (X/X)}", "language": "de" }, { "text": "7th November 2017", "ref_time": "2017-06-29T07:57:36", "gold_parse": "Time[]{2017-11-07 X:X (X/X)}", "language": "de" }, { "text": "December 7.", "ref_time": "2017-10-27T13:43:50", "gold_parse": "Time[]{2017-12-07 X:X (X/X)}", "language": "en" }, { "text": "29.08.2017", "ref_time": "2017-08-24T11:37:52", "gold_parse": "Time[]{2017-08-29 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag 17.08.2017 19:20 - 20:30", "ref_time": "2017-07-19T12:19:35", "gold_parse": "Interval[]{2017-08-17 19:20 (X/X) - 2017-08-17 20:30 (X/X)}", "language": "de" }, { "text": "am 15.11. um 18:15 Uhr", "ref_time": "2017-10-24T15:55:28", "gold_parse": "Time[]{2017-11-15 18:15 (X/X)}", "language": "de" }, { "text": "Montag 06.48h", "ref_time": "2017-06-30T13:27:26", "gold_parse": "Time[]{2017-07-03 06:48 (X/X)}", "language": "de" }, { "text": "16.-17.05.2017", "ref_time": "2017-05-15T13:45:34", "gold_parse": "Interval[]{2017-05-16 X:X (X/X) - 2017-05-17 X:X (X/X)}", "language": "de" }, { "text": "am Mittwoch früh so zeitig wie möglich", "ref_time": "2017-06-22T10:26:44", "gold_parse": "Time[]{2017-06-28 X:X (X/first)}", "language": "de" }, { "text": "Fr 15. Sep 20:35", "ref_time": "2017-07-25T12:26:26", "gold_parse": "Time[]{2017-09-15 20:35 (X/X)}", "language": "de" }, { "text": "27.11.2017 abends", "ref_time": "2017-11-07T13:38:08", "gold_parse": "Time[]{2017-11-27 X:X (X/evening)}", "language": "de" }, { "text": "20.12.2017 gegen 19:00 Uhr", "ref_time": "2017-11-24T09:30:12", "gold_parse": "Time[]{2017-12-20 19:00 (X/X)}", "language": "de" }, { "text": "Donnerstag 20.7.", "ref_time": "2017-07-12T20:49:08", "gold_parse": "Time[]{2017-07-20 X:X (X/X)}", "language": "de" }, { "text": "am 1. 2 ab 19 Uhr", "ref_time": "2017-09-26T09:01:01", "gold_parse": "Interval[]{2018-02-01 19:00 (X/X) - None}", "language": "de" }, { "text": "20.11.", "ref_time": "2017-08-11T11:40:43", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "de" }, { "text": "am 28.11. 18:30", "ref_time": "2017-11-27T15:16:11", "gold_parse": "Time[]{2017-11-28 18:30 (X/X)}", "language": "de" }, { "text": "18.09.2017 Morgens", "ref_time": "2017-09-06T12:49:56", "gold_parse": "Time[]{2017-09-18 X:X (X/morning)}", "language": "de" }, { "text": "08.12.2017", "ref_time": "2017-11-20T10:24:17", "gold_parse": "Time[]{2017-12-08 X:X (X/X)}", "language": "de" }, { "text": "05.07.2017 früh morgens 14:25 Uhr", "ref_time": "2017-06-06T08:31:36", "gold_parse": "Time[]{2017-07-05 14:25 (X/X)}", "language": "de" }, { "text": "30.11", "ref_time": "2017-11-24T13:33:59", "gold_parse": "Time[]{2017-11-30 X:X (X/X)}", "language": "de" }, { "text": "20.06.2017", "ref_time": "2017-06-19T21:28:12", "gold_parse": "Time[]{2017-06-20 X:X (X/X)}", "language": "de" }, { "text": "kommende Nacht", "ref_time": "2017-11-23T12:16:57", "gold_parse": "Interval[]{2017-11-23 X:X (X/X) - 2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch, 19 Juli 2017 in der Frühe", "ref_time": "2017-07-10T08:29:26", "gold_parse": "Time[]{2016-07-19 X:X (X/morning)}", "language": "de" }, { "text": "July 3rd", "ref_time": "2017-06-02T10:33:52", "gold_parse": "Time[]{2017-07-03 X:X (X/X)}", "language": "en" }, { "text": "vom 21.08. - 25.08.2017", "ref_time": "2017-08-19T16:05:33", "gold_parse": "Interval[]{2017-08-21 X:X (X/X) - 2017-08-25 X:X (X/X)}", "language": "de" }, { "text": "05.11.2017 15:40", "ref_time": "2017-10-12T08:06:39", "gold_parse": "Time[]{2017-11-05 15:40 (X/X)}", "language": "de" }, { "text": "24.07. 07:25h", "ref_time": "2017-07-21T11:00:35", "gold_parse": "Time[]{2017-07-24 07:25 (X/X)}", "language": "de" }, { "text": "21.09.2017 16:25 Uhr", "ref_time": "2017-09-19T07:12:55", "gold_parse": "Time[]{2017-09-21 16:25 (X/X)}", "language": "de" }, { "text": "vom 18. auf den 19.09.2017", "ref_time": "2017-09-03T07:15:33", "gold_parse": "Interval[]{2017-09-18 X:X (X/X) - 2017-09-19 X:X (X/X)}", "language": "de" }, { "text": "14.09.2017 18:00 - 20:00", "ref_time": "2017-08-09T09:39:11", "gold_parse": "Interval[]{2017-09-14 18:00 (X/X) - 2017-09-14 20:00 (X/X)}", "language": "en" }, { "text": "05.10.2017 15:05 Uhr", "ref_time": "2017-09-13T10:44:24", "gold_parse": "Time[]{2017-10-05 15:05 (X/X)}", "language": "de" }, { "text": "July 8 - July 9", "ref_time": "2017-07-06T11:26:18", "gold_parse": "Interval[]{2017-07-08 X:X (X/X) - 2017-07-09 X:X (X/X)}", "language": "en" }, { "text": "25.10.2017 12:00 Uhr", "ref_time": "2017-10-10T05:43:58", "gold_parse": "Time[]{2017-10-25 12:00 (X/X)}", "language": "de" }, { "text": "Friday midday 19/05", "ref_time": "2017-05-09T15:42:58", "gold_parse": "Time[]{2017-05-19 X:X (X/noon)}", "language": "en" }, { "text": "vom 18.11. zum 19.11.2017", "ref_time": "2017-11-16T11:11:16", "gold_parse": "Interval[]{2017-11-18 X:X (X/X) - 2017-11-19 X:X (X/X)}", "language": "de" }, { "text": "20.9.2017 um 17.45 Uhr", "ref_time": "2017-09-07T06:34:38", "gold_parse": "Time[]{2017-09-20 17:45 (X/X)}", "language": "de" }, { "text": "Nachmittags", "ref_time": "2017-10-11T06:29:14", "gold_parse": "Time[]{X-X-X X:X (X/afternoon)}", "language": "de" }, { "text": "02 November 2017 09:35", "ref_time": "2017-10-16T11:10:09", "gold_parse": "Time[]{2017-11-02 09:35 (X/X)}", "language": "de" }, { "text": "October 10 (afternoon)", "ref_time": "2017-10-02T08:48:54", "gold_parse": "Time[]{2017-10-10 X:X (X/afternoon)}", "language": "en" }, { "text": "Mittwoch 09.08.", "ref_time": "2017-08-03T13:14:07", "gold_parse": "Time[]{2017-08-09 X:X (X/X)}", "language": "de" }, { "text": "29.05.2017 11:26", "ref_time": "2017-05-24T09:48:05", "gold_parse": "Time[]{2017-05-29 11:26 (X/X)}", "language": "en" }, { "text": "Fr 13.10.17 19:56", "ref_time": "2017-09-29T08:46:55", "gold_parse": "Time[]{2017-10-13 19:56 (X/X)}", "language": "de" }, { "text": "at 8", "ref_time": "2022-12-08T09:12:01", "gold_parse": "Time[]{2022-12-08 20:00 (X/X)}", "language": "de" }, { "text": "01.08.2017 bis 02.08.2017", "ref_time": "2017-07-26T06:12:01", "gold_parse": "Interval[]{2017-08-01 X:X (X/X) - 2017-08-02 X:X (X/X)}", "language": "de" }, { "text": "12/24", "ref_time": "2022-11-30T06:12:01", "gold_parse": "Time[]{2022-12-24 X:X (X/X)}", "language": "de" }, { "text": "24.08.2017 morgens", "ref_time": "2017-07-21T11:26:47", "gold_parse": "Time[]{2017-08-24 X:X (X/morning)}", "language": "de" }, { "text": "Donnerstag", "ref_time": "2017-11-05T14:30:26", "gold_parse": "Time[]{2017-11-16 X:X (X/X)}", "language": "de" }, { "text": "am 07.12.17 12:08", "ref_time": "2017-10-11T06:40:17", "gold_parse": "Time[]{2017-12-07 12:08 (X/X)}", "language": "de" }, { "text": "morgen", "ref_time": "2017-07-18T11:23:19", "gold_parse": "Time[]{2017-07-19 X:X (X/X)}", "language": "de" }, { "text": "Friday 28/06 around 15:20", "ref_time": "2017-07-20T15:24:21", "gold_parse": "Time[]{2017-06-28 15:20 (X/X)}", "language": "en" }, { "text": "30.8. 18:00h", "ref_time": "2017-08-14T13:36:01", "gold_parse": "Time[]{2017-08-30 18:00 (X/X)}", "language": "de" }, { "text": "16.8. in the evening", "ref_time": "2017-08-13T18:08:01", "gold_parse": "Time[]{2017-08-16 X:X (X/evening)}", "language": "en" }, { "text": "Di., 25.07. 07:05 - 07:50 Uhr", "ref_time": "2017-07-17T13:21:01", "gold_parse": "Interval[]{2017-07-25 07:05 (X/X) - 2017-07-25 07:50 (X/X)}", "language": "de" }, { "text": "20.06.2017 19:50 Uhr", "ref_time": "2017-06-08T08:43:17", "gold_parse": "Time[]{2017-06-20 19:50 (X/X)}", "language": "de" }, { "text": "am Mi, 23.8", "ref_time": "2017-08-16T11:26:24", "gold_parse": "Time[]{2017-08-23 X:X (X/X)}", "language": "de" }, { "text": "24.11.17", "ref_time": "2017-11-20T11:08:18", "gold_parse": "Time[]{2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "19/12 1510-1640", "ref_time": "2017-10-03T15:13:10", "gold_parse": "Interval[]{2017-12-19 15:10 (X/X) - 2017-12-19 16:40 (X/X)}", "language": "en" }, { "text": "am 22.11.2017 um 18.13 Uhr", "ref_time": "2017-11-14T08:50:04", "gold_parse": "Time[]{2017-11-22 18:13 (X/X)}", "language": "de" }, { "text": "on Monday 8th October-Wednesday 11th October", "ref_time": "2017-09-20T12:21:26", "gold_parse": "Interval[]{2017-10-08 X:X (X/X) - 2017-10-11 X:X (X/X)}", "language": "en" }, { "text": "am Donnerstag, 17.8. ab 16:45 Uhr", "ref_time": "2017-07-18T13:22:48", "gold_parse": "Interval[]{2017-08-17 16:45 (X/X) - None}", "language": "de" }, { "text": "16.9", "ref_time": "2017-09-08T08:22:06", "gold_parse": "Time[]{2017-09-16 X:X (X/X)}", "language": "de" }, { "text": "morgen 10.05 ab 12 Uhr", "ref_time": "2017-05-09T13:30:21", "gold_parse": "Interval[]{2017-05-10 12:00 (X/X) - None}", "language": "de" }, { "text": "am 28. Juli später nachmittags", "ref_time": "2017-07-14T09:25:35", "gold_parse": "Time[]{2017-07-28 X:X (X/afternoon)}", "language": "de" }, { "text": "vom 18.09 bis 19.09", "ref_time": "2017-08-18T08:51:26", "gold_parse": "Interval[]{2017-09-18 X:X (X/X) - 2017-09-19 X:X (X/X)}", "language": "de" }, { "text": "Vom 11.10. bis 12.10.", "ref_time": "2017-09-13T13:59:46", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag, den 5.10.2017 10:45 - 11:55 Uhr", "ref_time": "2017-09-28T07:55:07", "gold_parse": "Interval[]{2017-10-05 10:45 (X/X) - 2017-10-05 11:55 (X/X)}", "language": "de" }, { "text": "23.09.2017 14:25 Uhr", "ref_time": "2017-08-25T09:56:31", "gold_parse": "Time[]{2017-09-23 14:25 (X/X)}", "language": "de" }, { "text": "19.09.2017 10:20 Uhr - 11:55 Uhr", "ref_time": "2017-08-21T13:35:29", "gold_parse": "Interval[]{2017-09-19 10:20 (X/X) - 2017-09-19 11:55 (X/X)}", "language": "de" }, { "text": "Mittwoch, den 27.9. ab 08:00 Uhr", "ref_time": "2017-06-27T12:55:02", "gold_parse": "Interval[]{2017-09-27 08:00 (X/X) - None}", "language": "de" }, { "text": "am 30. August", "ref_time": "2017-08-25T13:48:02", "gold_parse": "Time[]{2017-08-30 X:X (X/X)}", "language": "de" }, { "text": "16.11.2017 von 09:00 bis 15:30 Uhr", "ref_time": "2017-11-14T07:19:04", "gold_parse": "Interval[]{2017-11-16 09:00 (X/X) - 2017-11-16 15:30 (X/X)}", "language": "de" }, { "text": "am 25.10.", "ref_time": "2017-10-24T17:39:58", "gold_parse": "Time[]{2017-10-25 X:X (X/X)}", "language": "de" }, { "text": "am 22.06.17 05:47 Uhr", "ref_time": "2017-06-18T14:31:28", "gold_parse": "Time[]{2017-06-22 05:47 (X/X)}", "language": "de" }, { "text": "02.06.2017, Freitag,", "ref_time": "2017-05-29T12:45:55", "gold_parse": "Time[]{2017-06-02 X:X (X/X)}", "language": "de" }, { "text": "vom 10.09. - 14.09.", "ref_time": "2017-09-04T10:45:27", "gold_parse": "Interval[]{2017-09-10 X:X (X/X) - 2017-09-14 X:X (X/X)}", "language": "de" }, { "text": "vom 26. - 27.09.2017", "ref_time": "2017-09-25T08:16:31", "gold_parse": "Interval[]{2017-09-26 X:X (X/X) - 2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "21.08.2017", "ref_time": "2017-07-27T08:19:14", "gold_parse": "Time[]{2017-08-21 X:X (X/X)}", "language": "de" }, { "text": "7th of November, 2017", "ref_time": "2017-10-29T15:56:00", "gold_parse": "Time[]{2017-11-07 X:X (X/X)}", "language": "en" }, { "text": "7.03.2018 in the evening", "ref_time": "2017-10-17T09:15:38", "gold_parse": "Time[]{2018-03-07 X:X (X/evening)}", "language": "en" }, { "text": "kommenden Sonntag, 08.10. ca. 18.30 h", "ref_time": "2017-10-02T11:42:50", "gold_parse": "Time[]{2017-10-08 18:30 (X/X)}", "language": "de" }, { "text": "spät am Nachmittag am 18.07.2017", "ref_time": "2017-06-29T12:24:38", "gold_parse": "Time[]{2017-07-18 X:X (X/lateafternoon)}", "language": "de" }, { "text": "Donnerstag, 6.07.2017 Abends ab 17.00h", "ref_time": "2017-06-23T12:38:05", "gold_parse": "Interval[]{2017-07-06 17:00 (X/X) - None}", "language": "de" }, { "text": "Do. 18. Mai 19:40", "ref_time": "2017-05-15T16:35:20", "gold_parse": "Time[]{2017-05-18 19:40 (X/X)}", "language": "de" }, { "text": "17.09.2017", "ref_time": "2017-07-04T15:40:35", "gold_parse": "Time[]{2017-09-17 X:X (X/X)}", "language": "de" }, { "text": "am 9.9.", "ref_time": "2017-08-28T01:33:48", "gold_parse": "Time[]{2017-09-09 X:X (X/X)}", "language": "de" }, { "text": "am 12.11.", "ref_time": "2017-11-06T08:22:00", "gold_parse": "Time[]{2017-11-12 X:X (X/X)}", "language": "de" }, { "text": "21.07. 15 Uhr", "ref_time": "2017-05-24T14:42:50", "gold_parse": "Time[]{2017-07-21 15:00 (X/X)}", "language": "de" }, { "text": "18.8. 1845-1955", "ref_time": "2017-08-15T10:34:43", "gold_parse": "Interval[]{2017-08-18 18:45 (X/X) - 2017-08-18 19:55 (X/X)}", "language": "de" }, { "text": "Wednesday, September 27th", "ref_time": "2017-09-22T17:11:20", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "en" }, { "text": "Sonntag, 09.07.2017", "ref_time": "2017-06-22T14:46:36", "gold_parse": "Time[]{2017-07-09 X:X (X/X)}", "language": "de" }, { "text": "17.10.2017 ab 14:30", "ref_time": "2017-10-06T12:55:33", "gold_parse": "Time[]{2017-10-17 14:30 (X/X)}", "language": "de" }, { "text": "vom 05.09. - 06.09.2017", "ref_time": "2017-08-30T10:23:22", "gold_parse": "Interval[]{2017-09-05 X:X (X/X) - 2017-09-06 X:X (X/X)}", "language": "de" }, { "text": "5 heinä 2017, 11:35", "ref_time": "2017-07-04T14:51:04", "gold_parse": "Time[]{2017-07-05 11:35 (X/X)}", "language": "other" }, { "text": "on Sunday 8th Oct 12:35 PM", "ref_time": "2017-09-28T09:02:11", "gold_parse": "Time[]{2017-10-08 12:35 (X/X)}", "language": "other" }, { "text": "Wed 31th 11:10 - 13:00", "ref_time": "2017-05-10T15:52:14", "gold_parse": "Interval[]{2017-05-31 11:10 (X/X) - 2017-05-31 13:00 (X/X)}", "language": "de" }, { "text": "am 02.11.2017 7-9 Uhr", "ref_time": "2017-10-17T08:57:31", "gold_parse": "Interval[]{2017-11-02 07:00 (X/X) - 2017-11-02 09:00 (X/X)}", "language": "de" }, { "text": "Mon 23rd Oct at 15h05 20h15Leave", "ref_time": "2017-10-20T07:28:07", "gold_parse": "Time[]{2017-10-23 20:15 (X/X)}", "language": "en" }, { "text": "18.06.2017 21:05Uhr", "ref_time": "2017-06-02T08:35:39", "gold_parse": "Time[]{2017-06-18 21:05 (X/X)}", "language": "de" }, { "text": "Wednesday 23.08. 22:00", "ref_time": "2017-08-17T10:31:26", "gold_parse": "Time[]{2017-08-23 22:00 (X/X)}", "language": "en" }, { "text": "am 31.07. früh morgens", "ref_time": "2017-06-19T11:51:01", "gold_parse": "Time[]{2017-07-31 X:X (X/earlymorning)}", "language": "de" }, { "text": "27.11.17", "ref_time": "2017-11-22T14:05:44", "gold_parse": "Time[]{2017-11-27 X:X (X/X)}", "language": "de" }, { "text": "10.10.17 Abends", "ref_time": "2017-09-04T13:16:48", "gold_parse": "Time[]{2017-10-10 X:X (X/evening)}", "language": "de" }, { "text": "around 18-19 in the evening", "ref_time": "2017-05-22T08:06:36", "gold_parse": "Interval[]{2017-05-24 18:00 (X/X) - 2017-05-24 19:00 (X/X)}", "language": "de" }, { "text": "20.07. 10:00-11:05", "ref_time": "2017-07-05T10:59:36", "gold_parse": "Interval[]{2017-07-20 10:00 (X/X) - 2017-07-20 11:05 (X/X)}", "language": "de" }, { "text": "Nov 12 (Sun", "ref_time": "2017-11-05T14:52:44", "gold_parse": "Time[]{2017-11-12 X:X (X/X)}", "language": "en" }, { "text": "am 27.10. gegen Mitternacht", "ref_time": "2017-08-23T18:43:24", "gold_parse": "Time[]{2017-10-27 00:00 (X/X)}", "language": "de" }, { "text": "15.11.2017 18:45h", "ref_time": "2017-10-25T13:16:16", "gold_parse": "Time[]{2017-11-15 18:45 (X/X)}", "language": "de" }, { "text": "Donnerstag, 05.10.2017 spätabends", "ref_time": "2017-09-29T16:08:52", "gold_parse": "Time[]{2017-10-05 X:X (X/lateevening)}", "language": "de" }, { "text": "13.12. Nachmittags", "ref_time": "2017-11-28T11:32:23", "gold_parse": "Time[]{2017-12-13 X:X (X/afternoon)}", "language": "de" }, { "text": "From Tuesday 19th to Saturday 23 this month", "ref_time": "2017-09-15T12:30:53", "gold_parse": "Interval[]{2017-09-19 X:X (X/X) - 2017-09-23 X:X (X/X)}", "language": "en" }, { "text": "Nacht vom 28.11.2017 auf den 29.11.2017", "ref_time": "2017-11-21T12:34:52", "gold_parse": "Interval[]{2017-11-28 X:X (X/X) - 2017-11-29 X:X (X/X)}", "language": "de" }, { "text": "vom 15. auf den 16.11.2017", "ref_time": "2017-11-12T18:51:57", "gold_parse": "Interval[]{2017-11-15 X:X (X/X) - 2017-11-16 X:X (X/X)}", "language": "de" }, { "text": "heute um 7:12 Uhr", "ref_time": "2017-09-20T04:46:39", "gold_parse": "Time[]{2017-09-20 07:12 (X/X)}", "language": "de" }, { "text": "23.10.17 zwischen 12 und 12:30 Uhr", "ref_time": "2017-10-11T06:19:14", "gold_parse": "Interval[]{2017-10-23 12:00 (X/X) - 2017-10-23 12:30 (X/X)}", "language": "de" }, { "text": "am 19.9. um 14.10 Uhr", "ref_time": "2017-09-01T07:39:03", "gold_parse": "Time[]{2017-09-19 14:10 (X/X)}", "language": "de" }, { "text": "03.11. 07:28-09:24", "ref_time": "2017-11-01T16:16:03", "gold_parse": "Interval[]{2017-11-03 07:28 (X/X) - 2017-11-03 09:24 (X/X)}", "language": "de" }, { "text": "14.9 (Abends)", "ref_time": "2017-09-08T08:22:06", "gold_parse": "Time[]{2017-09-14 X:X (X/evening)}", "language": "de" }, { "text": "around midday Saturday", "ref_time": "2017-11-13T13:45:57", "gold_parse": "Time[]{2017-12-16 X:X (X/afternoon)}", "language": "en" }, { "text": "Do, 19.10.2017 16:48", "ref_time": "2017-10-16T13:04:40", "gold_parse": "Time[]{2017-10-19 16:48 (X/X)}", "language": "de" }, { "text": "morgen", "ref_time": "2017-08-27T08:24:47", "gold_parse": "Time[]{2017-08-28 X:X (X/X)}", "language": "de" }, { "text": "21. Oct. 16.49", "ref_time": "2017-07-07T08:26:55", "gold_parse": "Time[]{2017-10-21 16:49 (X/X)}", "language": "de" }, { "text": "11.- 12.07.2017", "ref_time": "2017-07-05T08:15:13", "gold_parse": "Interval[]{2017-07-11 X:X (X/X) - 2017-07-12 X:X (X/X)}", "language": "de" }, { "text": "6.10. 18:00", "ref_time": "2017-09-25T14:20:43", "gold_parse": "Time[]{2017-10-06 18:00 (X/X)}", "language": "de" }, { "text": "26.10.2017", "ref_time": "2017-10-19T08:37:12", "gold_parse": "Time[]{2017-10-26 X:X (X/X)}", "language": "en" }, { "text": "am Abend des Mittwochs", "ref_time": "2017-09-05T07:16:26", "gold_parse": "Time[]{2017-09-06 X:X (X/evening)}", "language": "de" }, { "text": "Do, 12.10.17 22:01", "ref_time": "2017-09-22T09:13:45", "gold_parse": "Time[]{2017-10-12 22:01 (X/X)}", "language": "de" }, { "text": "Donnerstag, 20.7. 19:55h", "ref_time": "2017-07-11T16:24:32", "gold_parse": "Time[]{2017-07-20 19:55 (X/X)}", "language": "de" }, { "text": "Mittwoch 31.05.17 13:48", "ref_time": "2017-05-26T10:55:35", "gold_parse": "Time[]{2017-05-31 13:48 (X/X)}", "language": "de" }, { "text": "10.10.2017 ca. 19 Uhr", "ref_time": "2017-07-14T07:33:39", "gold_parse": "Time[]{2017-10-10 19:00 (X/X)}", "language": "de" }, { "text": "18/07 gegen 12:00", "ref_time": "2017-07-11T09:03:37", "gold_parse": "Time[]{2017-07-18 12:00 (X/X)}", "language": "de" }, { "text": "05.09.17 ab 16.00 Uhr", "ref_time": "2017-07-24T08:43:57", "gold_parse": "Interval[]{2017-09-05 16:00 (X/X) - None}", "language": "de" }, { "text": "2017-09-20 14:00", "ref_time": "2017-09-07T08:03:49", "gold_parse": "Time[]{2017-09-20 14:00 (X/X)}", "language": "de" }, { "text": "am Mo., 19.06.2017 16:55", "ref_time": "2017-06-10T08:38:27", "gold_parse": "Time[]{2017-06-19 16:55 (X/X)}", "language": "de" }, { "text": "von 05.07.2017 bis 06.07.2017", "ref_time": "2017-07-03T08:03:27", "gold_parse": "Interval[]{2017-07-05 X:X (X/X) - 2017-07-06 X:X (X/X)}", "language": "de" }, { "text": "Wed - Thu", "ref_time": "2017-10-06T09:45:11", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-12 X:X (X/X)}", "language": "en" }, { "text": "11.10.17 10.50-11.35 Uhr", "ref_time": "2017-10-09T13:18:05", "gold_parse": "Interval[]{2017-10-11 10:00 (X/X) - 2017-10-11 11:35 (X/X)}", "language": "de" }, { "text": "am Montag den 29.05.2017", "ref_time": "2017-05-23T12:52:29", "gold_parse": "Time[]{2017-05-29 X:X (X/X)}", "language": "de" }, { "text": "16.08.17, 9.00 Uhr", "ref_time": "2017-08-14T12:31:48", "gold_parse": "Time[]{2017-08-16 09:00 (X/X)}", "language": "de" }, { "text": "15.09. 14:21 Uhr", "ref_time": "2017-09-07T10:19:10", "gold_parse": "Time[]{2017-09-15 X:X (X/X)}", "language": "de" }, { "text": "30.08. morgens um 06.40", "ref_time": "2017-08-15T13:44:08", "gold_parse": "Time[]{2017-08-30 06:40 (X/X)}", "language": "de" }, { "text": "morgen 1700", "ref_time": "2017-06-26T12:14:45", "gold_parse": "Time[]{2017-06-27 17:00 (X/X)}", "language": "de" }, { "text": "am Samstag den 09.09 ab 9Uhr -12Uhr", "ref_time": "2017-08-16T10:57:00", "gold_parse": "Interval[]{2017-09-09 09:00 (X/X) - 2017-09-09 12:00 (X/X)}", "language": "de" }, { "text": "am 16.11. um 13:35 Uhr", "ref_time": "2017-11-14T10:29:41", "gold_parse": "Time[]{2017-11-16 13:35 (X/X)}", "language": "de" }, { "text": "27.9. mittags bis 29.9. morgens", "ref_time": "2017-09-13T14:50:21", "gold_parse": "Interval[]{2017-09-27 X:X (X/noon) - 2017-09-29 X:X (X/morning)}", "language": "de" }, { "text": "12.11 6:10 - 13:35", "ref_time": "2017-10-06T12:25:20", "gold_parse": "Interval[]{2017-11-12 06:10 (X/X) - 2017-11-12 13:35 (X/X)}", "language": "de" }, { "text": "Monday 11th December by early evening", "ref_time": "2017-11-06T16:09:02", "gold_parse": "Time[]{2017-12-11 X:X (X/earlyevening)}", "language": "en" }, { "text": "15.11 - 17.11", "ref_time": "2017-10-19T07:50:51", "gold_parse": "Interval[]{2017-11-15 X:X (X/X) - 2017-11-17 X:X (X/X)}", "language": "de" }, { "text": "am 14.09.2017 ca. 7.30", "ref_time": "2017-08-08T10:40:29", "gold_parse": "Time[]{2017-09-14 07:30 (X/X)}", "language": "de" }, { "text": "16.05.17 14:37", "ref_time": "2017-05-10T15:57:17", "gold_parse": "Time[]{2017-05-16 14:37 (X/X)}", "language": "de" }, { "text": "September 5th", "ref_time": "2017-08-01T11:52:12", "gold_parse": "Time[]{2017-09-05 X:X (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-10-17T12:32:57", "gold_parse": "Time[]{2017-10-17 X:X (X/X)}", "language": "de" }, { "text": "14.11.2017", "ref_time": "2017-11-06T11:24:09", "gold_parse": "Time[]{2017-11-14 X:X (X/X)}", "language": "de" }, { "text": "04. - 05.12.2017", "ref_time": "2017-11-22T08:27:43", "gold_parse": "Interval[]{2017-12-04 X:X (X/X) - 2017-12-05 X:X (X/X)}", "language": "de" }, { "text": "19.09.", "ref_time": "2017-08-16T10:07:24", "gold_parse": "Time[]{2017-09-19 X:X (X/X)}", "language": "de" }, { "text": "08 auf 09 Nov.", "ref_time": "2017-10-17T05:14:47", "gold_parse": "Interval[]{2017-11-08 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "kommenden Sonntag, 10. September 12.00 h", "ref_time": "2017-09-07T16:12:31", "gold_parse": "Time[]{2017-09-10 12:00 (X/X)}", "language": "de" }, { "text": "Di. 27.09. kurz vor 9 Uhr", "ref_time": "2017-09-18T13:26:38", "gold_parse": "Interval[]{None - 2017-09-27 09:00 (X/X)}", "language": "de" }, { "text": "24. auf 25.", "ref_time": "2017-06-28T15:41:46", "gold_parse": "Interval[]{2017-07-24 X:X (X/X) - 2017-07-25 X:X (X/X)}", "language": "de" }, { "text": "03.07.2017 ab 18:00 bis später Abends", "ref_time": "2017-06-28T14:06:13", "gold_parse": "Interval[]{2017-07-03 18:00 (X/X) - None}", "language": "de" }, { "text": "28.08.2017 früh", "ref_time": "2017-08-21T07:19:01", "gold_parse": "Time[]{2017-08-28 X:X (X/morning)}", "language": "de" }, { "text": "17.05. ca 08:30", "ref_time": "2017-05-16T12:23:03", "gold_parse": "Time[]{2017-05-17 08:30 (X/X)}", "language": "de" }, { "text": "Di., 01.08.2017 07.40", "ref_time": "2017-07-27T09:28:06", "gold_parse": "Time[]{2017-08-01 07:40 (X/X)}", "language": "de" }, { "text": "11. Oktober um 7:30", "ref_time": "2017-10-04T06:55:27", "gold_parse": "Time[]{2017-10-11 07:30 (X/X)}", "language": "de" }, { "text": "September 6th after 9pm", "ref_time": "2017-08-14T08:27:59", "gold_parse": "Interval[]{2017-09-06 21:00 (X/X) - None}", "language": "en" }, { "text": "20.06.2017 06:34 Uhr", "ref_time": "2017-06-16T10:26:43", "gold_parse": "Time[]{2017-06-20 06:34 (X/X)}", "language": "de" }, { "text": "13 Nov", "ref_time": "2017-08-25T12:15:35", "gold_parse": "Time[]{2017-11-13 X:X (X/X)}", "language": "en" }, { "text": "23.06.2017", "ref_time": "2017-06-08T08:44:19", "gold_parse": "Time[]{2017-06-23 X:X (X/X)}", "language": "de" }, { "text": "25.09.2017", "ref_time": "2017-09-21T11:52:31", "gold_parse": "Time[]{2017-09-25 X:X (X/X)}", "language": "de" }, { "text": "am 16.06.", "ref_time": "2017-05-16T08:47:26", "gold_parse": "Time[]{2017-06-16 X:X (X/X)}", "language": "de" }, { "text": "am Dienstag 15.08.", "ref_time": "2017-08-10T13:38:13", "gold_parse": "Time[]{2017-08-15 X:X (X/X)}", "language": "de" }, { "text": "morgens am 19.09.", "ref_time": "2017-09-11T16:20:10", "gold_parse": "Time[]{2017-09-19 X:X (X/morning)}", "language": "de" }, { "text": "Monday May 22nd around 16.40", "ref_time": "2017-05-16T08:58:31", "gold_parse": "Time[]{2017-05-22 16:40 (X/X)}", "language": "en" }, { "text": "4. Oktober", "ref_time": "2017-09-26T10:59:32", "gold_parse": "Time[]{2017-10-04 X:X (X/X)}", "language": "de" }, { "text": "20.06.2017", "ref_time": "2017-06-09T09:40:55", "gold_parse": "Time[]{2017-06-20 X:X (X/X)}", "language": "de" }, { "text": "28.08.2017", "ref_time": "2017-08-24T14:33:06", "gold_parse": "Time[]{2017-08-28 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag 25.05 18:30", "ref_time": "2017-05-22T08:08:36", "gold_parse": "Time[]{2017-05-25 18:30 (X/X)}", "language": "de" }, { "text": "vom 09.08.-10.08.2017", "ref_time": "2017-08-08T08:09:50", "gold_parse": "Interval[]{2017-08-09 X:X (X/X) - 2017-08-10 X:X (X/X)}", "language": "de" }, { "text": "am 03.07.2017 ca. 16.30 Uhr", "ref_time": "2017-06-27T08:48:42", "gold_parse": "Time[]{2017-07-03 16:30 (X/X)}", "language": "de" }, { "text": "11.09.2017", "ref_time": "2017-07-25T10:03:13", "gold_parse": "Time[]{2017-09-11 X:X (X/X)}", "language": "de" }, { "text": "08.-09.11.17", "ref_time": "2017-10-18T13:15:30", "gold_parse": "Interval[]{2017-11-08 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "Dienstag, 8.8. 14:31h", "ref_time": "2017-08-08T08:28:56", "gold_parse": "Time[]{2017-08-08 14:31 (X/X)}", "language": "de" }, { "text": "12.11.2017 21:55", "ref_time": "2017-10-17T09:41:49", "gold_parse": "Time[]{2017-11-12 21:55 (X/X)}", "language": "de" }, { "text": "am 16.11.2017", "ref_time": "2017-11-02T08:25:23", "gold_parse": "Time[]{2017-11-16 X:X (X/X)}", "language": "de" }, { "text": "um 06:01", "ref_time": "2017-07-05T15:09:49", "gold_parse": "Time[]{2017-07-18 06:01 (X/X)}", "language": "de" }, { "text": "05.06.17", "ref_time": "2017-05-29T10:11:00", "gold_parse": "Time[]{2017-06-05 X:X (X/X)}", "language": "de" }, { "text": "Freitag, 26.05.17 nach 18 Uhr", "ref_time": "2017-05-15T07:47:37", "gold_parse": "Interval[]{2017-05-26 18:00 (X/X) - None}", "language": "de" }, { "text": "heute bis 14:00 Uhr", "ref_time": "2017-09-07T07:10:59", "gold_parse": "Interval[]{2017-09-07 08:00 (X/X) - 2017-09-07 14:00 (X/X)}", "language": "de" }, { "text": "24.02.2018 06:20 Uhr", "ref_time": "2017-11-30T10:31:46", "gold_parse": "Time[]{2018-02-24 06:20 (X/X)}", "language": "de" }, { "text": "16.08. abends", "ref_time": "2017-08-01T08:04:29", "gold_parse": "Time[]{2017-08-16 X:X (X/evening)}", "language": "de" }, { "text": "am 17. November 2017 ab 18:30 Uhr", "ref_time": "2017-09-27T09:45:09", "gold_parse": "Interval[]{2017-11-17 18:30 (X/X) - None}", "language": "de" }, { "text": "03.11. nicht später als 20.00 Uhr", "ref_time": "2017-10-23T10:04:20", "gold_parse": "Interval[]{None - 2017-11-03 20:00 (X/X)}", "language": "de" }, { "text": "am 08.10.17", "ref_time": "2017-09-27T12:27:48", "gold_parse": "Time[]{2017-10-08 X:X (X/X)}", "language": "de" }, { "text": "November 7th around 17:00", "ref_time": "2017-10-17T14:33:24", "gold_parse": "Time[]{2017-11-07 17:00 (X/X)}", "language": "en" }, { "text": "vom 22.11.-23.11.", "ref_time": "2017-11-21T11:14:39", "gold_parse": "Interval[]{2017-11-22 X:X (X/X) - 2017-11-23 X:X (X/X)}", "language": "de" }, { "text": "17.07.2017 23:55 Uhr", "ref_time": "2017-06-23T12:40:07", "gold_parse": "Time[]{2017-07-17 23:55 (X/X)}", "language": "de" }, { "text": "01.06.2017", "ref_time": "2017-05-15T08:49:09", "gold_parse": "Time[]{2017-06-01 X:X (X/X)}", "language": "de" }, { "text": "13.07.2017", "ref_time": "2017-06-13T13:37:18", "gold_parse": "Time[]{2017-07-13 X:X (X/X)}", "language": "de" }, { "text": "20.06.2017 07:20 Uhr", "ref_time": "2017-06-08T07:13:03", "gold_parse": "Time[]{2017-06-20 07:20 (X/X)}", "language": "de" }, { "text": "12.10. ca. 16:10 Uhr", "ref_time": "2017-10-02T06:28:25", "gold_parse": "Time[]{2017-10-12 16:10 (X/X)}", "language": "de" }, { "text": "am 12.09.17 um 14:34 Uhr", "ref_time": "2017-09-11T14:48:58", "gold_parse": "Time[]{2017-09-12 14:34 (X/X)}", "language": "de" }, { "text": "am 03.07.2017 20:30 Uhr", "ref_time": "2017-06-28T10:15:55", "gold_parse": "Time[]{2017-07-03 20:30 (X/X)}", "language": "de" }, { "text": "Dienstag, 10.10.", "ref_time": "2017-10-08T10:54:25", "gold_parse": "Time[]{2017-10-10 X:X (X/X)}", "language": "de" }, { "text": "Tuesday evening", "ref_time": "2017-10-19T09:07:57", "gold_parse": "Time[]{2017-10-24 X:X (X/evening)}", "language": "en" }, { "text": "am 15.9. um 7:45", "ref_time": "2017-06-17T08:55:57", "gold_parse": "Time[]{2017-09-15 07:45 (X/X)}", "language": "de" }, { "text": "3.10.-4.10.", "ref_time": "2017-09-19T08:33:42", "gold_parse": "Interval[]{2017-10-03 X:X (X/X) - 2017-10-04 X:X (X/X)}", "language": "de" }, { "text": "18.10.2017 10.30 Uhr", "ref_time": "2017-10-17T06:17:17", "gold_parse": "Time[]{2017-10-18 10:30 (X/X)}", "language": "de" }, { "text": "12.06-13.06", "ref_time": "2017-06-06T07:52:13", "gold_parse": "Interval[]{2017-06-12 X:X (X/X) - 2017-06-13 X:X (X/X)}", "language": "de" }, { "text": "Wed 1 Nov 0805", "ref_time": "2017-10-29T18:23:09", "gold_parse": "Time[]{2017-11-01 08:05 (X/X)}", "language": "en" }, { "text": "Nacht vom 11. auf den 12. 12", "ref_time": "2017-11-23T16:01:56", "gold_parse": "Interval[]{2017-12-11 X:X (X/X) - 2017-12-12 X:X (X/X)}", "language": "de" }, { "text": "12.6. abends", "ref_time": "2017-06-02T10:21:48", "gold_parse": "Time[]{2017-06-12 X:X (X/evening)}", "language": "de" }, { "text": "Tuesday 23 May Evening", "ref_time": "2017-05-16T07:42:34", "gold_parse": "Time[]{2017-05-23 X:X (X/evening)}", "language": "en" }, { "text": "05.09.17", "ref_time": "2017-07-21T08:40:48", "gold_parse": "Time[]{2017-09-05 X:X (X/X)}", "language": "de" }, { "text": "19/12 1510-1640", "ref_time": "2017-10-03T15:13:10", "gold_parse": "Interval[]{2017-12-19 15:10 (X/X) - 2017-12-19 16:40 (X/X)}", "language": "en" }, { "text": "morgen 07:42", "ref_time": "2017-11-22T14:22:53", "gold_parse": "Time[]{2017-11-23 07:42 (X/X)}", "language": "de" }, { "text": "25th", "ref_time": "2017-08-11T08:06:02", "gold_parse": "Time[]{2017-08-25 X:X (X/X)}", "language": "en" }, { "text": "Sonntag 22.10", "ref_time": "2017-10-10T12:06:29", "gold_parse": "Time[]{2017-10-22 X:X (X/X)}", "language": "de" }, { "text": "30. Mai 2017 gegen 17 Uhr", "ref_time": "2017-05-26T07:44:16", "gold_parse": "Time[]{2017-05-30 17:00 (X/X)}", "language": "de" }, { "text": "2017-10-09 17:44", "ref_time": "2017-10-05T14:25:25", "gold_parse": "Time[]{2017-10-09 17:44 (X/X)}", "language": "de" }, { "text": "on 24 october", "ref_time": "2017-09-22T10:40:47", "gold_parse": "Time[]{2017-10-24 X:X (X/X)}", "language": "en" }, { "text": "vom 15.06. - 17.06.2017", "ref_time": "2017-06-01T08:18:01", "gold_parse": "Interval[]{2017-06-15 X:X (X/X) - 2017-06-17 X:X (X/X)}", "language": "de" }, { "text": "03.11.2017 ab 18:00 Uhr", "ref_time": "2017-10-20T11:53:44", "gold_parse": "Interval[]{2017-11-03 18:00 (X/X) - None}", "language": "de" }, { "text": "Do, 09.11.17 07:26", "ref_time": "2017-11-06T08:31:59", "gold_parse": "Time[]{2017-11-09 07:26 (X/X)}", "language": "de" }, { "text": "am Donnerstag gegen 21 Uhr", "ref_time": "2017-09-18T07:48:21", "gold_parse": "Time[]{2017-09-28 21:00 (X/X)}", "language": "de" }, { "text": "Sonntag 18ter", "ref_time": "2017-06-07T08:54:08", "gold_parse": "Time[]{2017-06-18 X:X (X/X)}", "language": "de" }, { "text": "07.12.17", "ref_time": "2017-11-28T07:54:10", "gold_parse": "Time[]{2017-12-07 X:X (X/X)}", "language": "de" }, { "text": "25.10.-26.10.2017", "ref_time": "2017-10-23T11:05:19", "gold_parse": "Interval[]{2017-10-25 X:X (X/X) - 2017-10-26 X:X (X/X)}", "language": "de" }, { "text": "next week Tues morning", "ref_time": "2017-07-31T15:28:22", "gold_parse": "Time[]{2017-08-08 X:X (X/morning)}", "language": "en" }, { "text": "03.09.2017", "ref_time": "2017-08-18T07:31:48", "gold_parse": "Time[]{2017-09-03 X:X (X/X)}", "language": "de" }, { "text": "16.08.17 nachmittags", "ref_time": "2017-08-04T12:23:27", "gold_parse": "Time[]{2017-08-16 X:X (X/afternoon)}", "language": "de" }, { "text": "05.09.2017 ab mittags", "ref_time": "2017-09-01T09:58:57", "gold_parse": "Time[]{2017-09-05 X:X (X/noon)}", "language": "de" }, { "text": "03.08. 7:00", "ref_time": "2017-07-28T12:35:10", "gold_parse": "Time[]{2017-08-03 07:00 (X/X)}", "language": "en" }, { "text": "8.11 in the evening", "ref_time": "2017-11-06T08:17:33", "gold_parse": "Time[]{2017-11-08 X:X (X/evening)}", "language": "en" }, { "text": "6.11. ca. 10:30 Uhr", "ref_time": "2017-10-30T14:14:24", "gold_parse": "Time[]{2017-11-06 10:30 (X/X)}", "language": "de" }, { "text": "09.06.2017", "ref_time": "2017-06-02T06:31:34", "gold_parse": "Time[]{2017-06-09 X:X (X/X)}", "language": "de" }, { "text": "1st December around 6pm", "ref_time": "2017-11-23T08:59:53", "gold_parse": "Time[]{2017-12-01 18:00 (X/X)}", "language": "en" }, { "text": "Do, 28.09. gegen 9.30 Uhr", "ref_time": "2017-09-25T12:21:15", "gold_parse": "Time[]{2017-09-28 09:30 (X/X)}", "language": "de" }, { "text": "6.12", "ref_time": "2017-11-01T12:43:18", "gold_parse": "Time[]{2017-12-06 X:X (X/X)}", "language": "de" }, { "text": "19.10.", "ref_time": "2017-10-09T14:30:42", "gold_parse": "Time[]{2017-10-19 X:X (X/X)}", "language": "de" }, { "text": "11.09.2017 06:30 Uhr", "ref_time": "2017-08-21T06:14:21", "gold_parse": "Time[]{2017-09-11 06:30 (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-10-13T08:36:53", "gold_parse": "Time[]{2017-10-13 X:X (X/X)}", "language": "de" }, { "text": "von Donnerstag den 30.11. auf Sonnabend den 02.12.2017", "ref_time": "2017-11-24T05:43:49", "gold_parse": "Interval[]{2017-11-30 X:X (X/X) - 2017-12-02 X:X (X/X)}", "language": "de" }, { "text": "12.07.", "ref_time": "2017-07-10T15:17:25", "gold_parse": "Time[]{2017-07-12 X:X (X/X)}", "language": "de" }, { "text": "30.11. um 20:10h", "ref_time": "2017-10-26T10:32:11", "gold_parse": "Time[]{2017-11-30 20:10 (X/X)}", "language": "de" }, { "text": "am 18.09.2017 um ca. 14:00 Uhr", "ref_time": "2017-09-07T06:24:09", "gold_parse": "Time[]{2017-09-18 14:00 (X/X)}", "language": "de" }, { "text": "5.10.2017 Mittagszeit", "ref_time": "2017-08-29T07:40:49", "gold_parse": "Time[]{2017-10-05 X:X (X/noon)}", "language": "de" }, { "text": "15.09.2017 18:00 Uhr", "ref_time": "2017-08-21T06:14:21", "gold_parse": "Time[]{2017-09-15 18:00 (X/X)}", "language": "de" }, { "text": "04. Dezember 2017 13:40 - 17.36 Uhr", "ref_time": "2017-10-12T12:04:27", "gold_parse": "Interval[]{2017-12-04 13:40 (X/X) - 2017-12-04 17:36 (X/X)}", "language": "de" }, { "text": "18. Juli 10:45", "ref_time": "2017-07-10T13:09:12", "gold_parse": "Time[]{2017-07-18 10:45 (X/X)}", "language": "de" }, { "text": "10.11.17", "ref_time": "2017-11-06T09:27:45", "gold_parse": "Time[]{2017-11-10 X:X (X/X)}", "language": "de" }, { "text": "15/11 bis don 16/11 1 Nacht", "ref_time": "2017-11-01T17:13:55", "gold_parse": "Interval[]{2017-11-15 X:X (X/X) - 2017-11-16 X:X (X/X)}", "language": "de" }, { "text": "9-10", "ref_time": "2022-12-13T14:20:39", "gold_parse": "Interval[]{X-X-X 09:00 (X/X) - X-X-X 10:00 (X/X)}", "language": "en" }, { "text": "11-15", "ref_time": "2022-12-13T10:20:39", "gold_parse": "Interval[]{X-X-X 11:00 (X/X) - X-X-X 15:00 (X/X)}", "language": "en" }, { "text": "9", "ref_time": "2022-12-13T14:20:39", "gold_parse": "Time[]{2017-11-10 21:00 (X/X)}", "language": "en" }, { "text": "monday 5-9", "ref_time": "2022-12-13T14:20:39", "gold_parse": "Interval[]{2022-12-19 17:00 (X/X) - 2022-12-19 21:00 (X/X)}", "language": "en" }, { "text": "on June 14", "ref_time": "2017-05-29T15:01:39", "gold_parse": "Time[]{2017-06-14 X:X (X/X)}", "language": "en" }, { "text": "11.11.2017 16:36h", "ref_time": "2017-11-09T15:35:08", "gold_parse": "Time[]{2017-11-11 16:36 (X/X)}", "language": "de" }, { "text": "21.07", "ref_time": "2017-07-04T14:45:02", "gold_parse": "Time[]{2017-07-21 X:X (X/X)}", "language": "de" }, { "text": "Evening of 16 Nov", "ref_time": "2017-08-25T09:43:25", "gold_parse": "Time[]{2017-11-16 X:X (X/evening)}", "language": "en" }, { "text": "Freitag, 06.10. um 17:30 Uhr", "ref_time": "2017-09-19T12:55:12", "gold_parse": "Time[]{2017-10-06 17:30 (X/X)}", "language": "de" }, { "text": "09.08.2017, 07:30 Uhr", "ref_time": "2017-08-08T08:09:50", "gold_parse": "Time[]{2017-08-09 07:30 (X/X)}", "language": "de" }, { "text": "18/06 evening", "ref_time": "2017-05-16T11:20:47", "gold_parse": "Time[]{2017-06-18 X:X (X/evening)}", "language": "de" }, { "text": "07.11.17 21:15", "ref_time": "2017-11-06T08:48:13", "gold_parse": "Time[]{2017-11-07 21:15 (X/X)}", "language": "de" }, { "text": "Wednesday 5 July, 20:15", "ref_time": "2017-06-20T11:08:58", "gold_parse": "Time[]{2017-07-05 20:15 (X/X)}", "language": "en" }, { "text": "30.06. 14:55", "ref_time": "2017-06-27T09:12:55", "gold_parse": "Time[]{2017-06-30 14:55 (X/X)}", "language": "de" }, { "text": "vom 13.11. zum 14.11.", "ref_time": "2017-10-25T07:33:57", "gold_parse": "Interval[]{2017-11-13 X:X (X/X) - 2017-11-14 X:X (X/X)}", "language": "de" }, { "text": "1. Aug. 2017 15:20 Uhr", "ref_time": "2017-07-28T10:16:45", "gold_parse": "Time[]{2017-08-01 15:20 (X/X)}", "language": "de" }, { "text": "am 17.11.2017", "ref_time": "2017-11-09T13:00:16", "gold_parse": "Time[]{2017-11-17 X:X (X/X)}", "language": "de" }, { "text": "Fr 08.12.17", "ref_time": "2017-10-09T06:58:40", "gold_parse": "Time[]{2017-12-08 X:X (X/X)}", "language": "de" }, { "text": "25.10.17", "ref_time": "2017-07-12T08:23:10", "gold_parse": "Time[]{2017-10-25 X:X (X/X)}", "language": "de" }, { "text": "15.05. ab 07.30 Uhr", "ref_time": "2017-05-11T13:15:54", "gold_parse": "Interval[]{2017-05-15 07:30 (X/X) - None}", "language": "de" }, { "text": "16.12 gegen 10:00", "ref_time": "2017-11-21T09:54:14", "gold_parse": "Time[]{2017-12-16 10:00 (X/X)}", "language": "de" }, { "text": "30.05.2017 bis 31.05.2017", "ref_time": "2017-05-29T13:45:48", "gold_parse": "Interval[]{2017-05-30 X:X (X/X) - 2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "13.10.2017 17:30", "ref_time": "2017-10-11T07:09:01", "gold_parse": "Time[]{2017-10-13 17:30 (X/X)}", "language": "de" }, { "text": "19.10. 9:00", "ref_time": "2017-08-29T12:30:16", "gold_parse": "Time[]{2017-10-19 09:00 (X/X)}", "language": "de" }, { "text": "24.11.2017", "ref_time": "2017-10-18T09:24:02", "gold_parse": "Time[]{2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "2017-10-09 17:44", "ref_time": "2017-10-05T14:25:25", "gold_parse": "Time[]{2017-10-09 17:44 (X/X)}", "language": "de" }, { "text": "26.10.2017", "ref_time": "2017-09-26T13:44:07", "gold_parse": "Time[]{2017-10-26 X:X (X/X)}", "language": "de" }, { "text": "Sonntag, 19.11.2017", "ref_time": "2017-08-30T07:03:05", "gold_parse": "Time[]{2017-11-19 X:X (X/X)}", "language": "de" }, { "text": "30.11. um 19:00h", "ref_time": "2017-10-24T13:31:48", "gold_parse": "Time[]{2017-11-30 19:00 (X/X)}", "language": "de" }, { "text": "24.06.2017", "ref_time": "2017-05-31T06:27:12", "gold_parse": "Time[]{2017-06-24 X:X (X/X)}", "language": "de" }, { "text": "2.", "ref_time": "2017-06-29T06:15:58", "gold_parse": "Time[]{2017-07-02 X:X (X/X)}", "language": "de" }, { "text": "17. Oktober morgens", "ref_time": "2017-10-05T16:16:53", "gold_parse": "Time[]{2017-10-17 X:X (X/morning)}", "language": "de" }, { "text": "Monday", "ref_time": "2017-07-19T16:16:33", "gold_parse": "Time[]{2017-07-24 X:X (X/X)}", "language": "de" }, { "text": "13 loka 10:05", "ref_time": "2017-09-13T14:48:21", "gold_parse": "Time[]{2017-10-13 10:05 (X/X)}", "language": "en" }, { "text": "21.09.2017 um 12:15 Uhr", "ref_time": "2017-08-25T13:57:05", "gold_parse": "Time[]{2017-09-21 12:15 (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-09-06T08:57:05", "gold_parse": "Time[]{2017-09-06 X:X (X/X)}", "language": "de" }, { "text": "on 22.08.2017 13:00", "ref_time": "2017-08-17T11:21:07", "gold_parse": "Time[]{2017-08-22 13:00 (X/X)}", "language": "en" }, { "text": "am Freitag 8am", "ref_time": "2017-10-16T14:57:29", "gold_parse": "Time[]{2017-10-17 08:00 (X/X)}", "language": "de" }, { "text": "08.08.17 9.30-11.05 Uhr", "ref_time": "2017-07-26T07:13:26", "gold_parse": "Interval[]{2017-08-08 09:30 (X/X) - 2017-08-08 11:05 (X/X)}", "language": "de" }, { "text": "November 6, 2017", "ref_time": "2017-10-09T09:38:20", "gold_parse": "Time[]{2017-11-06 X:X (X/X)}", "language": "other" }, { "text": "on Monday 17th of July around noon", "ref_time": "2017-07-11T07:31:58", "gold_parse": "Time[]{2017-07-17 X:X (X/noon)}", "language": "de" }, { "text": "14.07.", "ref_time": "2017-07-05T14:24:14", "gold_parse": "Time[]{2017-07-14 X:X (X/X)}", "language": "de" }, { "text": "12.06.2017", "ref_time": "2017-06-07T08:08:53", "gold_parse": "Time[]{2017-06-12 X:X (X/X)}", "language": "de" }, { "text": "09.07. 14:15WAW", "ref_time": "2017-06-22T09:20:01", "gold_parse": "Time[]{2017-07-09 14:15 (X/X)}", "language": "de" }, { "text": "am 26.06.2017 13:10 - 16:05", "ref_time": "2017-06-06T16:55:56", "gold_parse": "Interval[]{2017-06-26 13:10 (X/X) - 2017-06-26 16:05 (X/X)}", "language": "de" }, { "text": "19.09. - 21.09.", "ref_time": "2017-09-06T12:45:55", "gold_parse": "Interval[]{2017-09-19 X:X (X/X) - 2017-09-21 X:X (X/X)}", "language": "de" }, { "text": "23.10.2017 ca. 10.00 Uhr", "ref_time": "2017-10-18T14:10:43", "gold_parse": "Time[]{2017-10-23 10:00 (X/X)}", "language": "de" }, { "text": "27.6. ab 8.30 Uhr", "ref_time": "2017-06-20T17:50:10", "gold_parse": "Interval[]{2017-06-27 08:30 (X/X) - None}", "language": "de" }, { "text": "19.07.17", "ref_time": "2017-06-28T07:02:41", "gold_parse": "Time[]{2017-07-19 X:X (X/X)}", "language": "de" }, { "text": "14.09.2017", "ref_time": "2017-08-29T08:08:17", "gold_parse": "Time[]{2017-09-14 X:X (X/X)}", "language": "en" }, { "text": "Sunday 15.10.", "ref_time": "2017-10-11T12:25:46", "gold_parse": "Time[]{2017-10-15 X:X (X/X)}", "language": "en" }, { "text": "28.11. 08:28-09:43", "ref_time": "2017-11-27T10:08:21", "gold_parse": "Interval[]{2017-11-28 08:28 (X/X) - 2017-11-28 09:43 (X/X)}", "language": "de" }, { "text": "13.09.2017 17:15 - 18:25 Uhr", "ref_time": "2017-09-05T11:18:22", "gold_parse": "Interval[]{2017-09-13 17:15 (X/X) - 2017-09-13 18:25 (X/X)}", "language": "de" }, { "text": "vom 19.07. zum 21.07.", "ref_time": "2017-07-13T14:27:10", "gold_parse": "Interval[]{2017-07-19 X:X (X/X) - 2017-07-21 X:X (X/X)}", "language": "de" }, { "text": "02.07.2017 Nachmittags", "ref_time": "2017-06-01T06:42:27", "gold_parse": "Time[]{2017-07-02 X:X (X/afternoon)}", "language": "de" }, { "text": "28. Juli gegen 13 Uhr ca", "ref_time": "2017-06-22T13:11:56", "gold_parse": "Time[]{2017-07-28 13:00 (X/X)}", "language": "de" }, { "text": "am Montag den 03.07. 09:50", "ref_time": "2017-06-30T12:49:18", "gold_parse": "Time[]{2017-07-03 09:50 (X/X)}", "language": "de" }, { "text": "30. Juni 2017", "ref_time": "2017-06-20T06:48:59", "gold_parse": "Time[]{2017-06-30 X:X (X/X)}", "language": "de" }, { "text": "kommende Woche Dienstag bis Donnerstag", "ref_time": "2017-05-12T11:37:21", "gold_parse": "Interval[]{2017-05-16 X:X (X/X) - 2017-05-18 X:X (X/X)}", "language": "de" }, { "text": "15 Sept 1410-1745ECO", "ref_time": "2017-09-06T11:52:28", "gold_parse": "Interval[]{2017-09-15 14:10 (X/X) - 2017-09-15 17:45 (X/X)}", "language": "en" }, { "text": "31 Jul evening", "ref_time": "2017-07-11T15:32:37", "gold_parse": "Time[]{2017-07-31 X:X (X/evening)}", "language": "de" }, { "text": "heute", "ref_time": "2017-11-27T06:32:11", "gold_parse": "Time[]{2017-11-27 X:X (X/X)}", "language": "de" }, { "text": "27 SEP, 17:15", "ref_time": "2017-09-10T15:46:24", "gold_parse": "Time[]{2017-09-27 17:15 (X/X)}", "language": "en" }, { "text": "vom 09.-10.11.", "ref_time": "2017-10-06T14:29:56", "gold_parse": "Interval[]{2017-11-09 X:X (X/X) - 2017-11-10 X:X (X/X)}", "language": "de" }, { "text": "22.06.2017 früh morgens", "ref_time": "2017-06-08T07:30:27", "gold_parse": "Time[]{2017-06-22 X:X (X/earlymorning)}", "language": "de" }, { "text": "13.11.2017 ca. 16:00 Uhr", "ref_time": "2017-11-08T09:17:54", "gold_parse": "Time[]{2017-11-13 16:00 (X/X)}", "language": "de" }, { "text": "Mittwoch, 22.11.2017", "ref_time": "2017-08-30T07:03:05", "gold_parse": "Time[]{2017-11-22 X:X (X/X)}", "language": "de" }, { "text": "Thursday 30th November", "ref_time": "2017-11-08T13:35:32", "gold_parse": "Time[]{2017-11-30 X:X (X/X)}", "language": "en" }, { "text": "Dienstag, den 19.09.2017 abends", "ref_time": "2017-09-13T07:26:35", "gold_parse": "Time[]{2017-09-19 X:X (X/evening)}", "language": "de" }, { "text": "1 Nov 1015", "ref_time": "2017-08-25T12:23:01", "gold_parse": "Time[]{2017-11-02 10:15 (X/X)}", "language": "en" }, { "text": "21.08.2017", "ref_time": "2017-08-21T12:12:46", "gold_parse": "Time[]{2017-08-21 X:X (X/X)}", "language": "de" }, { "text": "on Sunday 1925", "ref_time": "2017-06-20T15:44:48", "gold_parse": "Time[]{2017-06-25 19:25 (X/X)}", "language": "en" }, { "text": "29.05.2017 bis 02.06.2017", "ref_time": "2017-05-22T09:55:16", "gold_parse": "Interval[]{2017-05-29 X:X (X/X) - 2017-06-02 X:X (X/X)}", "language": "de" }, { "text": "Monday 27 November between 16:00 and 21:00", "ref_time": "2017-11-20T12:23:28", "gold_parse": "Interval[]{2017-11-27 16:00 (X/X) - 2017-11-27 21:00 (X/X)}", "language": "en" }, { "text": "23.10.", "ref_time": "2017-08-28T09:22:01", "gold_parse": "Time[]{2017-10-23 X:X (X/X)}", "language": "de" }, { "text": "on December 7 th evening", "ref_time": "2017-10-30T13:44:04", "gold_parse": "Time[]{2017-12-07 X:X (X/evening)}", "language": "en" }, { "text": "23.08.17", "ref_time": "2017-08-11T13:04:59", "gold_parse": "Time[]{2017-08-23 X:X (X/X)}", "language": "de" }, { "text": "Next week Monday", "ref_time": "2017-05-25T09:17:54", "gold_parse": "Time[]{2017-05-29 X:X (X/X)}", "language": "en" }, { "text": "Wednesday 27th late evening (around 8pm", "ref_time": "2017-09-22T15:36:00", "gold_parse": "Time[]{2017-09-27 20:00 (X/X)}", "language": "de" }, { "text": "1.6.", "ref_time": "2017-05-22T13:26:23", "gold_parse": "Time[]{2017-06-01 X:X (X/X)}", "language": "de" }, { "text": "on Wednesday 21/06", "ref_time": "2017-06-13T09:01:59", "gold_parse": "Time[]{2017-06-21 X:X (X/X)}", "language": "en" }, { "text": "am 17.09.", "ref_time": "2017-09-11T13:58:07", "gold_parse": "Time[]{2017-09-17 X:X (X/X)}", "language": "de" }, { "text": "ab Montag", "ref_time": "2017-07-19T10:39:14", "gold_parse": "Time[]{2017-07-24 X:X (X/X)}", "language": "de" }, { "text": "am 04.12.2017 13:59", "ref_time": "2017-11-29T10:51:43", "gold_parse": "Time[]{2017-12-04 13:59 (X/X)}", "language": "de" }, { "text": "am 14.06.2017 ab 18:00 h", "ref_time": "2017-06-06T12:16:24", "gold_parse": "Interval[]{2017-06-14 18:00 (X/X) - None}", "language": "de" }, { "text": "am Freitag ab 17.00 Uhr", "ref_time": "2017-10-19T06:03:26", "gold_parse": "Interval[]{2017-11-10 17:00 (X/X) - None}", "language": "de" }, { "text": "am 2. Oktober", "ref_time": "2017-09-19T07:19:59", "gold_parse": "Time[]{2017-10-02 X:X (X/X)}", "language": "de" }, { "text": "on the 5th Night", "ref_time": "2017-10-24T12:08:03", "gold_parse": "Time[]{2017-11-05 X:X (X/night)}", "language": "en" }, { "text": "03.07.", "ref_time": "2017-06-29T14:52:59", "gold_parse": "Time[]{2017-07-03 X:X (X/X)}", "language": "de" }, { "text": "11.09.2017", "ref_time": "2017-09-05T09:48:10", "gold_parse": "Time[]{2017-09-11 X:X (X/X)}", "language": "de" }, { "text": "25.09.2017 um 7:50 Uhr", "ref_time": "2017-08-23T07:19:50", "gold_parse": "Time[]{2017-09-25 07:50 (X/X)}", "language": "de" }, { "text": "30. August 17-18 Uhr", "ref_time": "2017-08-21T13:46:48", "gold_parse": "Interval[]{2017-08-30 17:00 (X/X) - 2017-08-30 18:00 (X/X)}", "language": "de" }, { "text": "am 20.11. 9:08", "ref_time": "2017-11-07T09:45:03", "gold_parse": "Time[]{2017-11-20 09:08 (X/X)}", "language": "de" }, { "text": "3. April abends", "ref_time": "2017-11-28T14:58:39", "gold_parse": "Time[]{2018-04-03 X:X (X/evening)}", "language": "de" }, { "text": "10.08.17 ab 13.00-14.00 Uhr", "ref_time": "2017-07-19T12:28:38", "gold_parse": "Interval[]{2017-08-10 13:00 (X/X) - 2017-08-10 14:00 (X/X)}", "language": "de" }, { "text": "27.09.", "ref_time": "2017-09-21T09:42:34", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "am 10.10.09. 08:00 h", "ref_time": "2017-09-19T11:40:01", "gold_parse": "Time[]{2017-10-10 08:00 (X/X)}", "language": "de" }, { "text": "17. November morgens", "ref_time": "2017-10-16T07:57:07", "gold_parse": "Time[]{2017-11-17 X:X (X/morning)}", "language": "de" }, { "text": "16.12 gegen 10:00 Uhr", "ref_time": "2017-11-21T09:54:14", "gold_parse": "Time[]{2017-12-16 10:00 (X/X)}", "language": "de" }, { "text": "10 JUL", "ref_time": "2017-06-26T13:27:25", "gold_parse": "Time[]{2017-07-10 X:X (X/X)}", "language": "de" }, { "text": "am 05.07.", "ref_time": "2017-06-27T08:05:03", "gold_parse": "Time[]{2017-07-05 X:X (X/X)}", "language": "de" }, { "text": "16.11.2017 ab 18:30 Uhr", "ref_time": "2017-09-28T11:14:08", "gold_parse": "Interval[]{2017-11-16 18:30 (X/X) - None}", "language": "de" }, { "text": "19.6 spätestens 14:00", "ref_time": "2017-06-14T13:45:59", "gold_parse": "Interval[]{None - 2017-06-19 14:00 (X/X)}", "language": "de" }, { "text": "Dienstag 27.06.2017 6:45", "ref_time": "2017-06-19T10:41:29", "gold_parse": "Time[]{2017-06-27 06:45 (X/X)}", "language": "de" }, { "text": "6.6. late", "ref_time": "2017-05-25T18:08:30", "gold_parse": "Time[]{2017-06-06 X:X (X/latenight)}", "language": "en" }, { "text": "01.06.2017 21:15", "ref_time": "2017-05-10T09:07:10", "gold_parse": "Time[]{2017-06-01 21:15 (X/X)}", "language": "de" }, { "text": "eine Nacht vom 11. Auf den 12. Oktober 2017", "ref_time": "2017-08-23T07:17:49", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "18.09.2017 09:06", "ref_time": "2017-09-15T11:02:59", "gold_parse": "Time[]{2017-09-18 09:06 (X/X)}", "language": "de" }, { "text": "18.7.17 8:45", "ref_time": "2017-07-17T07:52:28", "gold_parse": "Time[]{2017-07-18 08:45 (X/X)}", "language": "de" }, { "text": "14.7", "ref_time": "2017-07-03T08:36:18", "gold_parse": "Time[]{2017-07-14 X:X (X/X)}", "language": "de" }, { "text": "on 20th October", "ref_time": "2017-10-09T14:04:29", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "en" }, { "text": "10.10., 19:20", "ref_time": "2017-10-09T09:40:21", "gold_parse": "Time[]{2018-10-10 19:20 (X/X)}", "language": "de" }, { "text": "the first flight on 15 September", "ref_time": "2017-08-23T10:02:45", "gold_parse": "Time[]{2017-09-15 X:X (X/first)}", "language": "en" }, { "text": "12th of October", "ref_time": "2017-10-05T08:55:05", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "en" }, { "text": "Freitag 27.04.2018 16 Uhr", "ref_time": "2017-11-16T09:29:29", "gold_parse": "Time[]{2018-04-27 16:00 (X/X)}", "language": "de" }, { "text": "06.11. - 11.11.17", "ref_time": "2017-10-24T07:10:15", "gold_parse": "Interval[]{2017-11-06 X:X (X/X) - 2017-11-11 X:X (X/X)}", "language": "de" }, { "text": "heute (22.09.)", "ref_time": "2017-09-22T07:17:48", "gold_parse": "Time[]{2017-09-22 X:X (X/X)}", "language": "de" }, { "text": "am 04.10.17", "ref_time": "2017-09-28T13:38:59", "gold_parse": "Time[]{2017-10-04 X:X (X/X)}", "language": "de" }, { "text": "am 07.12. nach 18:00", "ref_time": "2017-11-17T14:21:56", "gold_parse": "Interval[]{2017-12-07 18:00 (X/X) - None}", "language": "de" }, { "text": "Wednesday 23.08. 22:00", "ref_time": "2017-08-17T10:31:26", "gold_parse": "Time[]{2017-08-23 22:00 (X/X)}", "language": "en" }, { "text": "Do., 28.09.2017 06:45", "ref_time": "2017-09-07T12:32:56", "gold_parse": "Time[]{2017-09-29 06:45 (X/X)}", "language": "de" }, { "text": "folgenden Morgen bis 10:00 Uhr", "ref_time": "2017-09-26T18:02:53", "gold_parse": "Interval[]{None - 2017-10-09 10:00 (X/X)}", "language": "de" }, { "text": "16.01. - 18.01.18", "ref_time": "2017-11-14T14:09:47", "gold_parse": "Interval[]{2018-01-16 X:X (X/X) - 2018-01-18 X:X (X/X)}", "language": "de" }, { "text": "on Tuesday morning 11.21 - 11.22 early evening", "ref_time": "2017-11-01T10:06:57", "gold_parse": "Interval[]{2017-11-21 X:X (X/morning) - 2017-11-22 X:X (X/evening)}", "language": "en" }, { "text": "June 7th 17.05-18.15", "ref_time": "2017-05-24T13:21:01", "gold_parse": "Interval[]{2017-06-07 17:05 (X/X) - 2017-06-07 18:15 (X/X)}", "language": "en" }, { "text": "1207-130717", "ref_time": "2017-06-16T12:06:59", "gold_parse": "Interval[]{2017-07-12 X:X (X/X) - 2017-07-13 X:X (X/X)}", "language": "de" }, { "text": "11.08. 08:50 Uhr", "ref_time": "2017-07-20T09:37:14", "gold_parse": "Time[]{2017-08-11 08:50 (X/X)}", "language": "de" }, { "text": "27.01.2017", "ref_time": "2017-10-17T07:26:14", "gold_parse": "Time[]{2017-01-27 X:X (X/X)}", "language": "de" }, { "text": "am Montag, 18. September ab 13h", "ref_time": "2017-09-12T12:32:39", "gold_parse": "Interval[]{2017-09-18 13:00 (X/X) - None}", "language": "de" }, { "text": "am 7.9. um 20:30 h", "ref_time": "2017-07-14T12:33:01", "gold_parse": "Time[]{2017-09-07 20:30 (X/X)}", "language": "de" }, { "text": "am 20.06. 18.20 Uhr", "ref_time": "2017-06-07T13:57:35", "gold_parse": "Time[]{2017-06-20 18:20 (X/X)}", "language": "de" }, { "text": "am 7.11.2017 Ab 19:50", "ref_time": "2017-10-05T11:16:47", "gold_parse": "Interval[]{2017-11-07 19:50 (X/X) - None}", "language": "de" }, { "text": "heute", "ref_time": "2017-10-08T12:10:27", "gold_parse": "Time[]{2017-10-08 X:X (X/X)}", "language": "de" }, { "text": "vom 21.11 bis 25.11", "ref_time": "2017-11-20T13:55:45", "gold_parse": "Interval[]{2017-11-21 X:X (X/X) - 2017-11-25 X:X (X/X)}", "language": "de" }, { "text": "27.09. gegen 17.30 Uhr", "ref_time": "2017-08-31T10:50:16", "gold_parse": "Time[]{2017-09-27 17:30 (X/X)}", "language": "de" }, { "text": "03.10.2017 um 16.55", "ref_time": "2017-08-30T10:00:11", "gold_parse": "Time[]{2017-10-03 16:55 (X/X)}", "language": "de" }, { "text": "diesen mittwoch abend ab 19:30", "ref_time": "2017-05-29T08:36:57", "gold_parse": "Interval[]{2017-05-31 19:30 (X/X) - None}", "language": "de" }, { "text": "24.5. 8:45", "ref_time": "2017-05-18T08:44:49", "gold_parse": "Time[]{2017-05-24 08:45 (X/X)}", "language": "de" }, { "text": "22.8-24.8.", "ref_time": "2017-08-18T12:21:14", "gold_parse": "Interval[]{2017-08-22 X:X (X/X) - 2017-08-24 X:X (X/X)}", "language": "de" }, { "text": "10.9.", "ref_time": "2017-07-24T11:44:10", "gold_parse": "Time[]{2017-09-10 X:X (X/X)}", "language": "de" }, { "text": "12 to 15 October 2017", "ref_time": "2017-07-05T12:54:08", "gold_parse": "Interval[]{2017-10-12 X:X (X/X) - 2017-10-15 X:X (X/X)}", "language": "en" }, { "text": "am 13.06.2017 nachmittags", "ref_time": "2017-05-30T13:31:26", "gold_parse": "Time[]{2017-06-13 X:X (X/afternoon)}", "language": "de" }, { "text": "28.11.17", "ref_time": "2017-11-23T11:24:16", "gold_parse": "Time[]{2017-11-28 X:X (X/X)}", "language": "de" }, { "text": "am 21.11. am frühen Abend", "ref_time": "2017-11-02T12:34:15", "gold_parse": "Time[]{2017-11-21 X:X (X/earlyevening)}", "language": "de" }, { "text": "am 05.10. abends", "ref_time": "2017-09-13T08:43:36", "gold_parse": "Time[]{2017-10-05 X:X (X/evening)}", "language": "de" }, { "text": "01.12.2017", "ref_time": "2017-11-21T14:01:19", "gold_parse": "Time[]{2017-12-01 X:X (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-11-30T10:11:23", "gold_parse": "Time[]{2017-11-30 X:X (X/X)}", "language": "de" }, { "text": "25.10.2017 um 18:09 Uhr", "ref_time": "2017-10-02T11:09:18", "gold_parse": "Time[]{2017-10-25 18:09 (X/X)}", "language": "de" }, { "text": "Mi, 12.07.17 09:49", "ref_time": "2017-07-10T14:08:13", "gold_parse": "Time[]{2017-07-12 09:49 (X/X)}", "language": "de" }, { "text": "05.06.2017 um 07.30 Uhr", "ref_time": "2017-05-18T10:02:23", "gold_parse": "Time[]{2017-06-05 07:30 (X/X)}", "language": "de" }, { "text": "27.10.2017 20-21", "ref_time": "2017-10-18T06:50:26", "gold_parse": "Interval[]{2017-10-27 20:00 (X/X) - 2017-10-27 21:00 (X/X)}", "language": "en" }, { "text": "6 Nov", "ref_time": "2017-08-25T12:23:01", "gold_parse": "Time[]{2017-11-06 X:X (X/X)}", "language": "en" }, { "text": "morgen selben Uhrzeit", "ref_time": "2017-09-27T11:38:48", "gold_parse": "Time[]{2017-09-28 17:00 (X/X)}", "language": "de" }, { "text": "vom 21. 11. Bis zum 23. 11.", "ref_time": "2017-11-15T11:37:40", "gold_parse": "Interval[]{2017-11-21 X:X (X/X) - 2017-11-23 X:X (X/X)}", "language": "de" }, { "text": "28.6.-4.7.", "ref_time": "2017-06-20T10:38:46", "gold_parse": "Interval[]{2017-06-28 X:X (X/X) - 2017-07-04 X:X (X/X)}", "language": "de" }, { "text": "am frühen Abend", "ref_time": "2017-09-14T06:04:38", "gold_parse": "Time[]{2017-10-04 X:X (X/earlyevening)}", "language": "de" }, { "text": "Vom 26.-27.09.2017", "ref_time": "2017-09-25T12:05:09", "gold_parse": "Interval[]{2017-09-26 X:X (X/X) - 2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "04.09.2017 15.10 Uhr", "ref_time": "2017-08-30T08:36:02", "gold_parse": "Time[]{2017-09-04 15:10 (X/X)}", "language": "de" }, { "text": "07 JUL 17:25", "ref_time": "2017-05-30T13:31:26", "gold_parse": "Time[]{2017-07-07 17:25 (X/X)}", "language": "de" }, { "text": "next Tuesday 8th early morning", "ref_time": "2017-07-31T17:45:15", "gold_parse": "Time[]{2017-08-08 X:X (X/earlymorning)}", "language": "en" }, { "text": "11. Sep. 2017 10:00 Uhr", "ref_time": "2017-07-26T13:12:26", "gold_parse": "Time[]{2017-09-11 10:00 (X/X)}", "language": "de" }, { "text": "Do., 26. Okt. 07:35+1 - 09:55+1", "ref_time": "2017-10-02T08:23:37", "gold_parse": "Interval[]{2017-10-27 07:35 (X/X) - 2017-10-27 09:55 (X/X)}", "language": "de" }, { "text": "morgen", "ref_time": "2017-11-06T20:45:09", "gold_parse": "Time[]{2017-11-07 X:X (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-07-25T16:27:58", "gold_parse": "Time[]{2017-07-25 X:X (X/X)}", "language": "de" }, { "text": "vom 16.10.-18.10.17", "ref_time": "2017-10-06T09:29:05", "gold_parse": "Interval[]{2017-10-16 X:X (X/X) - 2017-10-18 X:X (X/X)}", "language": "de" }, { "text": "am Mittwoch den 19.07. gegen 17:30", "ref_time": "2017-07-14T10:58:32", "gold_parse": "Time[]{2017-07-17 17:30 (X/X)}", "language": "de" }, { "text": "3 Dec 2125", "ref_time": "2017-11-20T19:42:36", "gold_parse": "Time[]{2017-12-03 21:25 (X/X)}", "language": "en" }, { "text": "am 9.11. um 20:40h", "ref_time": "2017-10-27T08:56:23", "gold_parse": "Time[]{2017-11-09 20:40 (X/X)}", "language": "de" }, { "text": "November am 22.11.", "ref_time": "2017-09-08T12:56:52", "gold_parse": "Time[]{2017-11-22 X:X (X/X)}", "language": "de" }, { "text": "vom 06. - 07.12.", "ref_time": "2017-08-23T12:27:34", "gold_parse": "Interval[]{2017-12-06 X:X (X/X) - 2017-12-07 X:X (X/X)}", "language": "de" }, { "text": "Am 01.08. ab ca. 18:00 Uhr", "ref_time": "2017-07-21T12:40:28", "gold_parse": "Interval[]{2017-08-01 18:00 (X/X) - None}", "language": "de" }, { "text": "26.07.2017 7 Uhr", "ref_time": "2017-07-24T14:51:45", "gold_parse": "Time[]{2017-07-26 07:00 (X/X)}", "language": "de" }, { "text": "13. Dezember gegen 11:00 Vormittags", "ref_time": "2017-11-24T12:39:26", "gold_parse": "Time[]{2017-12-13 11:00 (X/X)}", "language": "de" }, { "text": "vom 15.08.2017 (nachmittags) bis zum 17.08.2017 (vormittags)", "ref_time": "2017-08-14T08:13:53", "gold_parse": "Interval[]{2017-08-15 X:X (X/afternoon) - 2017-08-17 X:X (X/morning)}", "language": "de" }, { "text": "Thursday evening", "ref_time": "2017-09-04T09:11:42", "gold_parse": "Time[]{2017-09-07 X:X (X/evening)}", "language": "en" }, { "text": "heute", "ref_time": "2017-11-28T12:00:15", "gold_parse": "Time[]{2017-11-28 X:X (X/X)}", "language": "de" }, { "text": "09.11.17 8.33 Uhr", "ref_time": "2017-09-28T09:46:29", "gold_parse": "Time[]{2017-11-09 08:33 (X/X)}", "language": "de" }, { "text": "11.09. 8:03 Uhr", "ref_time": "2017-09-07T10:19:10", "gold_parse": "Time[]{2017-09-11 08:03 (X/X)}", "language": "de" }, { "text": "2.10.17 - 5.10 nachmittags", "ref_time": "2017-08-15T08:12:20", "gold_parse": "Time[]{2017-10-02 X:X (X/afternoon)}", "language": "de" }, { "text": "Mittwoch, 28.06.2017 07:38 Uhr", "ref_time": "2017-06-21T09:22:12", "gold_parse": "Time[]{2017-06-28 07:38 (X/X)}", "language": "de" }, { "text": "Montag 9. Oktober 2017 10:00 Uhr", "ref_time": "2017-08-03T10:16:47", "gold_parse": "Time[]{2017-10-09 10:00 (X/X)}", "language": "de" }, { "text": "19.11. 16:35 Uhr", "ref_time": "2017-10-18T07:52:52", "gold_parse": "Time[]{2017-11-19 16:35 (X/X)}", "language": "de" }, { "text": "Thursday 28.9. morning", "ref_time": "2017-09-22T08:01:05", "gold_parse": "Time[]{2017-09-28 X:X (X/morning)}", "language": "de" }, { "text": "morgen 6:38", "ref_time": "2017-10-18T12:29:13", "gold_parse": "Time[]{2017-10-19 06:38 (X/X)}", "language": "de" }, { "text": "vom 26.06 - 27.06", "ref_time": "2017-06-26T07:52:07", "gold_parse": "Interval[]{2017-06-26 X:X (X/X) - 2017-06-27 X:X (X/X)}", "language": "de" }, { "text": "von Montag, 11.09. bis Donnerstag 14.09.", "ref_time": "2017-09-08T09:49:10", "gold_parse": "Interval[]{2017-09-11 X:X (X/X) - 2017-09-14 X:X (X/X)}", "language": "de" }, { "text": "am 23.11.2017 07:25 - 8:35 Uhr", "ref_time": "2017-11-16T13:19:24", "gold_parse": "Interval[]{2017-11-23 07:25 (X/X) - 2017-11-23 08:35 (X/X)}", "language": "de" }, { "text": "Freitag 25.08. 13:02 Uhr", "ref_time": "2017-08-21T09:26:59", "gold_parse": "Time[]{2017-08-25 13:02 (X/X)}", "language": "de" }, { "text": "vom 11.10. - 13.10.2017", "ref_time": "2017-10-07T15:19:00", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-13 X:X (X/X)}", "language": "de" }, { "text": "ab dem 07.07. bis 09.07.", "ref_time": "2017-06-07T09:02:11", "gold_parse": "Interval[]{2017-07-07 X:X (X/X) - 2017-07-09 X:X (X/X)}", "language": "de" }, { "text": "27.11.-29.11.2017", "ref_time": "2017-11-26T07:44:15", "gold_parse": "Interval[]{2017-11-27 X:X (X/X) - 2017-11-29 X:X (X/X)}", "language": "en" }, { "text": "Mi. 20.09.2017", "ref_time": "2017-09-19T10:04:52", "gold_parse": "Time[]{2017-09-20 X:X (X/X)}", "language": "de" }, { "text": "30.09.2017 ca. 09.00 Uhr", "ref_time": "2017-07-04T07:28:38", "gold_parse": "Time[]{2017-09-30 09:00 (X/X)}", "language": "de" }, { "text": "am 19.07.2017 ca 18:30", "ref_time": "2017-06-14T15:01:43", "gold_parse": "Time[]{2017-07-19 18:30 (X/X)}", "language": "de" }, { "text": "am 13.09.17 ab 11:30 Uhr", "ref_time": "2017-09-08T14:55:15", "gold_parse": "Interval[]{2017-09-13 11:30 (X/X) - None}", "language": "de" }, { "text": "11 OCT, 17:00", "ref_time": "2017-09-09T06:12:27", "gold_parse": "Time[]{2017-10-11 17:00 (X/X)}", "language": "other" }, { "text": "30.06.2017", "ref_time": "2017-05-31T07:03:35", "gold_parse": "Time[]{2017-06-30 X:X (X/X)}", "language": "de" }, { "text": "am 13. Dezember ca. 6 Uhr", "ref_time": "2017-11-29T09:08:04", "gold_parse": "Time[]{2017-12-13 06:00 (X/X)}", "language": "de" }, { "text": "29.11", "ref_time": "2017-11-15T07:37:05", "gold_parse": "Time[]{2017-11-29 X:X (X/X)}", "language": "de" }, { "text": "11. - 12.10.", "ref_time": "2017-08-24T13:56:47", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "20.6.", "ref_time": "2017-06-06T10:24:43", "gold_parse": "Time[]{2017-06-20 X:X (X/X)}", "language": "de" }, { "text": "03.01.2018 19:21h", "ref_time": "2017-11-02T08:53:13", "gold_parse": "Time[]{2018-01-03 19:21 (X/X)}", "language": "de" }, { "text": "17.09.2017 17:50", "ref_time": "2017-08-31T07:37:04", "gold_parse": "Time[]{2017-09-17 17:50 (X/X)}", "language": "de" }, { "text": "16.10.2017 um 08:00 Uhr", "ref_time": "2017-10-10T13:46:41", "gold_parse": "Time[]{2017-10-16 08:00 (X/X)}", "language": "de" }, { "text": "14.-16.11.", "ref_time": "2017-09-01T13:05:27", "gold_parse": "Interval[]{2017-11-14 X:X (X/X) - 2017-11-16 X:X (X/X)}", "language": "de" }, { "text": "am 17.07.2017 15:00-17:00 Uhr", "ref_time": "2017-07-11T11:53:20", "gold_parse": "Interval[]{2017-07-17 15:00 (X/X) - 2017-07-17 17:00 (X/X)}", "language": "de" }, { "text": "13.11.2017 07:00 Uhr", "ref_time": "2017-11-02T11:27:05", "gold_parse": "Time[]{2017-11-13 07:00 (X/X)}", "language": "de" }, { "text": "Montag 11. Dezember 20:20-21:20", "ref_time": "2017-11-27T14:53:34", "gold_parse": "Interval[]{2017-12-11 20:20 (X/X) - 2017-12-11 21:20 (X/X)}", "language": "de" }, { "text": "11.07", "ref_time": "2017-07-04T13:43:18", "gold_parse": "Time[]{2017-07-11 X:X (X/X)}", "language": "de" }, { "text": "11.09.17 16:37", "ref_time": "2017-09-08T16:03:06", "gold_parse": "Time[]{2017-09-11 16:37 (X/X)}", "language": "de" }, { "text": "am 24. August um ca. 19.00 Uhr", "ref_time": "2017-08-09T06:17:05", "gold_parse": "Time[]{2017-08-24 19:00 (X/X)}", "language": "de" }, { "text": "22.-25.01.2018", "ref_time": "2017-11-16T09:10:12", "gold_parse": "Interval[]{2018-01-22 X:X (X/X) - 2018-01-25 X:X (X/X)}", "language": "de" }, { "text": "06.09.2017 früh Vormittag", "ref_time": "2017-09-01T11:46:15", "gold_parse": "Time[]{2017-09-06 X:X (X/earlynoon)}", "language": "de" }, { "text": "am 23.11. um 18:20 Uhr", "ref_time": "2017-11-09T11:28:42", "gold_parse": "Time[]{2017-11-23 18:20 (X/X)}", "language": "de" }, { "text": "am 05.12.2017 morgens zwischen 7 und 8 Uhr", "ref_time": "2017-11-07T13:25:19", "gold_parse": "Interval[]{2017-12-05 07:00 (X/X) - 2017-12-05 08:00 (X/X)}", "language": "de" }, { "text": "23.10.17", "ref_time": "2017-07-12T08:23:10", "gold_parse": "Time[]{2017-10-23 X:X (X/X)}", "language": "de" }, { "text": "24.11.2017 früher Flug", "ref_time": "2017-10-24T11:23:09", "gold_parse": "Time[]{2017-11-24 X:X (X/first)}", "language": "de" }, { "text": "26.08-02.09", "ref_time": "2017-08-15T12:12:03", "gold_parse": "Interval[]{2017-08-26 X:X (X/X) - 2017-09-02 X:X (X/X)}", "language": "de" }, { "text": "thursday 23.11", "ref_time": "2017-11-17T17:06:00", "gold_parse": "Time[]{2017-11-23 X:X (X/X)}", "language": "en" }, { "text": "16.09", "ref_time": "2017-09-01T11:25:39", "gold_parse": "Time[]{2017-09-16 X:X (X/X)}", "language": "de" }, { "text": "diesen Mittwoch gegen 19 Uhr", "ref_time": "2017-10-30T10:32:22", "gold_parse": "Time[]{2017-11-01 19:00 (X/X)}", "language": "de" }, { "text": "23.08.2017 abends", "ref_time": "2017-07-13T14:19:32", "gold_parse": "Time[]{2017-08-23 X:X (X/evening)}", "language": "de" }, { "text": "15.08.2017 morgens 06:35h", "ref_time": "2017-07-18T08:06:43", "gold_parse": "Time[]{2017-08-15 06:35 (X/X)}", "language": "de" }, { "text": "20.09.2017 07:25", "ref_time": "2017-09-14T08:52:56", "gold_parse": "Time[]{2017-09-20 07:25 (X/X)}", "language": "de" }, { "text": "8.12.17 ca. 11 Uhr", "ref_time": "2017-11-30T09:06:22", "gold_parse": "Time[]{2017-12-08 11:00 (X/X)}", "language": "de" }, { "text": "am 6.9.", "ref_time": "2017-08-29T16:26:44", "gold_parse": "Time[]{2017-09-06 X:X (X/X)}", "language": "de" }, { "text": "20/6 13.10h-14.40h", "ref_time": "2017-06-13T07:38:49", "gold_parse": "Interval[]{2017-06-20 13:10 (X/X) - 2017-06-20 14:40 (X/X)}", "language": "de" }, { "text": "am 27.10.2017 am frühen Abend", "ref_time": "2017-09-07T06:42:40", "gold_parse": "Time[]{2017-10-27 X:X (X/earlyevening)}", "language": "de" }, { "text": "01.08", "ref_time": "2017-07-31T09:57:46", "gold_parse": "Time[]{2017-08-01 X:X (X/X)}", "language": "de" }, { "text": "Tuesday 12.09", "ref_time": "2017-09-08T20:54:33", "gold_parse": "Time[]{2017-09-12 X:X (X/X)}", "language": "en" }, { "text": "04.10.2017 letzte", "ref_time": "2017-09-07T10:52:45", "gold_parse": "Time[]{2017-10-04 X:X (X/last)}", "language": "de" }, { "text": "29.08. - 30.08.2017", "ref_time": "2017-08-23T13:25:53", "gold_parse": "Interval[]{2017-08-29 X:X (X/X) - 2017-08-30 X:X (X/X)}", "language": "de" }, { "text": "Freitag, 01. September", "ref_time": "2017-07-24T11:12:38", "gold_parse": "Time[]{2017-09-01 X:X (X/X)}", "language": "de" }, { "text": "16 JUL spätestens 16 JUL abends", "ref_time": "2017-06-21T11:02:40", "gold_parse": "Time[]{2017-07-16 X:X (X/evening)}", "language": "de" }, { "text": "12. Oktober", "ref_time": "2017-10-06T14:51:15", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "This Sunday till Tuesday", "ref_time": "2017-09-12T16:17:16", "gold_parse": "Interval[]{2017-09-17 X:X (X/X) - 2017-09-19 X:X (X/X)}", "language": "en" }, { "text": "04.07.2017 20:00", "ref_time": "2017-07-03T12:09:20", "gold_parse": "Time[]{2017-07-04 20:00 (X/X)}", "language": "de" }, { "text": "am 21.11.2017 morgens früh bis 09 Uhr", "ref_time": "2017-10-22T02:51:26", "gold_parse": "Interval[]{None - 2017-11-21 09:00 (X/X)}", "language": "de" }, { "text": "19.05.2017 19:08", "ref_time": "2017-05-19T07:09:12", "gold_parse": "Time[]{2017-05-19 19:08 (X/X)}", "language": "de" }, { "text": "26.11.2017 nachm./abends", "ref_time": "2017-10-16T13:35:53", "gold_parse": "Interval[]{2017-11-26 X:X (X/afternoon) - 2017-11-26 X:X (X/evening)}", "language": "de" }, { "text": "02.11.2017", "ref_time": "2017-10-09T11:59:15", "gold_parse": "Time[]{2017-11-02 X:X (X/X)}", "language": "de" }, { "text": "8.11 - 9.11", "ref_time": "2017-10-26T15:40:41", "gold_parse": "Interval[]{2017-11-08 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "vom 12. - 19.09.2017", "ref_time": "2017-08-09T10:50:15", "gold_parse": "Interval[]{2017-09-12 X:X (X/X) - 2017-09-19 X:X (X/X)}", "language": "de" }, { "text": "Dienstag den 17.10.2017 05:18 Uhr", "ref_time": "2017-09-29T08:39:52", "gold_parse": "Time[]{2017-10-17 05:18 (X/X)}", "language": "de" }, { "text": "7. - 9. November", "ref_time": "2017-10-30T10:36:14", "gold_parse": "Interval[]{2017-11-07 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "12.02.2018", "ref_time": "2017-11-27T15:11:52", "gold_parse": "Time[]{2018-02-12 X:X (X/X)}", "language": "de" }, { "text": "22.09.", "ref_time": "2017-08-30T11:52:50", "gold_parse": "Time[]{2017-09-22 X:X (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-05-17T14:03:16", "gold_parse": "Time[]{2017-05-17 X:X (X/X)}", "language": "de" }, { "text": "06.09 gegen 10:00", "ref_time": "2017-08-31T14:15:26", "gold_parse": "Time[]{2017-09-06 10:00 (X/X)}", "language": "de" }, { "text": "25.9. - 28.9.2017", "ref_time": "2017-09-14T13:45:54", "gold_parse": "Interval[]{2017-09-25 X:X (X/X) - 2017-09-28 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch, 22.11.2017 17:55 Uhr", "ref_time": "2017-11-08T10:29:19", "gold_parse": "Time[]{2017-11-22 17:55 (X/X)}", "language": "de" }, { "text": "on Monday 13 November in morning", "ref_time": "2017-11-08T14:59:17", "gold_parse": "Time[]{2017-11-13 X:X (X/morning)}", "language": "en" }, { "text": "Mittwoch abends", "ref_time": "2017-08-21T11:24:46", "gold_parse": "Time[]{2017-08-23 X:X (X/evening)}", "language": "de" }, { "text": "25.09 9.38h", "ref_time": "2017-09-05T12:44:58", "gold_parse": "Time[]{2017-09-25 09:38 (X/X)}", "language": "de" }, { "text": "am 31.8. später", "ref_time": "2017-08-24T06:12:14", "gold_parse": "Interval[]{2017-08-31 18:00 (X/X) - None}", "language": "de" }, { "text": "am Montag 13.11.2017", "ref_time": "2017-10-11T09:21:28", "gold_parse": "Time[]{2017-11-13 X:X (X/X)}", "language": "de" }, { "text": "Tue, Aug 15th 21:35", "ref_time": "2017-08-14T15:21:31", "gold_parse": "Time[]{2017-08-15 21:35 (X/X)}", "language": "de" }, { "text": "Donnerstag, den 5.10.2017 16:00 - 17:00 Uhr", "ref_time": "2017-09-28T07:55:07", "gold_parse": "Interval[]{2017-10-05 16:00 (X/X) - 2017-10-05 17:00 (X/X)}", "language": "de" }, { "text": "25.06.2017", "ref_time": "2017-06-14T07:23:25", "gold_parse": "Time[]{2017-06-25 X:X (X/X)}", "language": "de" }, { "text": "2 Nov 1815", "ref_time": "2017-08-25T12:23:01", "gold_parse": "Time[]{2017-11-02 18:15 (X/X)}", "language": "en" }, { "text": "08.12.2017 - 10.12.2017", "ref_time": "2017-11-24T11:29:08", "gold_parse": "Interval[]{2017-12-08 X:X (X/X) - 2017-12-10 X:X (X/X)}", "language": "de" }, { "text": "earlier 06.08", "ref_time": "2017-07-27T14:17:42", "gold_parse": "Time[]{2017-08-06 X:X (X/morning)}", "language": "en" }, { "text": "17.10. - 20.10.17", "ref_time": "2017-10-06T07:05:05", "gold_parse": "Interval[]{2017-10-17 X:X (X/X) - 2017-10-20 X:X (X/X)}", "language": "de" }, { "text": "31.01.2018 12:00 Uhr", "ref_time": "2017-09-27T09:37:06", "gold_parse": "Time[]{2018-01-31 12:00 (X/X)}", "language": "de" }, { "text": "22.11.2017 - 24.11 2017", "ref_time": "2017-11-06T09:35:52", "gold_parse": "Interval[]{2017-11-22 X:X (X/X) - 2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "heute um 17:22", "ref_time": "2017-11-06T10:27:41", "gold_parse": "Time[]{2017-11-06 17:22 (X/X)}", "language": "de" }, { "text": "am 29.11. vor 10.00h", "ref_time": "2017-11-07T09:12:11", "gold_parse": "Interval[]{None - 2017-11-29 10:00 (X/X)}", "language": "de" }, { "text": "on Monday, August 21st in the morning", "ref_time": "2017-08-08T09:40:21", "gold_parse": "Time[]{2017-08-21 X:X (X/morning)}", "language": "en" }, { "text": "Nov 8 2359-1715", "ref_time": "2017-07-21T16:36:54", "gold_parse": "Interval[]{2017-11-08 23:59 (X/X) - 2017-11-08 17:15 (X/X)}", "language": "en" }, { "text": "12. auf den 13.10", "ref_time": "2017-10-10T18:44:47", "gold_parse": "Interval[]{2017-10-12 X:X (X/X) - 2017-10-13 X:X (X/X)}", "language": "de" }, { "text": "am 25.10.", "ref_time": "2017-10-18T10:55:17", "gold_parse": "Time[]{2017-10-25 X:X (X/X)}", "language": "de" }, { "text": "Mon Nov 13 3:35 PM", "ref_time": "2017-11-08T13:05:30", "gold_parse": "Time[]{2017-11-13 15:35 (X/X)}", "language": "de" }, { "text": "18.05.2017", "ref_time": "2017-05-17T13:00:34", "gold_parse": "Time[]{2017-05-18 X:X (X/X)}", "language": "de" }, { "text": "the 22nd", "ref_time": "2017-09-24T12:50:45", "gold_parse": "Time[]{2017-10-22 X:X (X/X)}", "language": "en" }, { "text": "on the 6th of December around noon", "ref_time": "2017-11-16T08:18:27", "gold_parse": "Time[]{2017-12-06 X:X (X/noon)}", "language": "en" }, { "text": "am Sonntag, 3.12. spätestens um 5:00 pm", "ref_time": "2017-11-29T14:51:15", "gold_parse": "Interval[]{None - 2017-12-03 17:00 (X/X)}", "language": "de" }, { "text": "18.11", "ref_time": "2017-10-16T16:03:06", "gold_parse": "Time[]{2017-11-18 X:X (X/X)}", "language": "de" }, { "text": "am Sonntag den 12. November", "ref_time": "2017-08-18T16:11:04", "gold_parse": "Time[]{2017-11-12 X:X (X/X)}", "language": "de" }, { "text": "Fr, 02.06.2017, ca. 14:00", "ref_time": "2017-05-31T14:11:10", "gold_parse": "Time[]{2017-06-02 14:00 (X/X)}", "language": "de" }, { "text": "26.11.2017 17:00 Uhr", "ref_time": "2017-09-25T09:39:49", "gold_parse": "Time[]{2017-11-26 17:00 (X/X)}", "language": "de" }, { "text": "Mittwoch 15.12. erster", "ref_time": "2017-11-08T13:18:26", "gold_parse": "Time[]{2017-12-15 X:X (X/first)}", "language": "de" }, { "text": "vom 23. auf den 24.09.2017", "ref_time": "2017-08-21T20:25:17", "gold_parse": "Interval[]{2017-09-23 X:X (X/X) - 2017-09-24 X:X (X/X)}", "language": "de" }, { "text": "middle", "ref_time": "2017-10-06T09:45:11", "gold_parse": "Time[]{2017-10-12 X:X (X/noon)}", "language": "en" }, { "text": "08.12. nachmittags", "ref_time": "2017-11-14T08:52:18", "gold_parse": "Time[]{2017-12-08 X:X (X/afternoon)}", "language": "de" }, { "text": "am 31.05. 6:30 Uhr", "ref_time": "2017-05-19T09:37:46", "gold_parse": "Time[]{2017-05-31 06:30 (X/X)}", "language": "de" }, { "text": "Thu 26 Oct late afternoon", "ref_time": "2017-10-24T19:11:30", "gold_parse": "Time[]{2017-10-26 X:X (X/lateafternoon)}", "language": "en" }, { "text": "26.07.2017 10.00Uhr", "ref_time": "2017-07-17T09:53:15", "gold_parse": "Time[]{2017-07-26 10:00 (X/X)}", "language": "de" }, { "text": "am 06.10.2017 Spätnachmittag/Abend", "ref_time": "2017-08-07T08:35:11", "gold_parse": "Interval[]{2017-10-06 X:X (X/lateafternoon) - 2017-10-06 X:X (X/evening)}", "language": "de" }, { "text": "Thursday 15/06 around 18.00 h", "ref_time": "2017-06-12T14:50:11", "gold_parse": "Time[]{2017-06-15 18:00 (X/X)}", "language": "en" }, { "text": "am 9. September", "ref_time": "2017-09-06T09:02:24", "gold_parse": "Time[]{2017-09-09 X:X (X/X)}", "language": "de" }, { "text": "Fr. 15.09.2017 - 6:00 Uhr", "ref_time": "2017-09-12T07:07:42", "gold_parse": "Time[]{2017-09-15 06:00 (X/X)}", "language": "de" }, { "text": "2. Dez. 2017 17:55", "ref_time": "2017-10-24T12:51:01", "gold_parse": "Time[]{2017-12-02 17:55 (X/X)}", "language": "de" }, { "text": "on 27th June", "ref_time": "2017-06-18T15:05:47", "gold_parse": "Time[]{2017-06-27 X:X (X/X)}", "language": "en" }, { "text": "12.6 - 16.6", "ref_time": "2017-05-28T20:27:09", "gold_parse": "Interval[]{2017-06-12 X:X (X/X) - 2017-06-16 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch 29.11. Nachmittag", "ref_time": "2017-11-08T11:29:36", "gold_parse": "Time[]{2017-11-29 X:X (X/afternoon)}", "language": "de" }, { "text": "27.09.", "ref_time": "2017-09-21T07:58:16", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "am 25.07.", "ref_time": "2017-07-04T09:54:51", "gold_parse": "Time[]{2017-07-25 X:X (X/X)}", "language": "de" }, { "text": "Tomorrow 16 Nov noon", "ref_time": "2017-11-15T06:24:36", "gold_parse": "Time[]{2017-11-16 12:00 (X/X)}", "language": "en" }, { "text": "am 19.06.2017 19:20 Uhr", "ref_time": "2017-06-12T11:49:43", "gold_parse": "Time[]{2017-06-19 19:20 (X/X)}", "language": "de" }, { "text": "am Dienstag, 11.07.2017 ab 15.00h", "ref_time": "2017-07-06T09:05:46", "gold_parse": "Interval[]{2017-07-11 15:00 (X/X) - None}", "language": "de" }, { "text": "Mo, 31.7. frühestens 17:30 Uhr", "ref_time": "2017-07-06T12:17:02", "gold_parse": "Interval[]{2017-07-31 17:30 (X/X) - None}", "language": "de" }, { "text": "22.05.2017", "ref_time": "2017-05-11T12:22:01", "gold_parse": "Time[]{2017-05-22 X:X (X/X)}", "language": "de" }, { "text": "Mi, 08.11.2017 13:35", "ref_time": "2017-10-26T05:55:16", "gold_parse": "Time[]{2017-11-08 13:35 (X/X)}", "language": "de" }, { "text": "vom 14.11.2017 bis 17.11.2017", "ref_time": "2017-11-14T07:28:06", "gold_parse": "Interval[]{2017-11-14 X:X (X/X) - 2017-11-17 X:X (X/X)}", "language": "de" }, { "text": "8 October after 6pm", "ref_time": "2017-10-03T20:24:48", "gold_parse": "Interval[]{2017-10-08 18:00 (X/X) - None}", "language": "en" }, { "text": "17.07.17 morgens", "ref_time": "2017-06-14T14:53:38", "gold_parse": "Time[]{2017-07-17 X:X (X/morning)}", "language": "de" }, { "text": "Mittwoch, 06.09. 20:35 Uhr", "ref_time": "2017-08-21T13:24:25", "gold_parse": "Time[]{2017-09-06 20:35 (X/X)}", "language": "de" }, { "text": "24. September um ca. 16-17 Uhr", "ref_time": "2017-07-31T10:54:41", "gold_parse": "Interval[]{2017-09-24 16:00 (X/X) - 2017-09-24 17:00 (X/X)}", "language": "de" }, { "text": "1 night", "ref_time": "2017-09-14T09:18:11", "gold_parse": "Duration[]{1 nights}", "language": "en" }, { "text": "am 28.11. spätestens 15:20 Uhr", "ref_time": "2017-09-25T15:59:52", "gold_parse": "Interval[]{None - 2017-11-28 15:20 (X/X)}", "language": "de" }, { "text": "Dienstag, 22.08. 08:34 - 10:28", "ref_time": "2017-08-17T09:05:38", "gold_parse": "Interval[]{2017-08-22 08:34 (X/X) - 2017-08-22 10:28 (X/X)}", "language": "de" }, { "text": "Am 13.07.2017 um 15:35 Uhr", "ref_time": "2017-07-05T12:49:04", "gold_parse": "Time[]{2017-07-13 15:35 (X/X)}", "language": "de" }, { "text": "14.11.2017", "ref_time": "2017-11-03T14:00:07", "gold_parse": "Time[]{2017-11-14 X:X (X/X)}", "language": "en" }, { "text": "Freitag, 7.07.2017 Abends ab 18.00h", "ref_time": "2017-06-23T12:38:05", "gold_parse": "Interval[]{2017-07-07 18:00 (X/X) - None}", "language": "de" }, { "text": "12.09.2017 14:00 - 16:00", "ref_time": "2017-08-09T09:39:11", "gold_parse": "Interval[]{2017-09-12 14:00 (X/X) - 2017-09-12 16:00 (X/X)}", "language": "en" }, { "text": "Donnerstag, 31.08.17", "ref_time": "2017-08-29T07:35:47", "gold_parse": "Time[]{2017-08-31 X:X (X/X)}", "language": "de" }, { "text": "on 5th July", "ref_time": "2017-07-03T15:35:49", "gold_parse": "Time[]{2017-07-05 X:X (X/X)}", "language": "en" }, { "text": "on sunday 9/24 by 1830", "ref_time": "2017-09-12T16:30:23", "gold_parse": "Time[]{2017-09-24 18:30 (X/X)}", "language": "en" }, { "text": "20.09. 22.10", "ref_time": "2017-09-13T08:14:25", "gold_parse": "Time[]{2017-09-20 22:10 (X/X)}", "language": "de" }, { "text": "30.11.2017 14:21 - 15:33 Uhr", "ref_time": "2017-11-29T09:24:01", "gold_parse": "Interval[]{2017-11-30 14:21 (X/X) - 2017-11-30 15:33 (X/X)}", "language": "de" }, { "text": "Tuesday 25th July Early morning", "ref_time": "2017-07-17T12:58:49", "gold_parse": "Time[]{2017-07-25 X:X (X/morning)}", "language": "en" }, { "text": "Mi 24.1.18 um 9h", "ref_time": "2017-11-27T11:02:27", "gold_parse": "Time[]{2018-01-24 09:00 (X/X)}", "language": "de" }, { "text": "12.11.2017 ab 17:30 Uhr", "ref_time": "2017-09-28T10:04:54", "gold_parse": "Interval[]{2017-11-12 17:30 (X/X) - None}", "language": "de" }, { "text": "um 18:36", "ref_time": "2017-07-11T15:37:39", "gold_parse": "Time[]{2017-07-12 18:36 (X/X)}", "language": "de" }, { "text": "Fr. 15.09.2017 - 6:00 Uhr", "ref_time": "2017-09-12T07:07:42", "gold_parse": "Time[]{2017-09-15 06:00 (X/X)}", "language": "de" }, { "text": "donnerstag", "ref_time": "2017-10-05T07:52:16", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "26.11.2017 nachm./abends", "ref_time": "2017-10-16T13:35:53", "gold_parse": "Interval[]{2017-11-26 X:X (X/afternoon) - 2017-11-26 X:X (X/evening)}", "language": "de" }, { "text": "06.06..2017 abends", "ref_time": "2017-05-22T06:35:25", "gold_parse": "Time[]{2017-06-06 X:X (X/evening)}", "language": "de" }, { "text": "vom 22.09.2017 um 15:00 Uhr bis 24.09.2017 18:00 Uhr", "ref_time": "2017-09-19T07:35:05", "gold_parse": "Interval[]{2017-09-22 15:00 (X/X) - 2017-09-24 18:00 (X/X)}", "language": "de" }, { "text": "12.10. abends", "ref_time": "2017-08-30T14:05:37", "gold_parse": "Time[]{2017-10-12 X:X (X/evening)}", "language": "de" }, { "text": "09.12.2017", "ref_time": "2017-11-14T09:20:09", "gold_parse": "Time[]{2017-12-09 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag, 20.07.2017", "ref_time": "2017-07-14T08:17:09", "gold_parse": "Time[]{2017-07-20 X:X (X/X)}", "language": "de" }, { "text": "12.11.17", "ref_time": "2017-10-25T08:54:00", "gold_parse": "Time[]{2017-11-12 X:X (X/X)}", "language": "de" }, { "text": "am 24.09. Abends", "ref_time": "2017-09-19T08:29:40", "gold_parse": "Time[]{2017-09-24 X:X (X/evening)}", "language": "de" }, { "text": "am 05.08. gegen 11.00 Uhr", "ref_time": "2017-08-01T12:37:30", "gold_parse": "Time[]{2017-08-05 11:00 (X/X)}", "language": "de" }, { "text": "27.09.2017", "ref_time": "2017-09-25T13:40:20", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch 27.09. 07:10 Uhr - 10:55 Uhr", "ref_time": "2017-09-21T09:42:34", "gold_parse": "Interval[]{2017-09-27 07:10 (X/X) - 2017-09-27 10:55 (X/X)}", "language": "de" }, { "text": "11 October between 2 and 4pm", "ref_time": "2017-10-03T20:24:48", "gold_parse": "Interval[]{2017-10-11 14:00 (X/X) - 2017-10-11 16:00 (X/X)}", "language": "en" }, { "text": "12.10", "ref_time": "2017-10-11T08:11:02", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "14.11.2017 ab 18:30 Uhr", "ref_time": "2017-09-28T10:18:18", "gold_parse": "Interval[]{2017-11-14 18:30 (X/X) - None}", "language": "de" }, { "text": "27.11.", "ref_time": "2017-11-02T16:54:27", "gold_parse": "Time[]{2017-11-27 X:X (X/X)}", "language": "de" }, { "text": "Thursday the 30 of Nov. early", "ref_time": "2017-09-22T12:12:02", "gold_parse": "Time[]{2017-11-30 X:X (X/morning)}", "language": "en" }, { "text": "08.12. nachmittags", "ref_time": "2017-11-14T08:52:18", "gold_parse": "Time[]{2017-12-08 X:X (X/afternoon)}", "language": "de" }, { "text": "05.-10.02.2018", "ref_time": "2017-09-26T14:05:17", "gold_parse": "Interval[]{2018-02-05 X:X (X/X) - 2018-02-10 X:X (X/X)}", "language": "de" }, { "text": "am Mittwoch 26.07.17 früh Morgens", "ref_time": "2017-07-20T14:46:36", "gold_parse": "Time[]{2017-07-26 X:X (X/morning)}", "language": "de" }, { "text": "Di., 10.10.2017, 08:30", "ref_time": "2017-08-21T12:26:51", "gold_parse": "Time[]{2017-10-10 08:30 (X/X)}", "language": "de" }, { "text": "Donnerstag 28.09.2017 07:50 Uhr", "ref_time": "2017-09-13T13:34:19", "gold_parse": "Time[]{2017-09-28 07:50 (X/X)}", "language": "de" }, { "text": "am 16.10.2017 ca. 13:00 Uhr", "ref_time": "2017-10-12T15:23:59", "gold_parse": "Time[]{2017-10-16 13:00 (X/X)}", "language": "de" }, { "text": "am 10.07. spätestens um 07:30", "ref_time": "2017-05-30T12:02:43", "gold_parse": "Interval[]{None - 2017-07-10 07:30 (X/X)}", "language": "de" }, { "text": "2 nights", "ref_time": "2017-07-17T12:57:50", "gold_parse": "Duration[]{2 nights}", "language": "en" }, { "text": "vom 26.10.-27.10.2017", "ref_time": "2017-10-16T22:15:45", "gold_parse": "Interval[]{2017-10-26 X:X (X/X) - 2017-10-27 X:X (X/X)}", "language": "de" }, { "text": "29.07.2017 Ab 15:00 Uhr", "ref_time": "2017-06-19T11:51:01", "gold_parse": "Interval[]{2017-07-29 15:00 (X/X) - None}", "language": "de" }, { "text": "Montagnachmittag des 12.6.", "ref_time": "2017-06-08T17:47:00", "gold_parse": "Time[]{2017-06-12 X:X (X/afternoon)}", "language": "de" }, { "text": "heute bis 14:00 Uhr", "ref_time": "2017-09-07T07:10:59", "gold_parse": "Interval[]{2017-09-07 08:00 (X/X) - 2017-09-07 14:00 (X/X)}", "language": "de" }, { "text": "am 30.11.17", "ref_time": "2017-11-24T14:37:54", "gold_parse": "Time[]{2017-11-30 X:X (X/X)}", "language": "de" }, { "text": "17. - 18.09.2017", "ref_time": "2017-09-06T08:57:04", "gold_parse": "Interval[]{2017-09-17 X:X (X/X) - 2017-09-18 X:X (X/X)}", "language": "de" }, { "text": "on 19th November at 11:20am", "ref_time": "2017-11-15T08:28:36", "gold_parse": "Time[]{2017-11-19 11:20 (X/X)}", "language": "de" }, { "text": "Freitag, 3.11.17", "ref_time": "2017-11-01T15:42:52", "gold_parse": "Time[]{2017-11-03 X:X (X/X)}", "language": "de" }, { "text": "26.07.2017 20:25 Uhr", "ref_time": "2017-07-06T14:11:16", "gold_parse": "Time[]{2017-07-26 20:25 (X/X)}", "language": "de" }, { "text": "Mon Dec 4 08.40", "ref_time": "2017-10-31T13:27:55", "gold_parse": "Time[]{2017-12-04 08:40 (X/X)}", "language": "en" }, { "text": "Am 30.08. 08:06 Uhr", "ref_time": "2017-08-28T16:01:50", "gold_parse": "Time[]{2017-08-30 08:06 (X/X)}", "language": "de" }, { "text": "am Freitag, den 17.11.17 ab 17:00", "ref_time": "2017-10-26T08:08:41", "gold_parse": "Interval[]{2017-11-17 17:00 (X/X) - None}", "language": "de" }, { "text": "13.11", "ref_time": "2017-10-16T16:03:06", "gold_parse": "Time[]{2017-11-13 X:X (X/X)}", "language": "de" }, { "text": "on Sunday the 1st of October", "ref_time": "2017-07-27T15:42:42", "gold_parse": "Time[]{2017-10-01 X:X (X/X)}", "language": "en" }, { "text": "Mi, 07.06.17 20:36", "ref_time": "2017-06-06T08:27:33", "gold_parse": "Time[]{2017-06-07 20:36 (X/X)}", "language": "de" }, { "text": "27.11. 12:00 Uhr", "ref_time": "2017-11-23T13:10:33", "gold_parse": "Time[]{2017-11-27 12:00 (X/X)}", "language": "de" }, { "text": "14.06.2017 06:00 Uhr bis zum 15.06.2017 06:00", "ref_time": "2017-06-12T09:00:06", "gold_parse": "Interval[]{2017-06-14 06:00 (X/X) - 2017-06-15 06:00 (X/X)}", "language": "de" }, { "text": "28.11.2017 17:30 Uhr", "ref_time": "2017-11-24T08:52:20", "gold_parse": "Time[]{2017-11-28 17:30 (X/X)}", "language": "de" }, { "text": "am 20.11. 8:30", "ref_time": "2017-11-07T09:45:03", "gold_parse": "Time[]{2017-11-20 08:30 (X/X)}", "language": "de" }, { "text": "Donnerstag, 19.10.2017 früh", "ref_time": "2017-10-11T12:18:39", "gold_parse": "Time[]{2017-10-19 X:X (X/earlymorning)}", "language": "de" }, { "text": "14.12.2017", "ref_time": "2017-11-27T14:52:20", "gold_parse": "Time[]{2017-12-14 X:X (X/X)}", "language": "de" }, { "text": "29.11.17 6:38 Uhr", "ref_time": "2017-11-24T09:54:22", "gold_parse": "Time[]{2017-11-29 06:38 (X/X)}", "language": "de" }, { "text": "Mi, 08.11.2017 10:06", "ref_time": "2017-10-26T05:55:16", "gold_parse": "Time[]{2017-11-08 10:06 (X/X)}", "language": "de" }, { "text": "05.09 21:55 - 23:05", "ref_time": "2017-08-03T14:55:23", "gold_parse": "Interval[]{2017-09-05 21:55 (X/X) - 2017-09-05 23:05 (X/X)}", "language": "en" }, { "text": "on Nov 2nd morning", "ref_time": "2017-10-24T12:08:03", "gold_parse": "Time[]{2017-11-02 X:X (X/morning)}", "language": "en" }, { "text": "30.05.2017 12:05", "ref_time": "2017-05-12T11:36:20", "gold_parse": "Time[]{2017-05-30 12:05 (X/X)}", "language": "de" }, { "text": "Dienstag, den 12.08.2017 gegen 7:25 Uhr", "ref_time": "2017-09-06T13:42:37", "gold_parse": "Time[]{2017-08-12 07:25 (X/X)}", "language": "de" }, { "text": "vom 06. - 07.12.", "ref_time": "2017-08-23T12:27:34", "gold_parse": "Interval[]{2017-12-06 X:X (X/X) - 2017-12-07 X:X (X/X)}", "language": "de" }, { "text": "am 12.10., bis 12.00 h", "ref_time": "2017-10-02T11:42:50", "gold_parse": "Interval[]{None - 2017-10-12 12:00 (X/X)}", "language": "de" }, { "text": "21:30 Uhr", "ref_time": "2017-10-02T11:09:18", "gold_parse": "Time[]{2017-10-25 21:30 (X/X)}", "language": "de" }, { "text": "13.10. um 18.30 Uhr", "ref_time": "2017-09-13T18:01:01", "gold_parse": "Time[]{2017-10-13 18:30 (X/X)}", "language": "de" }, { "text": "12.12. bis zum 13.12.2017", "ref_time": "2017-10-30T14:48:34", "gold_parse": "Interval[]{2017-12-12 X:X (X/X) - 2017-12-13 X:X (X/X)}", "language": "de" }, { "text": "02.12.17 ab 21 Uhr", "ref_time": "2017-11-20T10:59:50", "gold_parse": "Interval[]{2017-12-02 21:00 (X/X) - None}", "language": "de" }, { "text": "13.6. Abends", "ref_time": "2017-06-02T10:24:49", "gold_parse": "Time[]{2017-06-13 X:X (X/evening)}", "language": "de" }, { "text": "02 AUG nachmittags", "ref_time": "2017-07-03T12:15:22", "gold_parse": "Time[]{2017-08-02 X:X (X/afternoon)}", "language": "de" }, { "text": "22.05.2017 früh", "ref_time": "2017-05-16T05:42:09", "gold_parse": "Time[]{2017-05-22 X:X (X/earlymorning)}", "language": "de" }, { "text": "Freitag nächste Woche", "ref_time": "2017-11-10T09:19:56", "gold_parse": "Time[]{2017-11-17 X:X (X/X)}", "language": "de" }, { "text": "Thursday 20/10/2017", "ref_time": "2017-09-11T11:23:21", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "en" }, { "text": "01.02.18", "ref_time": "2017-11-15T10:27:09", "gold_parse": "Time[]{2018-02-01 X:X (X/X)}", "language": "de" }, { "text": "am 5.07. gegen 20 Uhr", "ref_time": "2017-06-28T16:53:53", "gold_parse": "Time[]{2017-07-05 20:00 (X/X)}", "language": "de" }, { "text": "31.05.2017", "ref_time": "2017-05-23T11:30:35", "gold_parse": "Time[]{2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "01.11", "ref_time": "2017-10-31T06:52:13", "gold_parse": "Time[]{2017-11-01 X:X (X/X)}", "language": "en" }, { "text": "15.05. - 17.05.18", "ref_time": "2017-11-14T14:09:47", "gold_parse": "Interval[]{2018-05-15 X:X (X/X) - 2018-05-17 X:X (X/X)}", "language": "de" }, { "text": "30th July", "ref_time": "2017-07-19T07:19:29", "gold_parse": "Time[]{2017-07-30 X:X (X/X)}", "language": "en" }, { "text": "Dienstag 15. August 2017 7:34 Uhr", "ref_time": "2017-08-14T13:16:54", "gold_parse": "Time[]{2017-08-15 07:34 (X/X)}", "language": "de" }, { "text": "26/07 2017 abends", "ref_time": "2017-06-12T07:33:11", "gold_parse": "Time[]{2017-07-26 X:X (X/evening)}", "language": "de" }, { "text": "am 28.11.2017 frühestens gegen 17.00 h", "ref_time": "2017-11-21T08:00:55", "gold_parse": "Interval[]{2017-11-28 17:00 (X/X) - None}", "language": "de" }, { "text": "am Sonntag, 29.7.", "ref_time": "2017-07-19T11:33:57", "gold_parse": "Time[]{2017-07-29 X:X (X/X)}", "language": "de" }, { "text": "04.10. - 06.10.2017", "ref_time": "2017-08-30T09:09:28", "gold_parse": "Interval[]{2017-10-04 X:X (X/X) - 2017-10-06 X:X (X/X)}", "language": "de" }, { "text": "04.07.", "ref_time": "2017-05-31T12:09:33", "gold_parse": "Time[]{2017-07-04 X:X (X/X)}", "language": "de" }, { "text": "nächsten Montag um 14 Uhr", "ref_time": "2017-11-10T13:17:54", "gold_parse": "Time[]{2017-11-13 14:00 (X/X)}", "language": "de" }, { "text": "13.06.2017", "ref_time": "2017-06-09T09:40:55", "gold_parse": "Time[]{2017-06-13 X:X (X/X)}", "language": "de" }, { "text": "am 28.9. mittags", "ref_time": "2017-08-23T09:40:37", "gold_parse": "Time[]{2017-09-28 X:X (X/noon)}", "language": "de" }, { "text": "ab 18Uhr am 10.10", "ref_time": "2017-10-02T08:42:52", "gold_parse": "Interval[]{2017-10-10 18:00 (X/X) - None}", "language": "de" }, { "text": "heute", "ref_time": "2017-10-16T12:40:25", "gold_parse": "Time[]{2017-10-16 X:X (X/X)}", "language": "de" }, { "text": "am Dienstag, 28.11.2017 20:00", "ref_time": "2017-11-21T07:44:53", "gold_parse": "Time[]{2017-11-28 20:00 (X/X)}", "language": "de" }, { "text": "Am 06.10. 08:05 Uhr", "ref_time": "2017-08-16T10:17:35", "gold_parse": "Time[]{2017-10-06 08:05 (X/X)}", "language": "de" }, { "text": "vom 14.11. auf den 15.11.", "ref_time": "2017-10-16T11:21:50", "gold_parse": "Interval[]{2017-11-14 X:X (X/X) - 2017-11-15 X:X (X/X)}", "language": "de" }, { "text": "05.07.2017 um 09:30", "ref_time": "2017-06-14T07:30:41", "gold_parse": "Time[]{2017-07-05 09:30 (X/X)}", "language": "de" }, { "text": "am Freitag, 18.08. 16:39", "ref_time": "2017-08-15T12:11:03", "gold_parse": "Time[]{2017-08-18 16:39 (X/X)}", "language": "de" }, { "text": "14.09.2017 after 19:00", "ref_time": "2017-05-31T14:27:42", "gold_parse": "Interval[]{2017-09-14 19:00 (X/X) - None}", "language": "en" }, { "text": "am 26.09 (späten Nachmittag/Abend", "ref_time": "2017-08-29T14:08:14", "gold_parse": "Interval[]{2017-09-26 X:X (X/lateafternoon) - 2017-09-26 X:X (X/evening)}", "language": "de" }, { "text": "23.08-25.08", "ref_time": "2017-08-14T13:14:54", "gold_parse": "Interval[]{2017-08-23 X:X (X/X) - 2017-08-25 X:X (X/X)}", "language": "de" }, { "text": "am 01.12.2017 spätestens 10:00 Uhr", "ref_time": "2017-11-21T15:08:19", "gold_parse": "Interval[]{None - 2017-12-01 10:00 (X/X)}", "language": "de" }, { "text": "30.06.2017 vormittags", "ref_time": "2017-05-17T08:28:04", "gold_parse": "Time[]{2017-06-30 X:X (X/morning)}", "language": "de" }, { "text": "16.08.17 nachmittags", "ref_time": "2017-08-04T12:23:27", "gold_parse": "Time[]{2017-08-16 X:X (X/afternoon)}", "language": "de" }, { "text": "19.09.", "ref_time": "2017-08-21T17:08:39", "gold_parse": "Time[]{2017-09-19 X:X (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-11-21T13:56:19", "gold_parse": "Time[]{2017-11-21 X:X (X/X)}", "language": "de" }, { "text": "05.02.2018", "ref_time": "2017-11-06T14:11:51", "gold_parse": "Time[]{2018-02-05 X:X (X/X)}", "language": "de" }, { "text": "8.6.2017", "ref_time": "2017-05-31T14:31:45", "gold_parse": "Time[]{2017-06-08 X:X (X/X)}", "language": "de" }, { "text": "14 OCT 22:40", "ref_time": "2017-10-05T07:42:13", "gold_parse": "Time[]{2017-10-14 22:40 (X/X)}", "language": "en" }, { "text": "Do., 28.09.2017 17:30", "ref_time": "2017-09-07T12:32:56", "gold_parse": "Time[]{2017-09-28 17:30 (X/X)}", "language": "de" }, { "text": "Mi 17.1.18 um 9h", "ref_time": "2017-11-27T11:02:27", "gold_parse": "Time[]{2018-01-17 09:00 (X/X)}", "language": "de" }, { "text": "Sonntag, 20.08. am Nachmittag", "ref_time": "2017-08-02T14:40:35", "gold_parse": "Time[]{2017-08-20 X:X (X/afternoon)}", "language": "de" }, { "text": "12.09.17 - 14.09.17 18:00 - 20:00", "ref_time": "2017-08-11T11:31:27", "gold_parse": "Interval[]{2017-09-14 18:00 (X/X) - 2017-09-14 20:00 (X/X)}", "language": "en" }, { "text": "Vom 21.06-22.06", "ref_time": "2017-06-21T13:23:57", "gold_parse": "Interval[]{2017-06-21 X:X (X/X) - 2017-06-22 X:X (X/X)}", "language": "de" }, { "text": "am 4.7. Ganz früh", "ref_time": "2017-06-07T09:50:09", "gold_parse": "Time[]{2017-07-04 X:X (X/earlymorning)}", "language": "de" }, { "text": "Donnerstag", "ref_time": "2017-11-05T14:30:26", "gold_parse": "Time[]{2017-11-16 X:X (X/X)}", "language": "de" }, { "text": "So, 17.09.2017 11:35", "ref_time": "2017-08-23T12:14:24", "gold_parse": "Time[]{2017-09-17 11:35 (X/X)}", "language": "de" }, { "text": "Dienstag 03.10.17 ab 18 Uhr", "ref_time": "2017-09-29T07:06:35", "gold_parse": "Interval[]{2017-10-03 18:00 (X/X) - None}", "language": "de" }, { "text": "29.Sept evening", "ref_time": "2017-09-26T09:41:34", "gold_parse": "Time[]{2017-09-29 X:X (X/evening)}", "language": "en" }, { "text": "10.10 - 11.10", "ref_time": "2017-09-15T15:05:57", "gold_parse": "Interval[]{2017-10-10 X:X (X/X) - 2017-10-11 X:X (X/X)}", "language": "en" }, { "text": "20. Juni 2017 12:05h", "ref_time": "2017-05-15T10:24:31", "gold_parse": "Time[]{2017-06-20 12:05 (X/X)}", "language": "de" }, { "text": "31 January 2017", "ref_time": "2017-10-23T19:48:26", "gold_parse": "Time[]{2017-01-31 X:X (X/X)}", "language": "en" }, { "text": "Montag 10.07 ab 12 Uhr", "ref_time": "2017-07-04T13:43:18", "gold_parse": "Interval[]{2017-07-10 12:00 (X/X) - None}", "language": "de" }, { "text": "14 June Wed, 1920pm", "ref_time": "2017-06-08T06:43:53", "gold_parse": "Time[]{2017-06-14 19:20 (X/X)}", "language": "en" }, { "text": "am nächsten Tag mittags", "ref_time": "2017-09-11T16:22:10", "gold_parse": "Time[]{2017-09-28 X:X (X/afternoon)}", "language": "de" }, { "text": "am 20.06., 14:50 Uhr", "ref_time": "2017-05-24T07:09:41", "gold_parse": "Time[]{2017-06-20 14:50 (X/X)}", "language": "de" }, { "text": "26.10.2017", "ref_time": "2017-10-19T06:59:14", "gold_parse": "Time[]{2017-10-26 X:X (X/X)}", "language": "de" }, { "text": "am 19.07. um ca. 6:50 Uhr", "ref_time": "2017-06-26T13:00:13", "gold_parse": "Time[]{2017-07-19 06:50 (X/X)}", "language": "de" }, { "text": "Freitag, 7. Juli nachmittags", "ref_time": "2017-06-28T06:29:29", "gold_parse": "Time[]{2017-07-07 X:X (X/afternoon)}", "language": "de" }, { "text": "Mittwoch, 22.11.2017 17:55 Uhr", "ref_time": "2017-11-08T10:29:19", "gold_parse": "Time[]{2017-11-22 17:55 (X/X)}", "language": "de" }, { "text": "Mon, Jul 31 7:30 AM", "ref_time": "2017-07-25T13:33:14", "gold_parse": "Time[]{2017-07-31 07:30 (X/X)}", "language": "de" }, { "text": "23.06.2017 06:21", "ref_time": "2017-06-13T07:21:35", "gold_parse": "Time[]{2017-06-23 06:21 (X/X)}", "language": "de" }, { "text": "15 NOV, 17:35", "ref_time": "2017-11-14T04:09:13", "gold_parse": "Time[]{2017-11-15 17:35 (X/X)}", "language": "en" }, { "text": "16.05-20.05", "ref_time": "2017-05-10T09:50:33", "gold_parse": "Interval[]{2017-05-16 X:X (X/X) - 2017-05-20 X:X (X/X)}", "language": "en" }, { "text": "15.11.-17.11.", "ref_time": "2017-11-07T08:11:48", "gold_parse": "Interval[]{2017-11-15 X:X (X/X) - 2017-11-17 X:X (X/X)}", "language": "de" }, { "text": "Afternoon", "ref_time": "2017-06-12T13:24:04", "gold_parse": "Time[]{2017-06-15 X:X (X/afternoon)}", "language": "en" }, { "text": "am 12.06.2017 18:00 - 19:05", "ref_time": "2017-06-08T11:07:05", "gold_parse": "Interval[]{2017-06-12 18:00 (X/X) - 2017-06-12 19:05 (X/X)}", "language": "de" }, { "text": "07:42", "ref_time": "2017-07-05T13:14:16", "gold_parse": "Time[]{2017-07-06 07:42 (X/X)}", "language": "de" }, { "text": "21.06.2017 ab 05:08 Uhr", "ref_time": "2017-06-19T11:25:46", "gold_parse": "Time[]{2017-06-21 05:08 (X/X)}", "language": "de" }, { "text": "vom 09.-10.10.", "ref_time": "2017-09-28T13:18:49", "gold_parse": "Interval[]{2017-10-09 X:X (X/X) - 2017-10-10 X:X (X/X)}", "language": "de" }, { "text": "Montag 22.05.17", "ref_time": "2017-05-16T07:49:38", "gold_parse": "Time[]{2017-05-22 X:X (X/X)}", "language": "de" }, { "text": "22.05.17 Abend", "ref_time": "2017-05-12T13:00:59", "gold_parse": "Time[]{2017-05-22 X:X (X/evening)}", "language": "de" }, { "text": "24.11.2017 früher Flug", "ref_time": "2017-10-24T11:23:09", "gold_parse": "Time[]{2017-11-24 X:X (X/first)}", "language": "de" }, { "text": "Montag, 10.7.2017 morgens", "ref_time": "2017-07-03T18:14:27", "gold_parse": "Time[]{2017-07-10 X:X (X/morning)}", "language": "de" }, { "text": "Mi. 26.07.2017", "ref_time": "2017-07-24T15:43:19", "gold_parse": "Time[]{2017-07-26 X:X (X/X)}", "language": "de" }, { "text": "27.9 nachmittags", "ref_time": "2017-06-19T10:52:32", "gold_parse": "Time[]{2017-09-27 X:X (X/afternoon)}", "language": "de" }, { "text": "06 Jun", "ref_time": "2017-05-22T12:00:21", "gold_parse": "Time[]{2017-06-06 X:X (X/X)}", "language": "de" }, { "text": "am 26.10. - Vormittags", "ref_time": "2017-10-16T10:35:58", "gold_parse": "Time[]{2017-10-26 X:X (X/morning)}", "language": "de" }, { "text": "heute eine Übernachtung", "ref_time": "2017-09-05T12:57:24", "gold_parse": "Interval[]{2017-09-05 X:X (X/X) - 2017-09-06 X:X (X/X)}", "language": "de" }, { "text": "vom 18. auf den 19.10.", "ref_time": "2017-10-16T14:51:25", "gold_parse": "Interval[]{2017-10-18 X:X (X/X) - 2017-10-19 X:X (X/X)}", "language": "de" }, { "text": "20.11. - 24.11.2017", "ref_time": "2017-08-28T07:48:46", "gold_parse": "Interval[]{2017-11-20 X:X (X/X) - 2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "Thu, Oct 26 9:05 AM - 10:50 AM", "ref_time": "2017-10-23T08:26:47", "gold_parse": "Interval[]{2017-10-26 09:05 (X/X) - 2017-10-26 10:50 (X/X)}", "language": "de" }, { "text": "Friday, 15 September 2017 13:55", "ref_time": "2017-09-04T06:55:16", "gold_parse": "Time[]{2017-09-15 13:55 (X/X)}", "language": "other" }, { "text": "19.6.", "ref_time": "2017-06-02T11:21:29", "gold_parse": "Time[]{2017-06-19 X:X (X/X)}", "language": "de" }, { "text": "19-20.11.17", "ref_time": "2017-09-01T06:40:28", "gold_parse": "Interval[]{2017-11-19 X:X (X/X) - 2017-11-20 X:X (X/X)}", "language": "de" }, { "text": "14.12.2017", "ref_time": "2017-11-20T19:46:29", "gold_parse": "Time[]{2017-12-14 X:X (X/X)}", "language": "de" }, { "text": "26.06.2017", "ref_time": "2017-05-19T06:33:58", "gold_parse": "Time[]{2017-06-26 X:X (X/X)}", "language": "de" }, { "text": "Sun Nov 12", "ref_time": "2017-10-23T11:30:25", "gold_parse": "Time[]{2017-11-12 X:X (X/X)}", "language": "en" }, { "text": "Mi, 08.11.2017 21:49", "ref_time": "2017-11-07T16:36:59", "gold_parse": "Time[]{2017-11-08 21:49 (X/X)}", "language": "de" }, { "text": "Donnerstagabend spaeter", "ref_time": "2017-09-05T07:16:26", "gold_parse": "Time[]{2017-09-07 X:X (X/evening)}", "language": "de" }, { "text": "on 12/09 late evening the last flight", "ref_time": "2017-08-24T08:17:14", "gold_parse": "Time[]{2017-09-12 X:X (X/last)}", "language": "en" }, { "text": "vom 12. auf den 13.12.2017", "ref_time": "2017-11-23T14:28:19", "gold_parse": "Interval[]{2017-12-12 X:X (X/X) - 2017-12-13 X:X (X/X)}", "language": "de" }, { "text": "11APR 0740 - 0910", "ref_time": "2017-05-23T09:01:20", "gold_parse": "Interval[]{2017-04-11 07:40 (X/X) - 2017-04-11 09:10 (X/X)}", "language": "en" }, { "text": "Mittwoch 06.09.2017", "ref_time": "2017-08-28T11:33:16", "gold_parse": "Time[]{2017-09-06 X:X (X/X)}", "language": "de" }, { "text": "on 21 August", "ref_time": "2017-08-11T14:32:00", "gold_parse": "Time[]{2017-08-21 X:X (X/X)}", "language": "en" }, { "text": "10.10. um 07:00 Uhr", "ref_time": "2017-10-05T08:01:19", "gold_parse": "Time[]{2017-10-10 07:00 (X/X)}", "language": "de" }, { "text": "around 2pmTuesday", "ref_time": "2017-08-29T20:39:57", "gold_parse": "Time[]{2017-09-05 14:00 (X/X)}", "language": "en" }, { "text": "26.06. - 28.06.18", "ref_time": "2017-11-14T14:09:47", "gold_parse": "Interval[]{2018-06-26 X:X (X/X) - 2018-06-28 X:X (X/X)}", "language": "de" }, { "text": "9. Juni 2017 10 Uhr", "ref_time": "2017-05-24T17:35:38", "gold_parse": "Time[]{2017-06-09 10:00 (X/X)}", "language": "de" }, { "text": "6.6.", "ref_time": "2017-05-29T08:50:04", "gold_parse": "Time[]{2017-06-06 X:X (X/X)}", "language": "de" }, { "text": "25 SEP, 10:30", "ref_time": "2017-09-19T09:55:48", "gold_parse": "Time[]{2017-09-25 10:30 (X/X)}", "language": "en" }, { "text": "Montag", "ref_time": "2017-05-23T14:27:50", "gold_parse": "Time[]{2017-05-29 X:X (X/X)}", "language": "de" }, { "text": "19.7", "ref_time": "2017-07-11T20:21:25", "gold_parse": "Time[]{2017-07-19 X:X (X/X)}", "language": "de" }, { "text": "1845-1955", "ref_time": "2017-09-25T08:17:32", "gold_parse": "Interval[]{2017-09-29 18:45 (X/X) - 2017-09-29 19:55 (X/X)}", "language": "de" }, { "text": "12.09.", "ref_time": "2017-09-08T08:51:32", "gold_parse": "Time[]{2017-09-12 X:X (X/X)}", "language": "de" }, { "text": "11.8.17 früh", "ref_time": "2017-07-25T07:38:50", "gold_parse": "Time[]{2017-08-11 X:X (X/earlymorning)}", "language": "de" }, { "text": "05.12.-06.12.2017", "ref_time": "2017-11-29T11:28:43", "gold_parse": "Interval[]{2017-12-05 X:X (X/X) - 2017-12-06 X:X (X/X)}", "language": "de" }, { "text": "Mon, Sep 18 3:40 AM+1 - 8:50 AM+1", "ref_time": "2017-09-06T08:31:37", "gold_parse": "Interval[]{2017-09-19 03:40 (X/X) - 2017-09-19 08:50 (X/X)}", "language": "en" }, { "text": "am 27.9. morgens gg 9", "ref_time": "2017-08-23T09:40:37", "gold_parse": "Time[]{2017-09-27 09:00 (X/X)}", "language": "de" }, { "text": "22.09.2017", "ref_time": "2017-09-19T05:49:05", "gold_parse": "Time[]{2017-09-22 X:X (X/X)}", "language": "de" }, { "text": "12.09.2017 - 14.09.2017", "ref_time": "2017-05-31T14:27:42", "gold_parse": "Interval[]{2017-09-12 X:X (X/X) - 2017-09-14 X:X (X/X)}", "language": "en" }, { "text": "eine Übernachtung", "ref_time": "2017-10-09T08:37:35", "gold_parse": "Duration[]{1 nights}", "language": "de" }, { "text": "10 November", "ref_time": "2017-11-06T10:57:20", "gold_parse": "Time[]{2017-11-10 X:X (X/X)}", "language": "en" }, { "text": "05.11.2017 17:00 Uhr", "ref_time": "2017-09-27T10:44:24", "gold_parse": "Time[]{2017-11-05 17:00 (X/X)}", "language": "de" }, { "text": "07.11.2017 ca. ab 17:30Uhr", "ref_time": "2017-10-19T15:05:52", "gold_parse": "Interval[]{2017-11-07 17:30 (X/X) - None}", "language": "de" }, { "text": "19.10", "ref_time": "2017-10-11T08:04:38", "gold_parse": "Time[]{2017-10-19 X:X (X/X)}", "language": "en" }, { "text": "Mon, Jul 3 6:10 PM - 7:55 PM", "ref_time": "2017-06-27T15:40:38", "gold_parse": "Interval[]{2017-07-03 18:10 (X/X) - 2017-07-03 19:55 (X/X)}", "language": "de" }, { "text": "7.12.2017 um 19:05 Uhr", "ref_time": "2017-08-23T07:19:50", "gold_parse": "Time[]{2017-12-07 19:05 (X/X)}", "language": "de" }, { "text": "Mo, 03.0 bis 9:45 Uhr", "ref_time": "2017-06-30T17:50:42", "gold_parse": "Interval[]{None - 2017-07-03 09:45 (X/X)}", "language": "de" }, { "text": "am 2.08.2017", "ref_time": "2017-07-28T06:04:29", "gold_parse": "Time[]{2017-08-02 X:X (X/X)}", "language": "de" }, { "text": "06.09.-07.09.2017 gegen 9:00 Uhr", "ref_time": "2017-08-23T09:05:20", "gold_parse": "Time[]{2017-09-06 09:00 (X/X)}", "language": "de" }, { "text": "22.08 Abendflug", "ref_time": "2017-08-15T13:48:10", "gold_parse": "Time[]{2017-08-22 X:X (X/evening)}", "language": "de" }, { "text": "am 27.06.2017 19:20", "ref_time": "2017-05-31T08:15:55", "gold_parse": "Time[]{2017-06-27 19:20 (X/X)}", "language": "de" }, { "text": "11.09.2017 8:25 Uhr", "ref_time": "2017-08-17T14:45:38", "gold_parse": "Time[]{2017-09-11 08:25 (X/X)}", "language": "de" }, { "text": "12.10.2017 19:00", "ref_time": "2017-09-29T10:11:26", "gold_parse": "Time[]{2017-10-12 19:00 (X/X)}", "language": "de" }, { "text": "07.10.2017 ca. 9.00", "ref_time": "2017-08-07T07:58:46", "gold_parse": "Time[]{2017-10-01 09:00 (X/X)}", "language": "de" }, { "text": "02.-06.07.2017", "ref_time": "2017-06-13T14:09:33", "gold_parse": "Interval[]{2017-07-02 X:X (X/X) - 2017-07-06 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag 01.03.2018", "ref_time": "2017-11-16T09:29:29", "gold_parse": "Time[]{2018-03-01 X:X (X/X)}", "language": "de" }, { "text": "30 May 2305-0715+1", "ref_time": "2017-05-23T16:47:40", "gold_parse": "Interval[]{2017-05-30 23:05 (X/X) - 2017-05-31 07:15 (X/X)}", "language": "en" }, { "text": "06.11.2017 bis 08.11.2017", "ref_time": "2017-11-02T07:52:31", "gold_parse": "Interval[]{2017-11-06 X:X (X/X) - 2017-11-08 X:X (X/X)}", "language": "de" }, { "text": "30.06.2017", "ref_time": "2017-05-31T07:03:35", "gold_parse": "Time[]{2017-06-30 X:X (X/X)}", "language": "de" }, { "text": "Mi. 14. Jun. 20:40", "ref_time": "2017-05-31T09:50:43", "gold_parse": "Time[]{2017-06-14 20:40 (X/X)}", "language": "de" }, { "text": "vom 16.10. - 18.10.2017", "ref_time": "2017-10-16T06:23:59", "gold_parse": "Interval[]{2017-10-16 X:X (X/X) - 2017-10-18 X:X (X/X)}", "language": "de" }, { "text": "spät am 02.11.2017", "ref_time": "2017-10-26T17:35:19", "gold_parse": "Time[]{2017-11-02 X:X (X/lateevening)}", "language": "de" }, { "text": "16.10.2017 - 07:00 Uhr", "ref_time": "2017-09-11T07:19:59", "gold_parse": "Time[]{2017-10-16 07:00 (X/X)}", "language": "de" }, { "text": "vom 24. - 26.09.", "ref_time": "2017-09-14T08:48:55", "gold_parse": "Interval[]{2017-09-24 X:X (X/X) - 2017-09-26 X:X (X/X)}", "language": "de" }, { "text": "am 22.12.2017", "ref_time": "2017-09-11T11:46:47", "gold_parse": "Time[]{2017-12-22 X:X (X/X)}", "language": "de" }, { "text": "kommenden Mittwoch den 02.August 2017 07:40", "ref_time": "2017-07-25T15:21:27", "gold_parse": "Time[]{2017-08-02 07:40 (X/X)}", "language": "de" }, { "text": "on the 25th in the evening", "ref_time": "2017-06-07T10:09:16", "gold_parse": "Time[]{2017-06-25 X:X (X/evening)}", "language": "en" }, { "text": "02.09.17 früh", "ref_time": "2017-08-02T06:34:31", "gold_parse": "Time[]{2017-09-02 X:X (X/earlymorning)}", "language": "de" }, { "text": "27.10.2017 12:25 Uhr", "ref_time": "2017-09-29T10:29:37", "gold_parse": "Time[]{2017-10-27 12:25 (X/X)}", "language": "de" }, { "text": "08.11.2017 12:45 - 13:35 Uhr", "ref_time": "2017-10-17T08:22:14", "gold_parse": "Interval[]{2017-11-08 12:45 (X/X) - 2017-11-08 13:35 (X/X)}", "language": "de" }, { "text": "09.11.2017", "ref_time": "2017-11-08T08:54:17", "gold_parse": "Time[]{2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "11.10.", "ref_time": "2017-10-11T08:16:02", "gold_parse": "Time[]{2017-10-11 X:X (X/X)}", "language": "de" }, { "text": "19th Jan. late", "ref_time": "2017-11-24T10:43:42", "gold_parse": "Time[]{2018-01-19 X:X (X/evening)}", "language": "en" }, { "text": "am Donnerstag gegen 21 Uhr", "ref_time": "2017-09-18T07:48:21", "gold_parse": "Time[]{2017-09-28 21:00 (X/X)}", "language": "de" }, { "text": "08.08.2017 14:55", "ref_time": "2017-08-01T11:09:32", "gold_parse": "Time[]{2017-08-08 14:55 (X/X)}", "language": "de" }, { "text": "Dienstag, 19.09.17 nach 20 Uhr", "ref_time": "2017-09-13T11:51:16", "gold_parse": "Interval[]{2017-09-19 20:00 (X/X) - None}", "language": "de" }, { "text": "03.07.2017", "ref_time": "2017-06-27T11:35:23", "gold_parse": "Time[]{2017-07-03 X:X (X/X)}", "language": "de" }, { "text": "10.10.2017", "ref_time": "2017-09-28T09:12:13", "gold_parse": "Time[]{2017-10-10 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch 05.07.17 ca. 18:20", "ref_time": "2017-06-29T10:17:25", "gold_parse": "Time[]{2017-07-05 18:20 (X/X)}", "language": "de" }, { "text": "Montag", "ref_time": "2017-06-02T10:23:48", "gold_parse": "Time[]{2017-06-05 X:X (X/X)}", "language": "de" }, { "text": "Mitwoch 3 Januari 2017 15:55", "ref_time": "2017-11-03T14:08:00", "gold_parse": "Time[]{2018-01-03 15:55 (X/X)}", "language": "de" }, { "text": "am 05.10.2017 um 17:25h", "ref_time": "2017-08-04T06:40:06", "gold_parse": "Time[]{2017-10-05 17:25 (X/X)}", "language": "de" }, { "text": "21.10.2017", "ref_time": "2017-10-18T14:58:09", "gold_parse": "Time[]{2017-10-21 X:X (X/X)}", "language": "de" }, { "text": "Dienstag, den 19.09.2017 abends", "ref_time": "2017-09-13T07:26:35", "gold_parse": "Time[]{2017-09-19 X:X (X/evening)}", "language": "de" }, { "text": "am 15.12.2017 ab 12:00 Uhr", "ref_time": "2017-10-26T09:09:45", "gold_parse": "Interval[]{2017-12-15 12:00 (X/X) - None}", "language": "de" }, { "text": "KW 45 Donnerstag, den 09.11.2017", "ref_time": "2017-11-03T13:47:33", "gold_parse": "Time[]{2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "28.-29.11", "ref_time": "2017-11-27T07:36:18", "gold_parse": "Interval[]{2017-11-28 X:X (X/X) - 2017-11-29 X:X (X/X)}", "language": "de" }, { "text": "7th of November, 2017", "ref_time": "2017-10-29T15:56:00", "gold_parse": "Time[]{2017-11-07 X:X (X/X)}", "language": "en" }, { "text": "14.10.17", "ref_time": "2017-09-20T08:40:18", "gold_parse": "Time[]{2017-10-14 X:X (X/X)}", "language": "de" }, { "text": "Freitag 29.09", "ref_time": "2017-09-26T10:47:24", "gold_parse": "Time[]{2017-09-29 X:X (X/X)}", "language": "de" }, { "text": "am 30.05.", "ref_time": "2017-05-16T08:08:46", "gold_parse": "Time[]{2017-05-30 X:X (X/X)}", "language": "de" }, { "text": "Montag, 20.11. 2017", "ref_time": "2017-11-16T17:07:22", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "de" }, { "text": "abends ab 18 Uhr", "ref_time": "2017-11-01T13:40:52", "gold_parse": "Interval[]{2017-12-01 18:00 (X/X) - None}", "language": "de" }, { "text": "2. August 16.45", "ref_time": "2017-07-10T10:57:08", "gold_parse": "Time[]{2017-08-02 16:45 (X/X)}", "language": "de" }, { "text": "23.6 gegen 19:30", "ref_time": "2017-06-20T09:12:42", "gold_parse": "Time[]{2017-06-23 19:30 (X/X)}", "language": "de" }, { "text": "11.10.17 ab 16:30", "ref_time": "2017-10-09T09:34:19", "gold_parse": "Interval[]{2017-10-11 16:30 (X/X) - None}", "language": "de" }, { "text": "Montag morgen", "ref_time": "2017-07-20T14:53:09", "gold_parse": "Time[]{2017-07-24 X:X (X/morning)}", "language": "de" }, { "text": "Wednesday 25th October", "ref_time": "2017-07-28T09:21:51", "gold_parse": "Time[]{2017-10-25 X:X (X/X)}", "language": "en" }, { "text": "18.05.17 15:28", "ref_time": "2017-05-10T15:57:17", "gold_parse": "Time[]{2017-05-18 15:28 (X/X)}", "language": "de" }, { "text": "05.-07.12.", "ref_time": "2017-11-08T10:47:33", "gold_parse": "Interval[]{2017-12-05 X:X (X/X) - 2017-12-07 X:X (X/X)}", "language": "de" }, { "text": "19/09 at 9:15 PM", "ref_time": "2017-09-12T08:07:41", "gold_parse": "Time[]{2017-09-19 21:15 (X/X)}", "language": "en" }, { "text": "11:30 Di. 12 Sep 2017", "ref_time": "2017-08-11T13:10:02", "gold_parse": "Time[]{2017-09-12 11:30 (X/X)}", "language": "de" }, { "text": "27.6. bis 10:30h", "ref_time": "2017-06-12T10:00:06", "gold_parse": "Interval[]{None - 2017-06-27 10:30 (X/X)}", "language": "de" }, { "text": "13.10.17 ab 14:00 Uhr", "ref_time": "2017-09-25T08:23:35", "gold_parse": "Interval[]{2017-10-13 14:00 (X/X) - None}", "language": "de" }, { "text": "24.5. morgens", "ref_time": "2017-05-16T15:27:01", "gold_parse": "Time[]{2017-05-24 X:X (X/morning)}", "language": "de" }, { "text": "am 01.11.", "ref_time": "2017-10-16T15:02:31", "gold_parse": "Time[]{2017-11-01 X:X (X/X)}", "language": "de" }, { "text": "09.07.2017", "ref_time": "2017-06-27T16:00:05", "gold_parse": "Time[]{2017-07-09 X:X (X/X)}", "language": "de" }, { "text": "3.9.", "ref_time": "2017-08-16T10:47:56", "gold_parse": "Time[]{2017-09-03 X:X (X/X)}", "language": "de" }, { "text": "08.09.2017", "ref_time": "2017-07-28T12:01:47", "gold_parse": "Time[]{2017-09-08 X:X (X/X)}", "language": "de" }, { "text": "den 7.12. auf den 8.12.", "ref_time": "2017-08-04T10:57:25", "gold_parse": "Interval[]{2017-12-07 X:X (X/X) - 2017-12-08 X:X (X/X)}", "language": "de" }, { "text": "16 Oct", "ref_time": "2017-10-11T08:49:17", "gold_parse": "Time[]{2017-10-16 X:X (X/X)}", "language": "de" }, { "text": "24 Oct 0645-0750", "ref_time": "2017-10-23T07:13:13", "gold_parse": "Interval[]{2017-10-24 06:45 (X/X) - 2017-10-24 07:50 (X/X)}", "language": "de" }, { "text": "am 12.10.2017 gegen 13::00 Uhr", "ref_time": "2017-09-12T09:33:02", "gold_parse": "Time[]{2017-10-12 13:00 (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-05-29T12:54:58", "gold_parse": "Time[]{2017-05-29 X:X (X/X)}", "language": "de" }, { "text": "Thu 22 Jun 14:55 - 16:20", "ref_time": "2017-05-22T12:28:30", "gold_parse": "Interval[]{2017-06-22 14:55 (X/X) - 2017-06-22 16:20 (X/X)}", "language": "de" }, { "text": "19.6 abends", "ref_time": "2017-06-14T13:56:09", "gold_parse": "Time[]{2017-06-19 X:X (X/evening)}", "language": "de" }, { "text": "am Mittwoch, 27.09. 06:30", "ref_time": "2017-09-20T17:50:34", "gold_parse": "Time[]{2017-09-27 06:30 (X/X)}", "language": "de" }, { "text": "Am 8.11. gegen 18:00", "ref_time": "2017-10-02T13:57:02", "gold_parse": "Time[]{2017-11-08 18:00 (X/X)}", "language": "de" }, { "text": "17.07. bis 18.07.17", "ref_time": "2017-07-11T09:36:59", "gold_parse": "Interval[]{2017-07-17 X:X (X/X) - 2017-07-18 X:X (X/X)}", "language": "de" }, { "text": "09.10.2017", "ref_time": "2017-09-28T15:50:54", "gold_parse": "Time[]{2017-10-09 X:X (X/X)}", "language": "de" }, { "text": "Fri Sep 8th 7:00 PM", "ref_time": "2017-08-29T08:43:49", "gold_parse": "Time[]{2017-09-08 19:00 (X/X)}", "language": "en" }, { "text": "morgen um 06:40 Uhr", "ref_time": "2017-08-21T13:32:28", "gold_parse": "Time[]{2017-08-22 06:40 (X/X)}", "language": "de" }, { "text": "am 12.9. ca 7:30 Uhr", "ref_time": "2017-07-11T11:06:57", "gold_parse": "Time[]{2017-09-12 07:30 (X/X)}", "language": "de" }, { "text": "21.11.17", "ref_time": "2017-10-17T15:22:29", "gold_parse": "Time[]{2017-11-21 X:X (X/X)}", "language": "de" }, { "text": "14.06.2017 abends", "ref_time": "2017-06-06T05:21:44", "gold_parse": "Time[]{2017-06-14 X:X (X/evening)}", "language": "de" }, { "text": "vom 18.09 bis 19.09", "ref_time": "2017-08-18T08:51:26", "gold_parse": "Interval[]{2017-09-18 X:X (X/X) - 2017-09-19 X:X (X/X)}", "language": "de" }, { "text": "ab 20:00 11.10", "ref_time": "2017-07-13T14:33:12", "gold_parse": "Interval[]{2017-10-11 20:00 (X/X) - None}", "language": "de" }, { "text": "9 - 10 October", "ref_time": "2017-10-03T20:24:48", "gold_parse": "Interval[]{2017-10-09 X:X (X/X) - 2017-10-10 X:X (X/X)}", "language": "en" }, { "text": "vom 07. - 08.09.", "ref_time": "2017-08-29T09:46:48", "gold_parse": "Interval[]{2017-09-07 X:X (X/X) - 2017-09-08 X:X (X/X)}", "language": "de" }, { "text": "am 05.10.2017 morgens", "ref_time": "2017-09-29T15:06:51", "gold_parse": "Time[]{2017-10-05 X:X (X/morning)}", "language": "de" }, { "text": "13AUG 09:10", "ref_time": "2017-05-19T08:51:30", "gold_parse": "Time[]{2017-08-13 09:10 (X/X)}", "language": "de" }, { "text": "27/08 1605-1800", "ref_time": "2017-08-11T06:26:42", "gold_parse": "Interval[]{2017-08-27 16:05 (X/X) - 2017-08-27 18:00 (X/X)}", "language": "en" }, { "text": "Jan 1", "ref_time": "2017-09-17T14:18:42", "gold_parse": "Time[]{2018-01-01 X:X (X/X)}", "language": "en" }, { "text": "15.05.2017 bis 19.05.2015", "ref_time": "2017-05-11T09:39:18", "gold_parse": "Interval[]{2017-05-15 X:X (X/X) - 2017-05-19 X:X (X/X)}", "language": "de" }, { "text": "heute bis morgen", "ref_time": "2017-07-18T14:22:33", "gold_parse": "Interval[]{2017-07-18 X:X (X/X) - 2017-07-19 X:X (X/X)}", "language": "de" }, { "text": "29.06.17 18:34", "ref_time": "2017-06-27T08:35:36", "gold_parse": "Time[]{2017-06-29 18:34 (X/X)}", "language": "de" }, { "text": "am Dienstag späten Abend", "ref_time": "2017-06-09T13:36:53", "gold_parse": "Time[]{2017-06-20 X:X (X/evening)}", "language": "de" }, { "text": "Dienstag, den 11.07. etwa ab 6 Uhr morgens", "ref_time": "2017-07-06T12:35:14", "gold_parse": "Interval[]{2017-07-11 06:00 (X/X) - None}", "language": "de" }, { "text": "Mi 13. Sep 09:30", "ref_time": "2017-07-25T12:26:26", "gold_parse": "Time[]{2017-09-13 09:30 (X/X)}", "language": "de" }, { "text": "wednesday in the morning", "ref_time": "2017-05-11T10:03:19", "gold_parse": "Time[]{2017-05-17 X:X (X/morning)}", "language": "en" }, { "text": "19.10 nach 19 Uhr", "ref_time": "2017-10-16T16:38:50", "gold_parse": "Interval[]{2017-10-19 19:00 (X/X) - None}", "language": "de" }, { "text": "29.07.2017 letzte", "ref_time": "2017-06-19T11:51:01", "gold_parse": "Time[]{2017-07-29 X:X (X/last)}", "language": "de" }, { "text": "am 25.09.17 später Nachmittag", "ref_time": "2017-08-08T09:45:24", "gold_parse": "Time[]{2017-09-25 X:X (X/lateafternoon)}", "language": "de" }, { "text": "08.11.2017 10:00 Uhr", "ref_time": "2017-10-09T10:26:55", "gold_parse": "Time[]{2017-11-08 10:00 (X/X)}", "language": "de" }, { "text": "06.09. 06.45 Uhr", "ref_time": "2017-08-31T10:49:15", "gold_parse": "Time[]{2017-09-06 06:45 (X/X)}", "language": "de" }, { "text": "Dienstag, 07.11.17 17:00 Uhr", "ref_time": "2017-11-02T09:32:30", "gold_parse": "Time[]{2017-11-07 17:00 (X/X)}", "language": "de" }, { "text": "24.11.2017", "ref_time": "2017-10-26T07:49:15", "gold_parse": "Time[]{2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "Montag 29.5 am Abend", "ref_time": "2017-05-24T14:06:33", "gold_parse": "Time[]{2017-05-29 X:X (X/evening)}", "language": "de" }, { "text": "am Donnerstag, 23.11.2017 gegen 17:30 Uhr", "ref_time": "2017-11-07T10:48:21", "gold_parse": "Time[]{2017-11-23 17:30 (X/X)}", "language": "de" }, { "text": "am 01.06.17", "ref_time": "2017-05-18T13:55:22", "gold_parse": "Time[]{2017-06-01 X:X (X/X)}", "language": "de" }, { "text": "31.5. morgens", "ref_time": "2017-05-15T06:09:26", "gold_parse": "Time[]{2017-05-31 X:X (X/morning)}", "language": "de" }, { "text": "21.11.17", "ref_time": "2017-11-16T08:31:55", "gold_parse": "Time[]{2017-11-21 X:X (X/X)}", "language": "de" }, { "text": "14.11.2017 13:27 Uhr - 16:28 Uhr", "ref_time": "2017-11-07T11:14:04", "gold_parse": "Interval[]{2017-11-14 13:27 (X/X) - 2017-11-14 16:28 (X/X)}", "language": "de" }, { "text": "heute 15:49", "ref_time": "2017-09-13T09:27:12", "gold_parse": "Time[]{2017-09-13 15:49 (X/X)}", "language": "de" }, { "text": "am 22.9. vor 9.00", "ref_time": "2017-09-13T07:01:18", "gold_parse": "Interval[]{None - 2017-09-22 09:00 (X/X)}", "language": "de" }, { "text": "um 18:45 Uhr am 29.11.2017", "ref_time": "2017-10-10T06:57:23", "gold_parse": "Time[]{2017-11-29 18:45 (X/X)}", "language": "de" }, { "text": "17.08.2017", "ref_time": "2017-08-16T08:08:38", "gold_parse": "Time[]{2017-08-17 X:X (X/X)}", "language": "de" }, { "text": "Mi. 07.06.2017", "ref_time": "2017-06-06T08:29:34", "gold_parse": "Time[]{2017-06-07 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag den 18.05.2017 gegen 15 Uhr ein", "ref_time": "2017-05-15T09:54:22", "gold_parse": "Time[]{2017-05-18 15:00 (X/X)}", "language": "de" }, { "text": "15.08.2017", "ref_time": "2017-07-25T07:04:12", "gold_parse": "Time[]{2017-08-15 X:X (X/X)}", "language": "de" }, { "text": "from 16 to 17 November 2017", "ref_time": "2017-10-25T12:56:44", "gold_parse": "Interval[]{2017-11-16 X:X (X/X) - 2017-11-17 X:X (X/X)}", "language": "en" }, { "text": "am 20.10 ziemlich früh", "ref_time": "2017-09-20T18:30:53", "gold_parse": "Time[]{2017-10-20 X:X (X/earlymorning)}", "language": "de" }, { "text": "am 17.11.2017", "ref_time": "2017-11-02T08:25:23", "gold_parse": "Time[]{2017-11-17 X:X (X/X)}", "language": "de" }, { "text": "am 06.01.2017", "ref_time": "2017-11-15T18:36:20", "gold_parse": "Time[]{2018-01-06 X:X (X/X)}", "language": "de" }, { "text": "Di. 30.05.2017", "ref_time": "2017-05-30T08:13:00", "gold_parse": "Time[]{2017-05-30 X:X (X/X)}", "language": "de" }, { "text": "07.12.", "ref_time": "2017-11-03T13:20:36", "gold_parse": "Time[]{2017-12-07 X:X (X/X)}", "language": "de" }, { "text": "10.07.2017 09 00 Uhr", "ref_time": "2017-07-04T13:28:12", "gold_parse": "Time[]{2017-07-10 09:00 (X/X)}", "language": "de" }, { "text": "am 19.09. 19.00 Uhr", "ref_time": "2017-09-14T11:32:57", "gold_parse": "Time[]{2017-09-19 19:00 (X/X)}", "language": "de" }, { "text": "07.09.2017 8 Uhr", "ref_time": "2017-09-05T11:05:18", "gold_parse": "Time[]{2017-09-07 08:00 (X/X)}", "language": "de" }, { "text": "21/09 2205-0455", "ref_time": "2017-08-11T06:30:46", "gold_parse": "Interval[]{2017-09-21 22:05 (X/X) - 2017-09-22 04:55 (X/X)}", "language": "en" }, { "text": "1 night", "ref_time": "2017-07-21T05:22:51", "gold_parse": "Duration[]{1 nights}", "language": "en" }, { "text": "10.08.2017 ab 19:00 Uhr", "ref_time": "2017-07-28T07:51:09", "gold_parse": "Interval[]{2017-08-10 19:00 (X/X) - None}", "language": "de" }, { "text": "01.09.2017", "ref_time": "2017-07-26T12:25:43", "gold_parse": "Time[]{2017-09-01 X:X (X/X)}", "language": "de" }, { "text": "1.7. - 30.9.", "ref_time": "2017-06-17T21:13:11", "gold_parse": "Interval[]{2017-07-01 X:X (X/X) - 2017-09-30 X:X (X/X)}", "language": "de" }, { "text": "8. September", "ref_time": "2017-09-01T15:55:18", "gold_parse": "Time[]{2017-09-08 X:X (X/X)}", "language": "de" }, { "text": "8 June lunchtime / in the early afternoon", "ref_time": "2017-06-06T07:15:45", "gold_parse": "Time[]{2017-06-08 X:X (X/earlyafternoon)}", "language": "en" }, { "text": "06.09.2016 - Nachmittags ab 16:00", "ref_time": "2017-09-01T14:07:15", "gold_parse": "Interval[]{2017-09-06 16:00 (X/X) - None}", "language": "de" }, { "text": "1.12.", "ref_time": "2017-11-14T11:22:58", "gold_parse": "Time[]{2017-12-01 X:X (X/X)}", "language": "de" }, { "text": "21.08.2017 18:00 Uhr", "ref_time": "2017-08-01T07:34:55", "gold_parse": "Time[]{2017-08-21 18:00 (X/X)}", "language": "de" }, { "text": "am 20.4.2018 am Nachmittag", "ref_time": "2017-10-12T06:48:07", "gold_parse": "Time[]{2018-04-20 X:X (X/afternoon)}", "language": "de" }, { "text": "Thurs 2 Nov 2015", "ref_time": "2017-10-29T18:23:09", "gold_parse": "Time[]{2017-11-02 20:15 (X/X)}", "language": "en" }, { "text": "Montag 30.10. 07.00 Uhr", "ref_time": "2017-10-27T10:40:51", "gold_parse": "Time[]{2017-10-30 07:00 (X/X)}", "language": "de" }, { "text": "15.07. 13-14 Uhr", "ref_time": "2017-07-03T14:36:52", "gold_parse": "Interval[]{2017-07-15 13:00 (X/X) - 2017-07-15 14:00 (X/X)}", "language": "de" }, { "text": "20.07.2017 um 20:40h", "ref_time": "2017-06-12T16:20:28", "gold_parse": "Time[]{2017-07-20 20:40 (X/X)}", "language": "de" }, { "text": "Freitag, 30. Juni 2017", "ref_time": "2017-06-23T09:53:14", "gold_parse": "Time[]{2017-06-30 X:X (X/X)}", "language": "de" }, { "text": "vom 20. - 21.09.2017", "ref_time": "2017-09-18T12:29:32", "gold_parse": "Interval[]{2017-09-20 X:X (X/X) - 2017-09-21 X:X (X/X)}", "language": "de" }, { "text": "eine Übernachtung", "ref_time": "2017-10-18T12:42:21", "gold_parse": "Duration[]{1 nights}", "language": "de" }, { "text": "15.10.", "ref_time": "2017-09-28T08:51:54", "gold_parse": "Time[]{2017-10-15 X:X (X/X)}", "language": "de" }, { "text": "Am Mittwoch, den 28.06.", "ref_time": "2017-06-19T12:47:42", "gold_parse": "Time[]{2017-06-28 X:X (X/X)}", "language": "de" }, { "text": "am 4.11.2017 um 13:40", "ref_time": "2017-10-20T11:57:45", "gold_parse": "Time[]{2017-11-04 13:40 (X/X)}", "language": "de" }, { "text": "05.09.2017 16:45 - 17:50", "ref_time": "2017-08-30T10:04:11", "gold_parse": "Interval[]{2017-09-05 16:45 (X/X) - 2017-09-05 17:50 (X/X)}", "language": "de" }, { "text": "23.10.17 spätestens 9:30 Uhr", "ref_time": "2017-10-17T15:00:20", "gold_parse": "Interval[]{None - 2017-10-23 09:30 (X/X)}", "language": "de" }, { "text": "Dienstag, den 24. Oktober 17 spätestens 8:15", "ref_time": "2017-10-18T12:25:12", "gold_parse": "Interval[]{None - 2017-10-24 08:15 (X/X)}", "language": "de" }, { "text": "am 28.08. ab 19:00 Uhr", "ref_time": "2017-08-22T15:07:39", "gold_parse": "Interval[]{2017-08-28 19:00 (X/X) - None}", "language": "de" }, { "text": "Mittwoch 09.05.2018", "ref_time": "2017-11-16T09:29:29", "gold_parse": "Time[]{2018-05-09 X:X (X/X)}", "language": "de" }, { "text": "27.09.17 morgens", "ref_time": "2017-09-11T16:22:10", "gold_parse": "Time[]{2017-09-27 X:X (X/morning)}", "language": "de" }, { "text": "am 13.10. ab 19 Uhr", "ref_time": "2017-09-25T12:07:09", "gold_parse": "Interval[]{2017-10-13 19:00 (X/X) - None}", "language": "de" }, { "text": "Fr 3.11. Ab 19.00", "ref_time": "2017-09-22T00:14:16", "gold_parse": "Interval[]{2017-11-03 19:00 (X/X) - None}", "language": "de" }, { "text": "vom 07.11.2017 bis zum 09.11.2017", "ref_time": "2017-11-07T13:29:57", "gold_parse": "Interval[]{2017-11-07 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "on 12 october", "ref_time": "2017-09-22T10:40:47", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "en" }, { "text": "June 28 at 2305-0715", "ref_time": "2017-06-13T12:19:37", "gold_parse": "Interval[]{2017-06-28 23:05 (X/X) - 2017-06-29 07:15 (X/X)}", "language": "en" }, { "text": "am 05.07., 16:15 Uhr", "ref_time": "2017-05-24T07:06:39", "gold_parse": "Time[]{2017-07-05 16:15 (X/X)}", "language": "de" }, { "text": "20.09.2017 18:20 Uhr - 19:35 Uhr", "ref_time": "2017-08-21T13:35:29", "gold_parse": "Interval[]{2017-09-20 18:20 (X/X) - 2017-09-20 19:35 (X/X)}", "language": "de" }, { "text": "20.07. 12:17", "ref_time": "2017-07-19T07:56:31", "gold_parse": "Time[]{2017-07-20 12:17 (X/X)}", "language": "de" }, { "text": "Donnerstag, 20.7. 19:25h", "ref_time": "2017-07-11T16:24:32", "gold_parse": "Time[]{2017-07-20 19:25 (X/X)}", "language": "de" }, { "text": "Mittwoch 31.5. 17:05", "ref_time": "2017-05-22T20:51:51", "gold_parse": "Time[]{2017-05-31 17:05 (X/X)}", "language": "de" }, { "text": "05.09.2017 10:30 Uhr", "ref_time": "2017-09-01T11:07:30", "gold_parse": "Time[]{2017-09-05 10:30 (X/X)}", "language": "de" }, { "text": "30th July 11:30", "ref_time": "2017-07-21T06:33:53", "gold_parse": "Time[]{2017-07-30 11:30 (X/X)}", "language": "de" }, { "text": "21.12.2017 um 19:05 Uhr", "ref_time": "2017-08-23T07:19:50", "gold_parse": "Time[]{2017-12-21 19:05 (X/X)}", "language": "de" }, { "text": "31.05.17 7:10 Uhr", "ref_time": "2017-05-23T06:46:59", "gold_parse": "Time[]{2017-05-31 07:10 (X/X)}", "language": "de" }, { "text": "10.11.2017 at around 12:30", "ref_time": "2017-11-02T07:39:31", "gold_parse": "Time[]{2017-11-10 12:30 (X/X)}", "language": "en" }, { "text": "31.5. ab ca. 18:00", "ref_time": "2017-05-26T09:15:17", "gold_parse": "Interval[]{2017-05-31 18:00 (X/X) - None}", "language": "de" }, { "text": "vom 07.11.2017 bis zum 09.11.2017", "ref_time": "2017-11-07T13:29:57", "gold_parse": "Interval[]{2017-11-07 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "Montag 13/11 morgens", "ref_time": "2017-11-06T14:09:35", "gold_parse": "Time[]{2017-11-13 X:X (X/morning)}", "language": "de" }, { "text": "vom 15.-18.10.", "ref_time": "2017-09-20T12:02:54", "gold_parse": "Interval[]{2017-10-15 X:X (X/X) - 2017-10-18 X:X (X/X)}", "language": "de" }, { "text": "20.9. in the evening", "ref_time": "2017-09-01T10:41:16", "gold_parse": "Time[]{2017-09-20 X:X (X/evening)}", "language": "en" }, { "text": "am Mittwoch, den 13.09. um 20:40", "ref_time": "2017-08-25T07:23:18", "gold_parse": "Time[]{2017-09-13 20:40 (X/X)}", "language": "de" }, { "text": "29 syys 2017, 17:35", "ref_time": "2017-09-10T15:57:30", "gold_parse": "Time[]{2017-09-27 17:35 (X/X)}", "language": "other" }, { "text": "06. November 2017 vormittags", "ref_time": "2017-10-24T12:48:58", "gold_parse": "Time[]{2017-11-06 X:X (X/noon)}", "language": "de" }, { "text": "Sunday 19th November", "ref_time": "2017-11-13T11:23:47", "gold_parse": "Time[]{2017-11-19 X:X (X/X)}", "language": "en" }, { "text": "29.09. bis 03.10.2017", "ref_time": "2017-08-23T04:55:47", "gold_parse": "Interval[]{2017-09-29 X:X (X/X) - 2017-10-03 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag, 16.10.2017 ab 19 Uhr", "ref_time": "2017-10-26T12:27:28", "gold_parse": "Interval[]{2017-10-16 19:00 (X/X) - None}", "language": "de" }, { "text": "So-MO", "ref_time": "2017-09-27T12:27:48", "gold_parse": "Interval[]{2017-10-08 X:X (X/X) - 2017-10-09 X:X (X/X)}", "language": "de" }, { "text": "Wed in the afternoon", "ref_time": "2017-07-24T10:41:18", "gold_parse": "Time[]{2017-07-26 X:X (X/afternoon)}", "language": "en" }, { "text": "15.10.17 - 16.10.17", "ref_time": "2017-08-28T06:35:48", "gold_parse": "Interval[]{2017-10-15 X:X (X/X) - 2017-10-16 X:X (X/X)}", "language": "de" }, { "text": "05.07. 2017 ab 17:00 Uhr", "ref_time": "2017-06-13T12:03:32", "gold_parse": "Interval[]{2017-07-05 17:00 (X/X) - None}", "language": "de" }, { "text": "vom 12.-13.06.2017", "ref_time": "2017-05-23T09:54:52", "gold_parse": "Interval[]{2017-06-12 X:X (X/X) - 2017-06-13 X:X (X/X)}", "language": "de" }, { "text": "2.6. 13.00 Uhr", "ref_time": "2017-06-01T11:48:35", "gold_parse": "Time[]{2017-06-02 13:00 (X/X)}", "language": "de" }, { "text": "vom 27.11.2017-29.11.2017", "ref_time": "2017-11-13T15:40:01", "gold_parse": "Interval[]{2017-11-27 X:X (X/X) - 2017-11-29 X:X (X/X)}", "language": "de" }, { "text": "01.08.17 - 04.08.17", "ref_time": "2017-07-31T05:58:04", "gold_parse": "Interval[]{2017-08-01 X:X (X/X) - 2017-08-04 X:X (X/X)}", "language": "en" }, { "text": "18 Uhr", "ref_time": "2017-10-10T11:55:24", "gold_parse": "Time[]{2017-10-12 18:00 (X/X)}", "language": "de" }, { "text": "am 05.09.2017 abends", "ref_time": "2017-09-01T07:07:48", "gold_parse": "Time[]{2017-09-05 X:X (X/evening)}", "language": "de" }, { "text": "am Mittwoch 28.6. 11:40h", "ref_time": "2017-06-19T09:06:22", "gold_parse": "Time[]{2017-06-28 11:40 (X/X)}", "language": "de" }, { "text": "vom 25.09. - 27.09.2017", "ref_time": "2017-07-05T08:48:39", "gold_parse": "Interval[]{2017-09-25 X:X (X/X) - 2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "29 Aug evening", "ref_time": "2017-08-21T09:10:52", "gold_parse": "Time[]{2017-08-29 X:X (X/evening)}", "language": "en" }, { "text": "am 18 September morgens früh", "ref_time": "2017-08-21T10:09:57", "gold_parse": "Time[]{2017-09-18 X:X (X/morning)}", "language": "de" }, { "text": "um 18:00 Uhr", "ref_time": "2017-09-05T09:48:10", "gold_parse": "Interval[]{2017-09-11 18:00 (X/X) - None}", "language": "de" }, { "text": "ab 08:00 Uhr", "ref_time": "2017-06-14T15:35:56", "gold_parse": "Interval[]{2017-06-15 08:00 (X/X) - None}", "language": "de" }, { "text": "Freitag ca 17/18 Uhr", "ref_time": "2017-08-05T16:03:54", "gold_parse": "Interval[]{2017-08-25 17:00 (X/X) - 2017-08-25 18:00 (X/X)}", "language": "de" }, { "text": "22.08.2017 Nachmittags/abends", "ref_time": "2017-07-13T14:19:32", "gold_parse": "Interval[]{2017-08-22 X:X (X/afternoon) - 2017-08-22 X:X (X/evening)}", "language": "de" }, { "text": "10. Oktober 18:05 h", "ref_time": "2017-08-14T13:56:10", "gold_parse": "Time[]{2017-10-10 18:05 (X/X)}", "language": "de" }, { "text": "Donnerstag, 12.10.2017 14:50", "ref_time": "2017-07-27T13:59:20", "gold_parse": "Time[]{2017-10-12 14:50 (X/X)}", "language": "de" }, { "text": "25/09 0750-0930", "ref_time": "2017-09-15T16:21:39", "gold_parse": "Interval[]{2017-09-25 07:50 (X/X) - 2017-09-25 09:30 (X/X)}", "language": "en" }, { "text": "02.12. um 15:55h", "ref_time": "2017-10-24T09:22:13", "gold_parse": "Time[]{2017-12-02 15:55 (X/X)}", "language": "de" }, { "text": "15.-17.01.", "ref_time": "2017-09-26T16:03:48", "gold_parse": "Interval[]{2018-01-15 X:X (X/X) - 2018-01-17 X:X (X/X)}", "language": "de" }, { "text": "13.6. - 15.6.", "ref_time": "2017-05-23T14:47:58", "gold_parse": "Interval[]{2017-06-13 X:X (X/X) - 2017-06-15 X:X (X/X)}", "language": "en" }, { "text": "01.06.2017 09:00 Uhr", "ref_time": "2017-05-31T08:07:20", "gold_parse": "Time[]{2017-06-01 09:00 (X/X)}", "language": "de" }, { "text": "12 October earliest flight", "ref_time": "2017-10-03T20:24:48", "gold_parse": "Time[]{2017-10-12 X:X (X/first)}", "language": "en" }, { "text": "am Montag, den 17.07. 09:50", "ref_time": "2017-07-13T16:04:00", "gold_parse": "Time[]{2017-07-17 09:50 (X/X)}", "language": "de" }, { "text": "am Freitag, 3.11.2017 spätestens 11:30", "ref_time": "2017-10-11T11:52:25", "gold_parse": "Interval[]{None - 2017-11-03 11:30 (X/X)}", "language": "de" }, { "text": "thursady 19th October in the evening", "ref_time": "2017-09-28T09:09:13", "gold_parse": "Time[]{2017-10-19 X:X (X/evening)}", "language": "en" }, { "text": "26.11. - 28.11.", "ref_time": "2017-11-14T11:40:27", "gold_parse": "Interval[]{2017-11-26 X:X (X/X) - 2017-11-28 X:X (X/X)}", "language": "de" }, { "text": "16.11. um 18:00 Uhr", "ref_time": "2017-11-08T14:01:10", "gold_parse": "Time[]{2017-11-16 18:00 (X/X)}", "language": "de" }, { "text": "12:20 Uhr", "ref_time": "2017-07-26T13:12:26", "gold_parse": "Time[]{2017-09-11 12:20 (X/X)}", "language": "de" }, { "text": "9 loka 22:45", "ref_time": "2017-09-13T14:48:21", "gold_parse": "Time[]{2017-10-09 22:45 (X/X)}", "language": "en" }, { "text": "21.06.2017 10.15 Uhr", "ref_time": "2017-06-12T09:48:00", "gold_parse": "Time[]{2017-06-21 10:15 (X/X)}", "language": "de" }, { "text": "03.08.2017 bis 04.08.2017", "ref_time": "2017-08-01T07:48:22", "gold_parse": "Interval[]{2017-08-03 X:X (X/X) - 2017-08-04 X:X (X/X)}", "language": "de" }, { "text": "28.11. 07:03", "ref_time": "2017-11-24T10:11:32", "gold_parse": "Time[]{2017-11-28 07:03 (X/X)}", "language": "de" }, { "text": "am 10.10 etwa 10:30am", "ref_time": "2017-10-07T17:11:02", "gold_parse": "Time[]{2017-10-10 10:30 (X/X)}", "language": "de" }, { "text": "Donnerstag 17.8. 16:15", "ref_time": "2017-08-10T09:11:54", "gold_parse": "Time[]{2017-08-17 16:15 (X/X)}", "language": "de" }, { "text": "18.10.2017 12:40", "ref_time": "2017-09-15T12:17:47", "gold_parse": "Time[]{2017-10-18 12:40 (X/X)}", "language": "de" }, { "text": "11.12.2017", "ref_time": "2017-11-20T07:46:09", "gold_parse": "Time[]{2017-12-11 X:X (X/X)}", "language": "de" }, { "text": "18 Aug 1005", "ref_time": "2017-07-20T15:58:53", "gold_parse": "Time[]{2017-08-18 10:05 (X/X)}", "language": "en" }, { "text": "vom 15.08. - 16.08.2017", "ref_time": "2017-08-07T13:31:14", "gold_parse": "Interval[]{2017-08-15 X:X (X/X) - 2017-08-16 X:X (X/X)}", "language": "de" }, { "text": "eine Übernachtung", "ref_time": "2017-10-24T12:40:56", "gold_parse": "Duration[]{1 nights}", "language": "de" }, { "text": "21.11.2017 frühestens 18:00 Uhr", "ref_time": "2017-10-27T08:25:15", "gold_parse": "Interval[]{2017-11-21 18:00 (X/X) - None}", "language": "de" }, { "text": "So., 22. Okt. 15:20 - 16:15", "ref_time": "2017-10-02T08:23:37", "gold_parse": "Interval[]{2017-10-22 15:20 (X/X) - 2017-10-22 16:15 (X/X)}", "language": "de" }, { "text": "Montag, 13. November früh", "ref_time": "2017-11-01T13:10:03", "gold_parse": "Time[]{2017-11-13 X:X (X/morning)}", "language": "de" }, { "text": "vom 16.10. - 18.10.2017", "ref_time": "2017-10-16T06:23:59", "gold_parse": "Interval[]{2017-10-16 X:X (X/X) - 2017-10-18 X:X (X/X)}", "language": "de" }, { "text": "11.10-12.10.2017", "ref_time": "2017-10-05T07:38:12", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "on 12.09.2017 between 5-9 am", "ref_time": "2017-09-05T13:13:30", "gold_parse": "Interval[]{2017-09-12 05:00 (X/X) - 2017-09-12 09:00 (X/X)}", "language": "en" }, { "text": "01.11. - 03.11.17", "ref_time": "2017-09-26T13:47:08", "gold_parse": "Interval[]{2017-11-01 X:X (X/X) - 2017-11-03 X:X (X/X)}", "language": "de" }, { "text": "27.09.2017 20.45 Uhr", "ref_time": "2017-08-17T07:34:24", "gold_parse": "Time[]{2017-09-27 20:45 (X/X)}", "language": "de" }, { "text": "Mittwoch, 09. August 11.05 CET -12.05 UTC", "ref_time": "2017-08-03T10:35:06", "gold_parse": "Interval[]{2017-08-09 11:05 (X/X) - 2017-08-09 14:05 (X/X)}", "language": "de" }, { "text": "Montag den 07.08.2017 07:55 - 08:50 Uhr", "ref_time": "2017-08-03T11:10:20", "gold_parse": "Interval[]{2017-08-07 07:55 (X/X) - 2017-08-07 08:50 (X/X)}", "language": "de" }, { "text": "June 29th at 7am", "ref_time": "2017-06-20T08:23:36", "gold_parse": "Time[]{2017-05-29 07:00 (X/X)}", "language": "de" }, { "text": "Freitag, den 30.6. um 11:00 Uhr", "ref_time": "2017-06-27T13:45:30", "gold_parse": "Time[]{2017-06-30 11:00 (X/X)}", "language": "de" }, { "text": "15.12 gegen 9:00 Uhr", "ref_time": "2017-11-21T09:54:14", "gold_parse": "Time[]{2017-12-15 09:00 (X/X)}", "language": "de" }, { "text": "13.09. ca. 07:00", "ref_time": "2017-08-29T09:11:27", "gold_parse": "Time[]{2017-09-13 07:00 (X/X)}", "language": "de" }, { "text": "10.08.2017", "ref_time": "2017-06-30T09:10:07", "gold_parse": "Time[]{2017-08-10 X:X (X/X)}", "language": "de" }, { "text": "am 14.06. spätesten", "ref_time": "2017-06-09T13:46:57", "gold_parse": "Time[]{2017-06-14 X:X (X/last)}", "language": "de" }, { "text": "Donnerstag 15. Juni Abends, ab 18h", "ref_time": "2017-05-26T10:06:07", "gold_parse": "Interval[]{2017-06-15 18:00 (X/X) - None}", "language": "de" }, { "text": "Abend (ca 19 Uhr) des 22.11.", "ref_time": "2017-11-03T12:59:36", "gold_parse": "Time[]{2017-11-22 19:00 (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-06-01T07:12:37", "gold_parse": "Time[]{2017-06-01 X:X (X/X)}", "language": "de" }, { "text": "am 27.10.2017", "ref_time": "2017-10-20T08:36:16", "gold_parse": "Time[]{2017-10-27 X:X (X/X)}", "language": "de" }, { "text": "22.11. ab 17 Uhr", "ref_time": "2017-11-02T11:31:36", "gold_parse": "Interval[]{2017-11-22 17:00 (X/X) - None}", "language": "de" }, { "text": "Freitag 24.11. bis spätestens 13:00 Uhr", "ref_time": "2017-11-10T08:28:48", "gold_parse": "Interval[]{None - 2017-11-24 13:00 (X/X)}", "language": "de" }, { "text": "22.5.2017 9:45", "ref_time": "2017-05-17T15:59:31", "gold_parse": "Time[]{2017-05-22 09:45 (X/X)}", "language": "de" }, { "text": "Mittwoch, 09.08.2017 Abends", "ref_time": "2017-07-27T09:50:13", "gold_parse": "Time[]{2017-08-09 X:X (X/evening)}", "language": "de" }, { "text": "am 22.01.2018 vormittags", "ref_time": "2017-10-19T08:57:52", "gold_parse": "Time[]{2018-01-22 X:X (X/morning)}", "language": "de" }, { "text": "21.7.", "ref_time": "2017-06-08T13:28:04", "gold_parse": "Time[]{2017-07-21 X:X (X/X)}", "language": "de" }, { "text": "Heute", "ref_time": "2017-08-07T13:59:24", "gold_parse": "Time[]{2017-08-07 X:X (X/X)}", "language": "de" }, { "text": "July 11 at 14:10", "ref_time": "2017-06-15T14:27:58", "gold_parse": "Time[]{2017-07-11 14:10 (X/X)}", "language": "en" }, { "text": "November 8th 07:00-09:10", "ref_time": "2017-11-02T07:10:05", "gold_parse": "Interval[]{2017-11-08 07:00 (X/X) - 2017-11-08 09:10 (X/X)}", "language": "en" }, { "text": "28/10 morgens", "ref_time": "2017-10-20T09:36:41", "gold_parse": "Time[]{2017-10-28 X:X (X/morning)}", "language": "de" }, { "text": "am 19.11. 17:25Uhr", "ref_time": "2017-10-26T11:36:59", "gold_parse": "Time[]{2017-11-19 17:25 (X/X)}", "language": "de" }, { "text": "kommenden Montag ca. 17 Uhr", "ref_time": "2017-06-16T11:26:18", "gold_parse": "Time[]{2017-06-19 17:00 (X/X)}", "language": "de" }, { "text": "09.09.17 17:50", "ref_time": "2017-08-21T09:02:48", "gold_parse": "Time[]{2017-09-09 17:50 (X/X)}", "language": "de" }, { "text": "Fr 18.8. 19:10", "ref_time": "2017-08-14T17:37:59", "gold_parse": "Time[]{2017-08-18 19:10 (X/X)}", "language": "de" }, { "text": "05.10 early in the morning (around 7-8", "ref_time": "2017-10-03T10:34:40", "gold_parse": "Interval[]{2017-10-05 07:00 (X/X) - 2017-10-05 08:00 (X/X)}", "language": "en" }, { "text": "19. Juli 8.39", "ref_time": "2017-07-03T16:28:20", "gold_parse": "Time[]{2017-07-19 08:39 (X/X)}", "language": "de" }, { "text": "26.09. 06.30 Uhr", "ref_time": "2017-08-22T07:25:12", "gold_parse": "Time[]{2017-09-26 06:30 (X/X)}", "language": "de" }, { "text": "abends", "ref_time": "2017-07-14T03:15:20", "gold_parse": "Time[]{2017-07-20 X:X (X/evening)}", "language": "de" }, { "text": "24.10.17 12 Uhr", "ref_time": "2017-10-17T07:04:59", "gold_parse": "Interval[]{None - 2017-10-24 12:00 (X/X)}", "language": "de" }, { "text": "am 29.08. Abends", "ref_time": "2017-08-22T15:07:39", "gold_parse": "Time[]{2017-08-29 X:X (X/evening)}", "language": "de" }, { "text": "am 21.09.17 Zwischen 15 und 18 Uhr", "ref_time": "2017-09-06T11:50:28", "gold_parse": "Interval[]{2017-09-21 15:00 (X/X) - 2017-09-21 18:00 (X/X)}", "language": "de" }, { "text": "27 July 1100", "ref_time": "2017-07-20T15:50:49", "gold_parse": "Time[]{2017-07-27 11:00 (X/X)}", "language": "en" }, { "text": "16.11. 20:45Uhr", "ref_time": "2017-10-26T10:36:38", "gold_parse": "Time[]{2017-11-16 20:45 (X/X)}", "language": "de" }, { "text": "2 Nov 1815", "ref_time": "2017-08-25T12:23:01", "gold_parse": "Time[]{2017-11-02 18:15 (X/X)}", "language": "en" }, { "text": "22.11. ab 17 Uhr", "ref_time": "2017-11-02T11:31:36", "gold_parse": "Interval[]{2017-11-22 17:00 (X/X) - None}", "language": "de" }, { "text": "17 August 13.00", "ref_time": "2017-08-04T07:06:28", "gold_parse": "Time[]{2017-08-17 13:00 (X/X)}", "language": "de" }, { "text": "25.11-26.11", "ref_time": "2017-11-21T09:37:10", "gold_parse": "Interval[]{2017-11-25 X:X (X/X) - 2017-11-26 X:X (X/X)}", "language": "de" }, { "text": "11/12 last flight", "ref_time": "2017-11-28T08:47:28", "gold_parse": "Time[]{2017-12-11 X:X (X/last)}", "language": "en" }, { "text": "28.08.2017", "ref_time": "2017-08-24T14:33:06", "gold_parse": "Time[]{2017-08-28 X:X (X/X)}", "language": "de" }, { "text": "am 19.09. morgens um 07:05", "ref_time": "2017-07-13T11:05:22", "gold_parse": "Time[]{2017-09-19 07:05 (X/X)}", "language": "de" }, { "text": "27. Nov. 2017 6:50 Uhr", "ref_time": "2017-08-08T14:12:29", "gold_parse": "Time[]{2017-11-27 06:50 (X/X)}", "language": "de" }, { "text": "am 19.9.raus ab 16:30 Uhr", "ref_time": "2017-09-05T14:08:01", "gold_parse": "Interval[]{2017-09-19 16:30 (X/X) - None}", "language": "de" }, { "text": "14.12.17", "ref_time": "2017-11-24T08:44:59", "gold_parse": "Time[]{2017-12-14 X:X (X/X)}", "language": "de" }, { "text": "Montag, 30.10 14:52h bis 19:14h", "ref_time": "2017-10-27T14:09:58", "gold_parse": "Interval[]{2017-10-30 15:52 (X/X) - 2017-10-30 19:14 (X/X)}", "language": "de" }, { "text": "from 15 to 16 November 2017", "ref_time": "2017-10-25T12:56:44", "gold_parse": "Interval[]{2017-11-15 X:X (X/X) - 2017-11-16 X:X (X/X)}", "language": "en" }, { "text": "am Mo., 19.06.2017 16:55", "ref_time": "2017-06-10T08:38:27", "gold_parse": "Time[]{2017-06-19 16:55 (X/X)}", "language": "de" }, { "text": "Am 12.07.2017 um 06:34 Uhr", "ref_time": "2017-07-05T12:49:04", "gold_parse": "Time[]{2017-07-12 06:34 (X/X)}", "language": "de" }, { "text": "morgen ca. 19 Uhr", "ref_time": "2017-09-26T08:26:07", "gold_parse": "Time[]{2017-09-27 19:00 (X/X)}", "language": "de" }, { "text": "09.11.", "ref_time": "2017-11-08T14:56:34", "gold_parse": "Time[]{2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "Dienstag (12.09.17) abends", "ref_time": "2017-09-10T16:31:45", "gold_parse": "Time[]{2017-09-12 X:X (X/evening)}", "language": "de" }, { "text": "8th of June around 7pm", "ref_time": "2017-06-01T10:14:40", "gold_parse": "Time[]{2017-06-08 19:00 (X/X)}", "language": "en" }, { "text": "1 day", "ref_time": "2017-11-03T15:07:20", "gold_parse": "Interval[]{2017-11-06 X:X (X/X) - 2017-11-07 X:X (X/X)}", "language": "en" }, { "text": "09.11.17 20:53", "ref_time": "2017-11-06T08:48:13", "gold_parse": "Time[]{2017-11-09 20:53 (X/X)}", "language": "de" }, { "text": "Donnerstagnachmittag", "ref_time": "2017-07-14T03:15:20", "gold_parse": "Time[]{2017-07-20 X:X (X/afternoon)}", "language": "de" }, { "text": "on Thursday 23rd November around 6.30 p.m", "ref_time": "2017-10-18T15:34:42", "gold_parse": "Time[]{2017-11-23 18:30 (X/X)}", "language": "en" }, { "text": "11.08.17 freitags ca. 16-17 Uhr", "ref_time": "2017-07-11T10:57:53", "gold_parse": "Interval[]{2017-08-11 16:00 (X/X) - 2017-08-11 17:00 (X/X)}", "language": "de" }, { "text": "Thursday November 16th around 14:30-15:00", "ref_time": "2017-11-14T10:50:19", "gold_parse": "Interval[]{2017-11-16 14:30 (X/X) - 2017-11-16 15:00 (X/X)}", "language": "en" }, { "text": "06.07.2017 21:05 Uhr", "ref_time": "2017-06-13T07:12:31", "gold_parse": "Time[]{2017-07-06 21:05 (X/X)}", "language": "de" }, { "text": "on Wednesday 6th of September around 5", "ref_time": "2017-08-21T08:57:09", "gold_parse": "Time[]{2017-09-06 17:00 (X/X)}", "language": "en" }, { "text": "am 25.11.17 07:01", "ref_time": "2017-11-21T08:49:04", "gold_parse": "Time[]{2017-11-25 07:01 (X/X)}", "language": "de" }, { "text": "ab 22 Uhr", "ref_time": "2017-06-29T06:46:27", "gold_parse": "Interval[]{2017-07-04 22:00 (X/X) - None}", "language": "de" }, { "text": "20:00 Uhr", "ref_time": "2017-08-23T07:19:50", "gold_parse": "Time[]{2017-11-16 20:00 (X/X)}", "language": "de" }, { "text": "21.08.2017 18:00 Uhr", "ref_time": "2017-08-01T07:35:55", "gold_parse": "Time[]{2017-08-21 18:00 (X/X)}", "language": "de" }, { "text": "31.05.2017 ab 18:00 Uhr", "ref_time": "2017-05-16T08:27:18", "gold_parse": "Interval[]{2017-05-31 18:00 (X/X) - None}", "language": "de" }, { "text": "erster Flug 29/05", "ref_time": "2017-05-22T13:23:22", "gold_parse": "Time[]{2017-05-29 X:X (X/first)}", "language": "de" }, { "text": "am 14.10 14:55", "ref_time": "2017-08-31T12:47:31", "gold_parse": "Time[]{2017-10-14 14:55 (X/X)}", "language": "de" }, { "text": "am Fr", "ref_time": "2017-07-03T14:26:05", "gold_parse": "Time[]{2017-07-07 X:X (X/X)}", "language": "de" }, { "text": "am 15.01.-16.01.2018", "ref_time": "2017-11-29T11:19:40", "gold_parse": "Interval[]{2018-01-15 X:X (X/X) - 2018-01-16 X:X (X/X)}", "language": "de" }, { "text": "19.09.2017 09:50 Uhr", "ref_time": "2017-08-07T09:03:34", "gold_parse": "Time[]{2017-09-19 09:50 (X/X)}", "language": "de" }, { "text": "24.06.2017", "ref_time": "2017-05-16T10:59:39", "gold_parse": "Time[]{2017-06-24 X:X (X/X)}", "language": "de" }, { "text": "on 14/12/2017 6:00PM", "ref_time": "2017-11-17T09:52:14", "gold_parse": "Time[]{2017-12-14 18:00 (X/X)}", "language": "en" }, { "text": "10.11.2017 09:01 Uhr", "ref_time": "2017-11-03T06:25:28", "gold_parse": "Time[]{2017-11-10 09:01 (X/X)}", "language": "de" }, { "text": "07.11.2017 17:17 Uhr", "ref_time": "2017-09-27T09:42:08", "gold_parse": "Time[]{2017-11-07 17:17 (X/X)}", "language": "de" }, { "text": "1 night", "ref_time": "2017-10-24T12:30:29", "gold_parse": "Duration[]{1 nights}", "language": "en" }, { "text": "am 14.06. spätesten", "ref_time": "2017-06-09T13:46:57", "gold_parse": "Time[]{2017-06-14 X:X (X/last)}", "language": "de" }, { "text": "am 28. Juli später nachmittags", "ref_time": "2017-07-14T09:25:35", "gold_parse": "Time[]{2017-07-28 X:X (X/afternoon)}", "language": "de" }, { "text": "Sonntag 19th November 18h45", "ref_time": "2017-11-01T14:08:02", "gold_parse": "Time[]{2017-11-19 18:45 (X/X)}", "language": "de" }, { "text": "am 24.10.", "ref_time": "2017-10-06T12:36:24", "gold_parse": "Time[]{2017-10-24 X:X (X/X)}", "language": "de" }, { "text": "on Tuesday, June 20, after 13:00", "ref_time": "2017-06-10T15:11:50", "gold_parse": "Interval[]{2017-06-20 13:00 (X/X) - None}", "language": "en" }, { "text": "17.10.", "ref_time": "2017-10-09T12:04:19", "gold_parse": "Time[]{2017-10-17 X:X (X/X)}", "language": "de" }, { "text": "Friday 27th of October", "ref_time": "2017-08-22T14:54:12", "gold_parse": "Time[]{2017-10-27 X:X (X/X)}", "language": "de" }, { "text": "Von 18-20.05.", "ref_time": "2017-05-10T14:33:46", "gold_parse": "Interval[]{2017-05-18 X:X (X/X) - 2017-05-20 X:X (X/X)}", "language": "de" }, { "text": "12.6 - 16.6", "ref_time": "2017-05-28T20:40:14", "gold_parse": "Interval[]{2017-06-12 X:X (X/X) - 2017-06-16 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch, 12. Juli 2017 gegen 18 Uhr", "ref_time": "2017-07-06T12:49:21", "gold_parse": "Time[]{2017-07-12 18:00 (X/X)}", "language": "de" }, { "text": "02.01.", "ref_time": "2017-11-02T11:30:22", "gold_parse": "Time[]{2018-01-02 X:X (X/X)}", "language": "de" }, { "text": "vom 10-11.09.17", "ref_time": "2017-09-08T09:32:03", "gold_parse": "Interval[]{2017-09-10 X:X (X/X) - 2017-09-11 X:X (X/X)}", "language": "de" }, { "text": "today 12.10", "ref_time": "2017-10-12T05:43:08", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "en" }, { "text": "23.10.2017 bis 27.10.2017", "ref_time": "2017-09-05T14:48:27", "gold_parse": "Interval[]{2017-10-23 X:X (X/X) - 2017-10-27 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag 3:30", "ref_time": "2017-06-02T14:46:13", "gold_parse": "Time[]{2017-06-29 03:30 (X/X)}", "language": "de" }, { "text": "From July 18th to July 21st", "ref_time": "2017-07-14T10:43:29", "gold_parse": "Interval[]{2017-07-18 X:X (X/X) - 2017-07-21 X:X (X/X)}", "language": "en" }, { "text": "vom 12.9 abends bis 15.9 mittags", "ref_time": "2017-07-18T13:51:21", "gold_parse": "Interval[]{2017-09-12 X:X (X/evening) - 2017-09-15 X:X (X/noon)}", "language": "de" }, { "text": "26.5., 12:55", "ref_time": "2017-05-19T16:25:14", "gold_parse": "Time[]{2017-05-26 12:55 (X/X)}", "language": "de" }, { "text": "3.9.", "ref_time": "2017-08-16T10:47:56", "gold_parse": "Time[]{2017-09-03 X:X (X/X)}", "language": "de" }, { "text": "am 29.10.", "ref_time": "2017-10-24T13:44:54", "gold_parse": "Time[]{2017-10-29 X:X (X/X)}", "language": "de" }, { "text": "13.09.2017 18:00-19:00 Uhr", "ref_time": "2017-08-24T06:48:30", "gold_parse": "Interval[]{2017-09-13 18:00 (X/X) - 2017-09-13 19:00 (X/X)}", "language": "de" }, { "text": "Montag 3.7. 5:35 Uhr", "ref_time": "2017-06-02T14:46:13", "gold_parse": "Time[]{2017-07-03 05:35 (X/X)}", "language": "de" }, { "text": "between 21 and 22.11.2017", "ref_time": "2017-11-14T10:45:44", "gold_parse": "Interval[]{2017-11-21 X:X (X/X) - 2017-11-22 X:X (X/X)}", "language": "en" }, { "text": "20.09. ab 16:11", "ref_time": "2017-09-15T14:19:25", "gold_parse": "Time[]{2017-09-20 16:11 (X/X)}", "language": "de" }, { "text": "19/06", "ref_time": "2017-05-12T16:18:17", "gold_parse": "Time[]{2017-06-19 X:X (X/X)}", "language": "de" }, { "text": "05/09 - 08/09", "ref_time": "2017-09-04T10:25:15", "gold_parse": "Interval[]{2017-09-05 X:X (X/X) - 2017-09-08 X:X (X/X)}", "language": "other" }, { "text": "08.07.2017", "ref_time": "2017-07-04T11:32:47", "gold_parse": "Time[]{2017-07-08 X:X (X/X)}", "language": "de" }, { "text": "17:30 Uhr 04.07.2017", "ref_time": "2017-06-12T12:45:48", "gold_parse": "Time[]{2017-07-04 17:30 (X/X)}", "language": "de" }, { "text": "05.09.2017 11:00 Uhr", "ref_time": "2017-08-18T08:14:06", "gold_parse": "Time[]{2017-09-05 11:00 (X/X)}", "language": "de" }, { "text": "on sep 27", "ref_time": "2017-09-20T10:54:19", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "en" }, { "text": "August 18 5:35 pm", "ref_time": "2017-07-04T08:58:19", "gold_parse": "Time[]{2017-08-18 17:35 (X/X)}", "language": "de" }, { "text": "week 36", "ref_time": "2017-08-15T17:43:29", "gold_parse": "Interval[]{2017-09-04 X:X (X/X) - 2017-09-10 X:X (X/X)}", "language": "en" }, { "text": "Mo 09.10.17 08:16", "ref_time": "2017-09-29T08:46:55", "gold_parse": "Time[]{2017-10-09 08:16 (X/X)}", "language": "de" }, { "text": "30.05.2017 bis 31.05.2017", "ref_time": "2017-05-29T13:45:48", "gold_parse": "Interval[]{2017-05-30 X:X (X/X) - 2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "28.11.2017 18:04", "ref_time": "2017-11-27T07:44:54", "gold_parse": "Time[]{2017-11-28 18:04 (X/X)}", "language": "de" }, { "text": "02.06. ab 13:00h", "ref_time": "2017-05-24T06:11:08", "gold_parse": "Interval[]{2017-06-02 13:00 (X/X) - None}", "language": "de" }, { "text": "vom 25.09 bis 26.09.", "ref_time": "2017-09-05T12:44:58", "gold_parse": "Interval[]{2017-09-25 X:X (X/X) - 2017-09-26 X:X (X/X)}", "language": "de" }, { "text": "05.09.2017 10:30 Uhr", "ref_time": "2017-09-01T11:07:30", "gold_parse": "Time[]{2017-09-05 10:30 (X/X)}", "language": "de" }, { "text": "13.12 - 17.12", "ref_time": "2017-11-28T12:41:35", "gold_parse": "Interval[]{2017-12-13 X:X (X/X) - 2017-12-17 X:X (X/X)}", "language": "en" }, { "text": "29 SEP, 18:40", "ref_time": "2017-09-10T15:57:30", "gold_parse": "Time[]{2017-09-29 18:40 (X/X)}", "language": "other" }, { "text": "04.09.2017", "ref_time": "2017-08-10T08:30:41", "gold_parse": "Time[]{2017-09-04 X:X (X/X)}", "language": "de" }, { "text": "9 Nov 1815", "ref_time": "2017-08-25T12:23:01", "gold_parse": "Time[]{2017-11-09 18:15 (X/X)}", "language": "en" }, { "text": "am 27.09.", "ref_time": "2017-09-25T12:21:15", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "am 28.11. 17:03", "ref_time": "2017-11-27T15:16:11", "gold_parse": "Time[]{2017-11-28 17:03 (X/X)}", "language": "de" }, { "text": "vom 11.07.2017 von 09:15h bis Mittwoch, den 12.07.2017 15:30h", "ref_time": "2017-07-06T08:34:31", "gold_parse": "Interval[]{2017-07-11 09:15 (X/X) - 2017-07-12 15:30 (X/X)}", "language": "de" }, { "text": "1. Juni 14:15", "ref_time": "2017-05-12T15:32:31", "gold_parse": "Time[]{2017-06-01 14:15 (X/X)}", "language": "de" }, { "text": "24. - 26.10.2017", "ref_time": "2017-10-24T09:03:07", "gold_parse": "Interval[]{2017-10-24 X:X (X/X) - 2017-10-26 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag den 03.08.2017 um 12:15", "ref_time": "2017-07-31T09:12:08", "gold_parse": "Time[]{2017-08-03 12:15 (X/X)}", "language": "de" }, { "text": "vom 14-15-10", "ref_time": "2017-10-13T06:20:34", "gold_parse": "Interval[]{2017-10-14 X:X (X/X) - 2017-10-15 X:X (X/X)}", "language": "de" }, { "text": "Thursday the 30 of Nov. early", "ref_time": "2017-09-22T12:12:02", "gold_parse": "Time[]{2017-11-30 X:X (X/morning)}", "language": "en" }, { "text": "25.10.2017 abends", "ref_time": "2017-10-20T10:14:00", "gold_parse": "Time[]{2017-10-25 X:X (X/evening)}", "language": "de" }, { "text": "Montag, 16.10, bis Donnerstag 19.10", "ref_time": "2017-10-13T10:05:05", "gold_parse": "Interval[]{2017-10-16 X:X (X/X) - 2017-10-19 X:X (X/X)}", "language": "de" }, { "text": "am 7.8. 8.30 - 9.30h", "ref_time": "2017-07-26T10:22:54", "gold_parse": "Interval[]{2017-08-07 08:30 (X/X) - 2017-08-07 09:30 (X/X)}", "language": "de" }, { "text": "30.06.17 am 01.07 morgens/vormittags", "ref_time": "2017-05-19T08:35:23", "gold_parse": "Time[]{2017-07-01 X:X (X/morning)}", "language": "de" }, { "text": "am 21.09.", "ref_time": "2017-09-07T15:01:43", "gold_parse": "Time[]{2017-09-21 X:X (X/X)}", "language": "de" }, { "text": "am 8.11.2017 um 15:05h", "ref_time": "2017-10-27T08:56:23", "gold_parse": "Time[]{2017-11-08 15:05 (X/X)}", "language": "de" }, { "text": "vom 21.06-22.06", "ref_time": "2017-06-19T11:35:54", "gold_parse": "Interval[]{2017-06-21 X:X (X/X) - 2017-06-22 X:X (X/X)}", "language": "de" }, { "text": "2017-10-25 17:02", "ref_time": "2017-10-23T08:57:24", "gold_parse": "Time[]{2017-10-25 17:02 (X/X)}", "language": "de" }, { "text": "Evening of 8 Nov", "ref_time": "2017-08-25T09:43:25", "gold_parse": "Time[]{2017-11-08 X:X (X/evening)}", "language": "en" }, { "text": "10.10.2017 8:20 - 9:30 Uhr", "ref_time": "2017-10-06T12:13:14", "gold_parse": "Interval[]{2017-10-10 08:20 (X/X) - 2017-10-10 09:30 (X/X)}", "language": "de" }, { "text": "25.9.2017 18:00", "ref_time": "2017-09-25T06:14:47", "gold_parse": "Time[]{2017-09-25 18:00 (X/X)}", "language": "en" }, { "text": "Oct 31 1055-1215", "ref_time": "2017-10-26T15:49:51", "gold_parse": "Interval[]{2017-10-31 10:55 (X/X) - 2017-10-31 12:15 (X/X)}", "language": "en" }, { "text": "01.06.201", "ref_time": "2017-05-23T11:18:33", "gold_parse": "Time[]{2017-06-01 X:X (X/X)}", "language": "de" }, { "text": "30.01.2018 bis 03.02.3018", "ref_time": "2017-10-23T04:05:01", "gold_parse": "Interval[]{2018-01-30 X:X (X/X) - 2018-02-03 X:X (X/X)}", "language": "de" }, { "text": "Dienstag morgens", "ref_time": "2017-08-24T07:40:51", "gold_parse": "Time[]{2017-08-29 X:X (X/morning)}", "language": "de" }, { "text": "Am Donnerstag, den 20.07.2017 zwischen 08:00 Uhr und 09:00 Uhr", "ref_time": "2017-07-17T10:34:32", "gold_parse": "Interval[]{2017-07-20 08:00 (X/X) - 2017-07-20 09:00 (X/X)}", "language": "de" }, { "text": "am Samstag Nachmittag 27.5", "ref_time": "2017-05-19T07:43:59", "gold_parse": "Time[]{2017-05-27 X:X (X/afternoon)}", "language": "de" }, { "text": "20.07.2017 22:10 Uhr", "ref_time": "2017-06-23T12:40:07", "gold_parse": "Time[]{2017-07-20 22:10 (X/X)}", "language": "de" }, { "text": "Fr. 9.6.2017 um ca. 21.05 Uhr", "ref_time": "2017-05-18T11:59:34", "gold_parse": "Time[]{2017-06-09 21:05 (X/X)}", "language": "de" }, { "text": "27/11 in the morning", "ref_time": "2017-11-17T14:00:05", "gold_parse": "Time[]{2017-11-27 X:X (X/morning)}", "language": "en" }, { "text": "05/09 - 08/09", "ref_time": "2017-09-04T10:25:15", "gold_parse": "Interval[]{2017-09-05 X:X (X/X) - 2017-09-08 X:X (X/X)}", "language": "other" }, { "text": "Tue, Dec 12 7:20 AM - 8:25 AM", "ref_time": "2017-11-28T14:09:36", "gold_parse": "Interval[]{2017-12-12 07:20 (X/X) - 2017-12-12 08:25 (X/X)}", "language": "de" }, { "text": "08/10/2017", "ref_time": "2017-09-07T10:27:33", "gold_parse": "Time[]{2017-10-08 X:X (X/X)}", "language": "en" }, { "text": "14.7. 0900-1005", "ref_time": "2017-07-06T07:43:34", "gold_parse": "Interval[]{2017-07-14 09:00 (X/X) - 2017-07-14 10:05 (X/X)}", "language": "de" }, { "text": "Nachmittags / abends", "ref_time": "2017-10-17T12:00:48", "gold_parse": "Interval[]{2017-10-18 X:X (X/afternoon) - 2017-10-18 X:X (X/evening)}", "language": "de" }, { "text": "29.06.2017 ab 16:00 Uhr", "ref_time": "2017-06-22T07:23:17", "gold_parse": "Interval[]{2017-06-29 16:00 (X/X) - None}", "language": "de" }, { "text": "am 28. Juli 18:34", "ref_time": "2017-08-02T11:02:57", "gold_parse": "Time[]{2017-07-28 18:34 (X/X)}", "language": "de" }, { "text": "morgen, 24.10.2017", "ref_time": "2017-10-23T09:52:15", "gold_parse": "Time[]{2017-10-24 X:X (X/X)}", "language": "de" }, { "text": "20.11.17", "ref_time": "2017-11-07T15:16:11", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "de" }, { "text": "20.08.2017 nachmittags", "ref_time": "2017-07-26T08:36:02", "gold_parse": "Time[]{2017-08-20 X:X (X/afternoon)}", "language": "de" }, { "text": "heute", "ref_time": "2017-06-07T15:12:13", "gold_parse": "Time[]{2017-06-07 X:X (X/X)}", "language": "de" }, { "text": "Mo. 07.08.2017", "ref_time": "2017-08-04T07:11:28", "gold_parse": "Time[]{2017-08-07 X:X (X/X)}", "language": "de" }, { "text": "22.11.", "ref_time": "2017-11-10T19:12:43", "gold_parse": "Time[]{2017-11-22 X:X (X/X)}", "language": "de" }, { "text": "15/11 3pm", "ref_time": "2017-10-16T12:42:25", "gold_parse": "Time[]{2017-11-15 15:00 (X/X)}", "language": "de" }, { "text": "24.11.2017 Ab 17:00", "ref_time": "2017-11-13T10:08:20", "gold_parse": "Interval[]{2017-11-24 17:00 (X/X) - None}", "language": "de" }, { "text": "15.08.2017", "ref_time": "2017-08-09T12:26:59", "gold_parse": "Time[]{2017-08-15 X:X (X/X)}", "language": "de" }, { "text": "13:00 Uhr 28.11.2017", "ref_time": "2017-11-26T19:22:42", "gold_parse": "Time[]{2017-11-28 X:X (X/X)}", "language": "de" }, { "text": "1.9. Mittag", "ref_time": "2017-08-30T12:42:40", "gold_parse": "Time[]{2017-09-01 X:X (X/noon)}", "language": "de" }, { "text": "31.8.17", "ref_time": "2017-08-30T17:28:42", "gold_parse": "Time[]{2017-08-31 X:X (X/X)}", "language": "de" }, { "text": "Montag 04.06.2018", "ref_time": "2017-11-16T09:29:29", "gold_parse": "Time[]{2018-06-04 X:X (X/X)}", "language": "de" }, { "text": "05.09.", "ref_time": "2017-09-04T14:04:24", "gold_parse": "Time[]{2017-09-05 X:X (X/X)}", "language": "de" }, { "text": "from 13 to 14 November 2017", "ref_time": "2017-10-25T12:56:44", "gold_parse": "Interval[]{2017-10-13 X:X (X/X) - 2017-10-14 X:X (X/X)}", "language": "en" }, { "text": "Montag, den 16.10.2017", "ref_time": "2017-10-11T18:54:03", "gold_parse": "Time[]{2017-10-16 X:X (X/X)}", "language": "de" }, { "text": "am 17.6", "ref_time": "2017-05-28T20:27:09", "gold_parse": "Time[]{2017-06-17 X:X (X/X)}", "language": "de" }, { "text": "19.09.", "ref_time": "2017-09-18T12:41:37", "gold_parse": "Time[]{2017-09-19 X:X (X/X)}", "language": "de" }, { "text": "6.11. ca. 10:30 Uhr", "ref_time": "2017-10-30T14:14:24", "gold_parse": "Time[]{2017-11-06 10:30 (X/X)}", "language": "de" }, { "text": "17 of September on Sunday night", "ref_time": "2017-09-07T13:55:55", "gold_parse": "Time[]{2017-09-17 X:X (X/evening)}", "language": "en" }, { "text": "27.07.2017", "ref_time": "2017-07-24T10:20:08", "gold_parse": "Time[]{2017-07-27 X:X (X/X)}", "language": "de" }, { "text": "31.05.2017, 15:00 Uhr, - 03.06.2017, 15:00 Uhr", "ref_time": "2017-05-29T07:36:12", "gold_parse": "Interval[]{2017-05-31 15:00 (X/X) - 2017-06-03 15:00 (X/X)}", "language": "de" }, { "text": "20.10.17", "ref_time": "2017-09-28T12:32:26", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "de" }, { "text": "vom 28.7-29.07", "ref_time": "2017-07-19T18:47:52", "gold_parse": "Interval[]{2017-07-28 X:X (X/X) - 2017-07-29 X:X (X/X)}", "language": "de" }, { "text": "26.9-27.09.2017", "ref_time": "2017-09-18T12:46:43", "gold_parse": "Interval[]{2017-09-26 X:X (X/X) - 2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "22.10.2017 ab MIttag", "ref_time": "2017-08-17T13:29:22", "gold_parse": "Time[]{2017-10-22 X:X (X/noon)}", "language": "de" }, { "text": "an 09.10. ab 13.10.2017", "ref_time": "2017-10-05T13:14:20", "gold_parse": "Interval[]{2017-10-09 X:X (X/X) - 2017-10-13 X:X (X/X)}", "language": "de" }, { "text": "08.08.2017 06:50", "ref_time": "2017-08-01T11:09:32", "gold_parse": "Time[]{2017-08-08 06:50 (X/X)}", "language": "de" }, { "text": "22.05.", "ref_time": "2017-05-18T14:05:26", "gold_parse": "Time[]{2017-05-22 X:X (X/X)}", "language": "de" }, { "text": "09.11.2017", "ref_time": "2017-11-08T11:02:56", "gold_parse": "Time[]{2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "30.08.17", "ref_time": "2017-08-01T12:54:37", "gold_parse": "Time[]{2017-08-30 X:X (X/X)}", "language": "de" }, { "text": "am 18.12. gegen 9.00 Uhr", "ref_time": "2017-11-29T18:39:21", "gold_parse": "Time[]{2017-12-18 09:00 (X/X)}", "language": "de" }, { "text": "Donnerstag, 20.7. 19:55h", "ref_time": "2017-07-11T16:24:32", "gold_parse": "Time[]{2017-07-20 19:55 (X/X)}", "language": "de" }, { "text": "05.12.2017 11:15 - 12:15", "ref_time": "2017-11-27T14:52:20", "gold_parse": "Interval[]{2017-12-05 11:15 (X/X) - 2017-12-05 12:15 (X/X)}", "language": "de" }, { "text": "15.12 gegen 9:00 Uhr", "ref_time": "2017-11-21T09:54:14", "gold_parse": "Time[]{2017-12-15 09:00 (X/X)}", "language": "de" }, { "text": "6.6. late", "ref_time": "2017-05-25T18:08:30", "gold_parse": "Time[]{2017-06-06 X:X (X/latenight)}", "language": "en" }, { "text": "4.10. 11:45", "ref_time": "2017-09-25T14:20:43", "gold_parse": "Time[]{2017-10-04 11:45 (X/X)}", "language": "de" }, { "text": "10.08 ab 16 Uhr", "ref_time": "2017-08-03T11:43:00", "gold_parse": "Interval[]{2017-08-10 16:00 (X/X) - None}", "language": "de" }, { "text": "from 12 to 13 November 2017", "ref_time": "2017-10-25T12:56:44", "gold_parse": "Interval[]{2017-10-12 X:X (X/X) - 2017-10-13 X:X (X/X)}", "language": "en" }, { "text": "am 7.12.2017 morgens", "ref_time": "2017-10-04T08:12:42", "gold_parse": "Time[]{2017-12-07 X:X (X/morning)}", "language": "de" }, { "text": "29. November 20:20", "ref_time": "2017-11-22T07:06:12", "gold_parse": "Time[]{2017-11-29 20:20 (X/X)}", "language": "de" }, { "text": "22.06.2017 17:30 Uhr", "ref_time": "2017-06-12T11:06:22", "gold_parse": "Time[]{2017-06-22 17:30 (X/X)}", "language": "de" }, { "text": "24th October in the evening", "ref_time": "2017-09-19T09:22:24", "gold_parse": "Time[]{2017-10-24 X:X (X/evening)}", "language": "en" }, { "text": "08.11.2017 morgens spätestens 8 Uhr", "ref_time": "2017-10-23T10:11:24", "gold_parse": "Interval[]{None - 2017-11-08 08:00 (X/X)}", "language": "de" }, { "text": "23.05. - 24.05.", "ref_time": "2017-05-17T11:01:25", "gold_parse": "Interval[]{2017-05-23 X:X (X/X) - 2017-05-24 X:X (X/X)}", "language": "de" }, { "text": "30 May 2305-0715+1", "ref_time": "2017-05-23T16:47:40", "gold_parse": "Interval[]{2017-05-30 23:05 (X/X) - 2017-05-31 07:15 (X/X)}", "language": "en" }, { "text": "30.11. um 19:00h", "ref_time": "2017-10-23T08:36:51", "gold_parse": "Time[]{2017-11-30 19:00 (X/X)}", "language": "de" }, { "text": "26.09. 12:00", "ref_time": "2017-08-03T15:42:56", "gold_parse": "Time[]{2017-09-26 12:00 (X/X)}", "language": "de" }, { "text": "on 16/08 late afternoon", "ref_time": "2017-08-08T16:10:02", "gold_parse": "Time[]{2017-08-16 X:X (X/lateafternoon)}", "language": "en" }, { "text": "16.09. 09:55 Uhr", "ref_time": "2017-09-12T09:14:21", "gold_parse": "Time[]{2017-09-16 09:55 (X/X)}", "language": "de" }, { "text": "am 01.11. gegen Abend", "ref_time": "2017-09-18T22:28:35", "gold_parse": "Time[]{2017-11-01 X:X (X/evening)}", "language": "de" }, { "text": "04.10.2017 ab ca 15.00 Uhr - ca 18.00 Uhr", "ref_time": "2017-10-04T06:28:15", "gold_parse": "Interval[]{2017-10-04 15:00 (X/X) - 2017-10-04 18:00 (X/X)}", "language": "de" }, { "text": "Donnerstag 23.11, 20.27h", "ref_time": "2017-11-21T10:38:19", "gold_parse": "Time[]{2017-11-23 20:27 (X/X)}", "language": "de" }, { "text": "1.1.1997", "ref_time": "2017-08-04T15:22:08", "gold_parse": "Time[]{1997-01-01 X:X (X/X)}", "language": "de" }, { "text": "on Monday 20th November", "ref_time": "2017-10-18T15:34:42", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "en" }, { "text": "Mon, Sep 18 6:10 PM - 8:55 PM", "ref_time": "2017-09-13T07:21:32", "gold_parse": "Interval[]{2017-09-18 18:10 (X/X) - 2017-09-18 20:55 (X/X)}", "language": "de" }, { "text": "22.08.2017", "ref_time": "2017-09-06T07:36:40", "gold_parse": "Time[]{2017-08-22 X:X (X/X)}", "language": "de" }, { "text": "12.09.17 - 14.09.17 14:00 - 16:00", "ref_time": "2017-08-11T11:31:27", "gold_parse": "Interval[]{2017-09-14 14:00 (X/X) - 2017-09-14 16:00 (X/X)}", "language": "en" }, { "text": "02.10.2017 17:30 Uhr", "ref_time": "2017-09-27T09:13:32", "gold_parse": "Time[]{2017-10-02 17:30 (X/X)}", "language": "de" }, { "text": "05.08.2017 Vormittags", "ref_time": "2017-07-05T11:53:05", "gold_parse": "Time[]{2017-08-05 X:X (X/morning)}", "language": "de" }, { "text": "Jun 7 at 05.10am", "ref_time": "2017-06-05T10:50:37", "gold_parse": "Time[]{2017-06-07 05:10 (X/X)}", "language": "en" }, { "text": "30-31 oct", "ref_time": "2017-10-13T10:44:22", "gold_parse": "Interval[]{2017-10-30 X:X (X/X) - 2017-10-31 X:X (X/X)}", "language": "en" }, { "text": "am 12.09.17", "ref_time": "2017-08-31T08:20:42", "gold_parse": "Time[]{2017-09-12 X:X (X/X)}", "language": "de" }, { "text": "Friday August 18th 15:55-16:55", "ref_time": "2017-08-09T13:20:08", "gold_parse": "Interval[]{2017-08-18 15:55 (X/X) - 2017-08-18 16:55 (X/X)}", "language": "en" }, { "text": "19.09.2017 - 21.09.2017", "ref_time": "2017-09-11T11:47:44", "gold_parse": "Interval[]{2017-09-19 X:X (X/X) - 2017-09-21 X:X (X/X)}", "language": "de" }, { "text": "13.07.17 9:00 Uhr", "ref_time": "2017-07-07T14:52:10", "gold_parse": "Time[]{2017-07-13 09:00 (X/X)}", "language": "de" }, { "text": "am Mittwoch, den 12. Juli am Abend", "ref_time": "2017-07-07T10:47:26", "gold_parse": "Time[]{2017-07-12 X:X (X/evening)}", "language": "de" }, { "text": "29.8. 12:00", "ref_time": "2017-08-22T09:38:03", "gold_parse": "Time[]{2017-08-29 12:00 (X/X)}", "language": "de" }, { "text": "Fr um 16:25 Uhr", "ref_time": "2017-11-29T13:42:37", "gold_parse": "Time[]{2017-12-08 16:25 (X/X)}", "language": "de" }, { "text": "Mi, 19.7.2017 früh morgens", "ref_time": "2017-07-14T07:31:38", "gold_parse": "Time[]{2017-07-19 X:X (X/morning)}", "language": "de" }, { "text": "from 19th - 23rd of November", "ref_time": "2017-11-15T11:42:14", "gold_parse": "Interval[]{2017-11-19 X:X (X/X) - 2017-11-23 X:X (X/X)}", "language": "en" }, { "text": "heute 30.08", "ref_time": "2017-08-30T07:15:11", "gold_parse": "Time[]{2017-08-30 X:X (X/X)}", "language": "de" }, { "text": "11.6., 23:10", "ref_time": "2017-06-07T10:41:26", "gold_parse": "Time[]{2017-06-11 23:20 (X/X)}", "language": "de" }, { "text": "08. - 09.11.2017", "ref_time": "2017-11-06T11:03:48", "gold_parse": "Interval[]{2017-11-08 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "Do. 14.9 Abends", "ref_time": "2017-08-23T07:22:10", "gold_parse": "Time[]{2017-09-14 X:X (X/evening)}", "language": "de" }, { "text": "Nov 18 around 10-11am", "ref_time": "2017-11-13T15:08:36", "gold_parse": "Interval[]{2017-11-18 10:00 (X/X) - 2017-11-18 11:00 (X/X)}", "language": "en" }, { "text": "Donnerstag, 21.09.2017 abends", "ref_time": "2017-08-22T07:53:54", "gold_parse": "Time[]{2017-09-21 X:X (X/evening)}", "language": "de" }, { "text": "01.06. Spätanreise", "ref_time": "2017-05-30T06:56:49", "gold_parse": "Time[]{2017-06-01 X:X (X/evening)}", "language": "de" }, { "text": "morgens 12.10.2017", "ref_time": "2017-10-04T11:29:12", "gold_parse": "Time[]{2017-10-12 X:X (X/morning)}", "language": "de" }, { "text": "am 13.11.2017 um 17.30 Uhr", "ref_time": "2017-11-03T14:52:58", "gold_parse": "Time[]{2017-11-13 17:30 (X/X)}", "language": "de" }, { "text": "26.07. ab 09:00 Uhr", "ref_time": "2017-07-24T08:13:32", "gold_parse": "Interval[]{2017-07-26 09:00 (X/X) - None}", "language": "de" }, { "text": "09.09.17", "ref_time": "2017-07-31T15:59:37", "gold_parse": "Time[]{2017-09-09 X:X (X/X)}", "language": "de" }, { "text": "morning of the 11th of June", "ref_time": "2017-05-23T14:01:02", "gold_parse": "Time[]{2017-06-11 X:X (X/morning)}", "language": "en" }, { "text": "25th September", "ref_time": "2017-09-07T10:03:03", "gold_parse": "Time[]{2017-09-25 X:X (X/X)}", "language": "en" }, { "text": "Freitag", "ref_time": "2017-11-12T15:07:37", "gold_parse": "Time[]{2017-11-17 X:X (X/X)}", "language": "de" }, { "text": "10.11.2017 20.00 Uhr", "ref_time": "2017-11-06T08:50:51", "gold_parse": "Time[]{2017-11-10 20:00 (X/X)}", "language": "de" }, { "text": "27. Nov. 2017 17:00", "ref_time": "2017-10-10T09:23:21", "gold_parse": "Time[]{2017-11-27 17:00 (X/X)}", "language": "de" }, { "text": "am 05.12.2017 13:05", "ref_time": "2017-11-16T12:27:41", "gold_parse": "Time[]{2017-12-05 13:05 (X/X)}", "language": "de" }, { "text": "6.10. 20:20", "ref_time": "2017-09-25T14:20:43", "gold_parse": "Time[]{2017-10-06 20:20 (X/X)}", "language": "de" }, { "text": "on 2nd and 3rd night", "ref_time": "2017-10-24T13:42:29", "gold_parse": "Interval[]{2017-11-02 X:X (X/X) - 2017-11-03 X:X (X/X)}", "language": "en" }, { "text": "am 13.09 um ca. 18:00 Uhr", "ref_time": "2017-09-01T12:51:12", "gold_parse": "Time[]{2017-09-13 18:00 (X/X)}", "language": "de" }, { "text": "02.07. ab 17 Uhr", "ref_time": "2017-06-07T09:02:11", "gold_parse": "Interval[]{2017-07-02 17:00 (X/X) - None}", "language": "de" }, { "text": "Montag 26.06. 13:38h", "ref_time": "2017-06-24T07:38:35", "gold_parse": "Time[]{2017-06-26 13:38 (X/X)}", "language": "de" }, { "text": "morgen gegen Mittag", "ref_time": "2017-06-10T16:32:53", "gold_parse": "Time[]{2017-06-11 X:X (X/noon)}", "language": "de" }, { "text": "26.10.2017", "ref_time": "2017-10-24T11:43:53", "gold_parse": "Time[]{2017-10-26 X:X (X/X)}", "language": "de" }, { "text": "17.05.17", "ref_time": "2017-05-16T08:17:54", "gold_parse": "Time[]{2017-05-17 X:X (X/X)}", "language": "de" }, { "text": "27 SEP,", "ref_time": "2017-09-10T15:57:30", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "other" }, { "text": "Freitag, 11.08.2017 ca. 10:00 Uhr", "ref_time": "2017-08-04T08:41:48", "gold_parse": "Time[]{2017-08-11 10:00 (X/X)}", "language": "de" }, { "text": "vom 04. - 05.11.", "ref_time": "2017-10-25T14:57:13", "gold_parse": "Interval[]{2017-11-04 X:X (X/X) - 2017-11-05 X:X (X/X)}", "language": "de" }, { "text": "28th Sep", "ref_time": "2017-09-08T17:14:10", "gold_parse": "Time[]{2017-09-28 X:X (X/X)}", "language": "en" }, { "text": "Wed, Oct 11 8:30 PM - 9:47 PM", "ref_time": "2017-09-19T17:01:37", "gold_parse": "Interval[]{2017-10-11 08:30 (X/X) - 2017-10-11 09:47 (X/X)}", "language": "de" }, { "text": "Do. 06.07.", "ref_time": "2017-05-29T14:11:17", "gold_parse": "Time[]{2017-07-06 X:X (X/X)}", "language": "de" }, { "text": "Friday 28/06 around 15:20", "ref_time": "2017-07-20T15:24:21", "gold_parse": "Time[]{2017-06-28 15:20 (X/X)}", "language": "en" }, { "text": "heute", "ref_time": "2017-11-30T10:11:23", "gold_parse": "Time[]{2017-11-30 X:X (X/X)}", "language": "de" }, { "text": "7.11. bis 8.11.17", "ref_time": "2017-10-10T20:51:54", "gold_parse": "Interval[]{2017-11-07 X:X (X/X) - 2017-11-08 X:X (X/X)}", "language": "de" }, { "text": "18.09.17 19:40 20:50 Uhr", "ref_time": "2017-09-05T12:27:53", "gold_parse": "Interval[]{2017-09-18 19:40 (X/X) - 2017-09-18 20:50 (X/X)}", "language": "de" }, { "text": "am 3.12.", "ref_time": "2017-10-19T16:23:07", "gold_parse": "Time[]{2017-12-03 X:X (X/X)}", "language": "de" }, { "text": "28.11.", "ref_time": "2017-10-30T16:22:20", "gold_parse": "Time[]{2017-11-28 X:X (X/X)}", "language": "de" }, { "text": "jetzt", "ref_time": "2017-05-24T18:49:27", "gold_parse": "Time[]{2017-05-24 X:X (X/X)}", "language": "de" }, { "text": "Friday 08.12.1707", "ref_time": "2017-11-25T09:44:04", "gold_parse": "Time[]{2017-12-08 X:X (X/X)}", "language": "en" }, { "text": "22.01.2018 morgens", "ref_time": "2017-09-26T10:38:22", "gold_parse": "Time[]{2018-01-22 X:X (X/morning)}", "language": "de" }, { "text": "4.9.2017 afternoon 16.00-17.30", "ref_time": "2017-08-23T05:58:36", "gold_parse": "Interval[]{2017-09-04 16:00 (X/X) - 2017-09-04 17:30 (X/X)}", "language": "en" }, { "text": "kommenden Freitag 06.10.2017 09:30h/10:00h", "ref_time": "2017-10-04T09:11:03", "gold_parse": "Interval[]{2017-10-06 09:30 (X/X) - 2017-10-06 10:00 (X/X)}", "language": "de" }, { "text": "on 06/08 evening", "ref_time": "2017-07-31T09:04:05", "gold_parse": "Time[]{2017-08-06 X:X (X/evening)}", "language": "en" }, { "text": "am 30.11. um 20:30 Uhr", "ref_time": "2017-11-09T09:37:56", "gold_parse": "Time[]{2017-11-30 20:30 (X/X)}", "language": "de" }, { "text": "17 MAY, 19:25", "ref_time": "2017-10-23T09:29:04", "gold_parse": "Time[]{2018-05-17 19:25 (X/X)}", "language": "en" }, { "text": "Samstag, den 30.10. gegen 19:00 Uhr", "ref_time": "2017-09-26T03:49:16", "gold_parse": "Time[]{2017-10-30 19:00 (X/X)}", "language": "de" }, { "text": "Mon 26th June 07:50-10:00", "ref_time": "2017-06-20T11:10:56", "gold_parse": "Interval[]{2017-06-26 07:50 (X/X) - 2017-06-26 10:00 (X/X)}", "language": "en" }, { "text": "14.12.17", "ref_time": "2017-11-24T08:44:59", "gold_parse": "Time[]{2017-12-14 X:X (X/X)}", "language": "de" }, { "text": "vom 21.08-25.08", "ref_time": "2017-08-18T13:41:51", "gold_parse": "Interval[]{2017-08-21 X:X (X/X) - 2017-08-25 X:X (X/X)}", "language": "de" }, { "text": "am 22.11.2017 ab 17:15 h", "ref_time": "2017-11-14T14:45:07", "gold_parse": "Interval[]{2017-11-22 17:15 (X/X) - None}", "language": "de" }, { "text": "23.05.17 21:22", "ref_time": "2017-05-22T17:45:33", "gold_parse": "Time[]{2017-05-23 21:22 (X/X)}", "language": "de" }, { "text": "18.06. um 20.45-22:25", "ref_time": "2017-06-07T13:40:28", "gold_parse": "Interval[]{2017-06-18 20:45 (X/X) - 2017-06-18 22:25 (X/X)}", "language": "de" }, { "text": "am Donnerstag, den 29.06.2017 gegen 08:00 Uhr", "ref_time": "2017-06-13T14:36:43", "gold_parse": "Time[]{2017-06-29 08:00 (X/X)}", "language": "de" }, { "text": "Dienstag", "ref_time": "2017-06-16T09:12:56", "gold_parse": "Time[]{2017-06-20 X:X (X/X)}", "language": "de" }, { "text": "diese Woche Sonntag", "ref_time": "2017-07-24T12:59:26", "gold_parse": "Time[]{2017-07-30 X:X (X/X)}", "language": "de" }, { "text": "um 20:40 Uhr am 27.11.2017", "ref_time": "2017-10-10T06:50:20", "gold_parse": "Time[]{2017-11-27 20:40 (X/X)}", "language": "de" }, { "text": "16. August abends", "ref_time": "2017-07-31T11:42:06", "gold_parse": "Time[]{2017-08-16 X:X (X/evening)}", "language": "de" }, { "text": "17:45 Uhr", "ref_time": "2017-11-20T11:57:58", "gold_parse": "Time[]{2017-11-28 17:45 (X/X)}", "language": "de" }, { "text": "Vom 17.11.-19.11.2017", "ref_time": "2017-11-13T10:20:54", "gold_parse": "Interval[]{2017-11-17 X:X (X/X) - 2017-11-19 X:X (X/X)}", "language": "de" }, { "text": "1 day", "ref_time": "2017-11-03T15:07:20", "gold_parse": "Interval[]{2017-11-07 X:X (X/X) - 2017-11-08 X:X (X/X)}", "language": "en" }, { "text": "26.10.17 nachts", "ref_time": "2017-07-05T13:01:11", "gold_parse": "Time[]{2017-10-26 X:X (X/night)}", "language": "de" }, { "text": "23. Oktober mittags", "ref_time": "2017-09-25T12:06:10", "gold_parse": "Time[]{2017-10-23 X:X (X/noon)}", "language": "de" }, { "text": "am 13.09.17 ab 11:30 Uhr", "ref_time": "2017-09-08T14:55:15", "gold_parse": "Interval[]{2017-09-13 11:30 (X/X) - None}", "language": "de" }, { "text": "Sonntag dem 11.06", "ref_time": "2017-06-07T17:11:00", "gold_parse": "Time[]{2017-06-11 X:X (X/X)}", "language": "de" }, { "text": "20.07. 12:17", "ref_time": "2017-07-19T07:56:31", "gold_parse": "Time[]{2017-07-20 12:17 (X/X)}", "language": "de" }, { "text": "vom 11.09.2017 bis 13.09.2017", "ref_time": "2017-09-06T10:18:38", "gold_parse": "Interval[]{2017-09-11 X:X (X/X) - 2017-09-13 X:X (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-08-31T14:31:34", "gold_parse": "Time[]{2017-08-31 X:X (X/X)}", "language": "de" }, { "text": "Mo. 19. Jun. 10:05", "ref_time": "2017-06-18T11:30:46", "gold_parse": "Time[]{2017-06-19 10:05 (X/X)}", "language": "de" }, { "text": "Mo. 20.11.2017", "ref_time": "2017-11-20T12:32:35", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "de" }, { "text": "28-29.06", "ref_time": "2017-06-14T07:04:17", "gold_parse": "Interval[]{2017-06-28 X:X (X/X) - 2017-06-29 X:X (X/X)}", "language": "de" }, { "text": "14.11.2017 ab 18:30 Uhr", "ref_time": "2017-09-28T10:12:15", "gold_parse": "Interval[]{2017-11-14 18:30 (X/X) - None}", "language": "de" }, { "text": "02.11.2017 14:50 Uhr", "ref_time": "2017-10-11T08:04:37", "gold_parse": "Time[]{2017-11-02 14:50 (X/X)}", "language": "de" }, { "text": "10.11. Abends", "ref_time": "2017-09-18T22:28:35", "gold_parse": "Time[]{2017-11-10 X:X (X/evening)}", "language": "de" }, { "text": "Sonntag 5.11", "ref_time": "2017-11-03T11:55:32", "gold_parse": "Time[]{2017-11-05 X:X (X/X)}", "language": "de" }, { "text": "20.09 morgens", "ref_time": "2017-09-11T14:35:44", "gold_parse": "Time[]{2017-09-20 X:X (X/morning)}", "language": "de" }, { "text": "Mittwoch 01.11.", "ref_time": "2017-10-31T16:29:39", "gold_parse": "Time[]{2017-11-01 X:X (X/X)}", "language": "de" }, { "text": "19.08.", "ref_time": "2017-05-16T10:59:39", "gold_parse": "Time[]{2017-08-19 X:X (X/X)}", "language": "de" }, { "text": "13AUG 09:10", "ref_time": "2017-05-19T08:51:30", "gold_parse": "Time[]{2017-08-13 09:10 (X/X)}", "language": "de" }, { "text": "am 31. Januar ab 8:00 Uhr", "ref_time": "2017-09-26T09:01:01", "gold_parse": "Interval[]{2018-01-31 08:00 (X/X) - None}", "language": "de" }, { "text": "am 05.10.2017 ab 15 Uhr", "ref_time": "2017-09-13T10:44:24", "gold_parse": "Interval[]{2017-10-05 15:00 (X/X) - None}", "language": "de" }, { "text": "Am Fr., 27.10.17, 19:50 Uhr", "ref_time": "2017-09-27T10:44:24", "gold_parse": "Time[]{2017-10-27 19:50 (X/X)}", "language": "de" }, { "text": "week 36", "ref_time": "2017-08-15T17:43:29", "gold_parse": "Interval[]{2017-09-04 X:X (X/X) - 2017-09-10 X:X (X/X)}", "language": "en" }, { "text": "am 29.11.", "ref_time": "2017-09-25T15:59:52", "gold_parse": "Time[]{2017-11-29 X:X (X/X)}", "language": "de" }, { "text": "18.09 gegen Mittag", "ref_time": "2017-08-31T07:16:55", "gold_parse": "Time[]{2017-09-18 X:X (X/noon)}", "language": "de" }, { "text": "am 04. Oktober morgens so früh wie möglich", "ref_time": "2017-09-22T10:04:17", "gold_parse": "Time[]{2017-10-04 X:X (X/first)}", "language": "de" }, { "text": "20.7. ab 6.59 Uhr", "ref_time": "2017-07-16T11:49:02", "gold_parse": "Interval[]{2017-07-20 06:59 (X/X) - None}", "language": "de" }, { "text": "29.11. 17:14 - 21:03 Uhr", "ref_time": "2017-11-22T12:41:56", "gold_parse": "Interval[]{2017-11-29 17:14 (X/X) - 2017-11-29 21:03 (X/X)}", "language": "de" }, { "text": "am 01.09.17", "ref_time": "2017-08-29T07:07:34", "gold_parse": "Time[]{2017-09-01 X:X (X/X)}", "language": "de" }, { "text": "letztem Flug am Montag 20 oder 21.11.2017", "ref_time": "2017-10-26T06:18:07", "gold_parse": "Time[]{2017-11-20 X:X (X/last)}", "language": "de" }, { "text": "Dienstag morgens", "ref_time": "2017-10-05T07:08:53", "gold_parse": "Time[]{2017-10-10 X:X (X/evening)}", "language": "de" }, { "text": "22 July Sunday 1650", "ref_time": "2017-07-18T04:43:31", "gold_parse": "Time[]{2017-07-22 16:50 (X/X)}", "language": "de" }, { "text": "am 31.05", "ref_time": "2017-05-24T14:58:54", "gold_parse": "Time[]{2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "9 June, Friday 0845am", "ref_time": "2017-05-23T08:51:04", "gold_parse": "Time[]{2017-06-09 08:45 (X/X)}", "language": "en" }, { "text": "23.08.2017 ab 10:00 Uhr", "ref_time": "2017-08-21T10:17:59", "gold_parse": "Time[]{2017-08-23 10:00 (X/X)}", "language": "de" }, { "text": "Sunday morning", "ref_time": "2017-08-29T08:13:19", "gold_parse": "Time[]{2017-08-31 X:X (X/morning)}", "language": "en" }, { "text": "Freitag, 21.07.17 08.35 Uhr", "ref_time": "2017-06-26T08:01:09", "gold_parse": "Time[]{2017-07-21 08:35 (X/X)}", "language": "de" }, { "text": "26.09.2017", "ref_time": "2017-09-19T08:06:30", "gold_parse": "Time[]{2017-09-26 X:X (X/X)}", "language": "de" }, { "text": "05.08.2017 08:38 Uhr", "ref_time": "2017-07-21T09:45:39", "gold_parse": "Time[]{2017-08-05 08:38 (X/X)}", "language": "de" }, { "text": "29.10.2017 21.00", "ref_time": "2017-10-10T16:05:34", "gold_parse": "Time[]{2017-10-29 X:X (X/X)}", "language": "en" }, { "text": "16.10.2017 um 18.00 Uhr", "ref_time": "2017-10-13T09:01:04", "gold_parse": "Time[]{2017-10-16 18:00 (X/X)}", "language": "de" }, { "text": "29.11. ca. 18.00 h", "ref_time": "2017-11-07T10:30:09", "gold_parse": "Time[]{2017-11-29 18:00 (X/X)}", "language": "de" }, { "text": "Wed afternoon 29 Nov", "ref_time": "2017-11-27T08:39:11", "gold_parse": "Time[]{2017-11-29 X:X (X/afternoon)}", "language": "en" }, { "text": "Dienstag 19.09.2017 ca 20Uhr", "ref_time": "2017-06-08T13:20:00", "gold_parse": "Time[]{2017-09-19 20:00 (X/X)}", "language": "de" }, { "text": "16.08.17 nachmittags", "ref_time": "2017-08-04T12:23:27", "gold_parse": "Time[]{2017-08-16 X:X (X/afternoon)}", "language": "de" }, { "text": "19.09.2017 - 21.09.2017", "ref_time": "2017-09-11T11:47:44", "gold_parse": "Interval[]{2017-09-19 X:X (X/X) - 2017-09-21 X:X (X/X)}", "language": "de" }, { "text": "Freitag, 8. September 2017 bis 12:00 Uhr", "ref_time": "2017-07-24T07:53:26", "gold_parse": "Interval[]{None - 2017-09-08 12:00 (X/X)}", "language": "de" }, { "text": "8 Nov 1015", "ref_time": "2017-08-25T12:15:35", "gold_parse": "Time[]{2017-11-09 10:15 (X/X)}", "language": "en" }, { "text": "2. August 16.45", "ref_time": "2017-07-10T10:57:08", "gold_parse": "Time[]{2017-08-02 16:45 (X/X)}", "language": "de" }, { "text": "25.7. etwa 16 Uhr", "ref_time": "2017-07-05T08:57:57", "gold_parse": "Time[]{2017-07-25 16:00 (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-05-31T11:03:46", "gold_parse": "Time[]{2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "Di. 18.07.2017", "ref_time": "2017-07-16T16:26:23", "gold_parse": "Time[]{2017-07-18 X:X (X/X)}", "language": "de" }, { "text": "from today 9th of Aug to Fri 11th of Aug", "ref_time": "2017-08-09T09:08:59", "gold_parse": "Interval[]{2017-08-09 X:X (X/X) - 2017-08-11 X:X (X/X)}", "language": "en" }, { "text": "19.10.2017", "ref_time": "2017-09-20T12:14:25", "gold_parse": "Time[]{2017-10-19 X:X (X/X)}", "language": "de" }, { "text": "17 Juli ca. 17.30h", "ref_time": "2017-07-05T09:42:39", "gold_parse": "Time[]{2017-07-17 17:30 (X/X)}", "language": "de" }, { "text": "26.11.2017", "ref_time": "2017-11-07T14:54:10", "gold_parse": "Time[]{2017-11-26 X:X (X/X)}", "language": "de" }, { "text": "Tuesday early morning", "ref_time": "2017-06-15T08:25:30", "gold_parse": "Time[]{2017-06-27 X:X (X/earlymorning)}", "language": "en" }, { "text": "Montag den 31.07.2017 ca. 14:00 Uhr bis zum 04.08.2017", "ref_time": "2017-07-25T11:23:56", "gold_parse": "Interval[]{2017-07-31 14:00 (X/X) - 2017-08-04 X:X (X/X)}", "language": "de" }, { "text": "um 18:40 Uhr am 22.09.2017", "ref_time": "2017-09-13T11:25:41", "gold_parse": "Time[]{2017-09-22 18:40 (X/X)}", "language": "de" }, { "text": "03.08.2017 13:27 Uhr", "ref_time": "2017-07-21T09:45:39", "gold_parse": "Time[]{2017-08-03 13:27 (X/X)}", "language": "de" }, { "text": "on Thursday 23rd November around 6.30 p.m", "ref_time": "2017-10-18T15:34:42", "gold_parse": "Time[]{2017-11-23 18:30 (X/X)}", "language": "en" }, { "text": "am Mi, 13.09.17 um 10:30 Uhr", "ref_time": "2017-08-31T07:35:03", "gold_parse": "Time[]{2017-09-13 10:30 (X/X)}", "language": "de" }, { "text": "bis 19. September abends/spät abends", "ref_time": "2017-09-04T09:24:48", "gold_parse": "Interval[]{2017-09-19 X:X (X/evening) - 2017-09-19 X:X (X/lateevening)}", "language": "de" }, { "text": "12.09.", "ref_time": "2017-08-31T07:55:15", "gold_parse": "Time[]{2017-09-12 X:X (X/X)}", "language": "de" }, { "text": "am Montag, den 24.07. 09:50", "ref_time": "2017-07-20T12:50:31", "gold_parse": "Time[]{2017-07-24 09:50 (X/X)}", "language": "de" }, { "text": "31.05.2017 23:11 Uhr", "ref_time": "2017-05-15T13:10:23", "gold_parse": "Time[]{2017-05-31 23:11 (X/X)}", "language": "de" }, { "text": "1 Dec 0710", "ref_time": "2017-11-20T19:42:36", "gold_parse": "Time[]{2017-12-01 07:10 (X/X)}", "language": "en" }, { "text": "14.9. um 11:00 Uhr", "ref_time": "2017-09-01T09:36:44", "gold_parse": "Time[]{2017-09-14 11:00 (X/X)}", "language": "de" }, { "text": "07.01.2018", "ref_time": "2017-11-24T09:29:00", "gold_parse": "Time[]{2018-01-07 X:X (X/X)}", "language": "de" }, { "text": "13.07.2017 vormittags", "ref_time": "2017-06-27T16:00:05", "gold_parse": "Time[]{2017-07-13 X:X (X/noon)}", "language": "de" }, { "text": "03.08.17 07.23", "ref_time": "2017-08-01T14:15:33", "gold_parse": "Time[]{2017-08-03 07:23 (X/X)}", "language": "de" }, { "text": "am 12.8. ca 11/12 Uhr", "ref_time": "2017-05-22T08:31:35", "gold_parse": "Interval[]{2017-08-12 11:00 (X/X) - 2017-08-12 12:00 (X/X)}", "language": "de" }, { "text": "spät 25.09.17", "ref_time": "2017-08-30T11:37:43", "gold_parse": "Time[]{2017-09-25 X:X (X/evening)}", "language": "de" }, { "text": "after 15:00 on Sunday 17", "ref_time": "2017-11-09T16:48:56", "gold_parse": "Interval[]{2017-12-17 15:00 (X/X) - None}", "language": "en" }, { "text": "am Samstag abends am 7.10", "ref_time": "2017-09-28T07:09:30", "gold_parse": "Time[]{2017-10-07 X:X (X/evening)}", "language": "de" }, { "text": "13 Nov", "ref_time": "2017-08-25T12:23:01", "gold_parse": "Time[]{2017-11-13 X:X (X/X)}", "language": "en" }, { "text": "25.09.2017 morgens", "ref_time": "2017-09-06T13:58:42", "gold_parse": "Time[]{2017-09-25 X:X (X/morning)}", "language": "de" }, { "text": "06.11.", "ref_time": "2017-11-04T14:10:07", "gold_parse": "Time[]{2017-11-06 X:X (X/X)}", "language": "de" }, { "text": "15/09", "ref_time": "2017-08-18T10:55:13", "gold_parse": "Time[]{2017-09-15 X:X (X/X)}", "language": "de" }, { "text": "after 17:00 on Tuesday 19", "ref_time": "2017-11-09T16:48:56", "gold_parse": "Interval[]{2017-12-19 17:00 (X/X) - None}", "language": "en" }, { "text": "08.11.2017 06:38 Uhr", "ref_time": "2017-10-12T07:07:16", "gold_parse": "Time[]{2017-11-08 06:38 (X/X)}", "language": "de" }, { "text": "12-11-2017", "ref_time": "2017-10-18T18:45:37", "gold_parse": "Time[]{2017-11-12 X:X (X/X)}", "language": "en" }, { "text": "am Dienstag, den 08.08.2017 ab 17:00h", "ref_time": "2017-08-03T15:17:43", "gold_parse": "Interval[]{2017-08-08 17:00 (X/X) - None}", "language": "de" }, { "text": "on the 22nd - 29th of August", "ref_time": "2017-08-11T13:03:58", "gold_parse": "Interval[]{2017-08-22 X:X (X/X) - 2017-08-29 X:X (X/X)}", "language": "en" }, { "text": "14.9. 12:10", "ref_time": "2017-09-12T14:17:43", "gold_parse": "Time[]{2017-09-14 12:10 (X/X)}", "language": "en" }, { "text": "28.07.17 um 20:45 Uhr", "ref_time": "2017-06-22T15:50:40", "gold_parse": "Time[]{2017-07-28 20:45 (X/X)}", "language": "de" }, { "text": "25 SEP, 15:50", "ref_time": "2017-09-10T15:46:24", "gold_parse": "Time[]{2017-09-25 15:50 (X/X)}", "language": "en" }, { "text": "9. Juni 2017 10 Uhr", "ref_time": "2017-05-24T17:35:38", "gold_parse": "Time[]{2017-06-09 10:00 (X/X)}", "language": "de" }, { "text": "16.10.17", "ref_time": "2017-09-01T07:03:47", "gold_parse": "Time[]{2017-10-16 X:X (X/X)}", "language": "de" }, { "text": "am Freitag ab 17.00 Uhr", "ref_time": "2017-10-19T06:03:26", "gold_parse": "Interval[]{2017-11-10 17:00 (X/X) - None}", "language": "de" }, { "text": "Monday morning", "ref_time": "2017-07-13T07:10:58", "gold_parse": "Time[]{2017-07-17 X:X (X/morning)}", "language": "de" }, { "text": "Sa. 09.12.2017 ca. 13:00 Uhr", "ref_time": "2017-11-28T14:05:46", "gold_parse": "Time[]{2017-12-09 13:00 (X/X)}", "language": "de" }, { "text": "Tuesday 14th November 2017", "ref_time": "2017-10-04T09:30:12", "gold_parse": "Time[]{2017-11-14 X:X (X/X)}", "language": "en" }, { "text": "Jun 7 at 2215-2350", "ref_time": "2017-06-06T13:04:24", "gold_parse": "Interval[]{2017-06-07 22:15 (X/X) - 2017-06-07 23:50 (X/X)}", "language": "de" }, { "text": "early Thursday 30.11.2017", "ref_time": "2017-11-27T08:35:45", "gold_parse": "Time[]{2017-11-30 X:X (X/earlymorning)}", "language": "en" }, { "text": "14.8.", "ref_time": "2017-08-10T12:56:43", "gold_parse": "Time[]{2017-08-14 X:X (X/X)}", "language": "de" }, { "text": "as early as possible on Friday morning", "ref_time": "2017-10-24T15:27:27", "gold_parse": "Time[]{2017-11-03 X:X (X/earlymorning)}", "language": "en" }, { "text": "11.11.2017 12:10 Uhr", "ref_time": "2017-07-28T06:51:00", "gold_parse": "Time[]{2017-11-11 12:10 (X/X)}", "language": "de" }, { "text": "7.12.", "ref_time": "2017-11-20T09:50:25", "gold_parse": "Time[]{2017-12-07 X:X (X/X)}", "language": "de" }, { "text": "21.11.17", "ref_time": "2017-10-17T15:22:29", "gold_parse": "Time[]{2017-11-21 X:X (X/X)}", "language": "de" }, { "text": "06.07.2015", "ref_time": "2017-06-23T12:37:05", "gold_parse": "Time[]{2017-07-06 X:X (X/X)}", "language": "de" }, { "text": "19.-21.12.", "ref_time": "2017-09-01T13:05:27", "gold_parse": "Interval[]{2017-12-19 X:X (X/X) - 2017-12-21 X:X (X/X)}", "language": "de" }, { "text": "24/09 9 Uhr", "ref_time": "2017-08-31T10:05:26", "gold_parse": "Time[]{2017-09-24 09:00 (X/X)}", "language": "de" }, { "text": "04AUG 18:20", "ref_time": "2017-05-19T08:51:30", "gold_parse": "Time[]{2017-08-04 18:20 (X/X)}", "language": "de" }, { "text": "am 19.06. frühesten", "ref_time": "2017-06-09T13:10:49", "gold_parse": "Time[]{2017-06-19 X:X (X/first)}", "language": "de" }, { "text": "31.08.2017", "ref_time": "2017-07-26T12:25:43", "gold_parse": "Time[]{2017-08-31 X:X (X/X)}", "language": "de" }, { "text": "06. September 8:10 - 9:15", "ref_time": "2017-08-25T15:23:46", "gold_parse": "Interval[]{2017-09-06 08:10 (X/X) - 2017-09-06 09:15 (X/X)}", "language": "de" }, { "text": "am 03.09.", "ref_time": "2017-08-24T06:32:22", "gold_parse": "Time[]{2017-09-03 X:X (X/X)}", "language": "de" }, { "text": "21.09.2017 17:40 Uhr", "ref_time": "2017-09-19T07:12:55", "gold_parse": "Time[]{2017-09-21 17:40 (X/X)}", "language": "de" }, { "text": "am 24.10.12017 morgens", "ref_time": "2017-09-04T10:48:27", "gold_parse": "Time[]{2017-10-24 X:X (X/morning)}", "language": "de" }, { "text": "11.10.2017 frühestens ab 20:00 Uhr", "ref_time": "2017-07-25T12:13:20", "gold_parse": "Interval[]{2017-10-11 20:00 (X/X) - None}", "language": "de" }, { "text": "Sonntag ab 19:00", "ref_time": "2017-09-20T07:22:59", "gold_parse": "Interval[]{2017-09-24 19:00 (X/X) - None}", "language": "de" }, { "text": "evening of Friday, June 23rd", "ref_time": "2017-06-15T15:47:32", "gold_parse": "Time[]{2017-06-23 X:X (X/evening)}", "language": "en" }, { "text": "Freitag 15.12.2017", "ref_time": "2017-11-28T15:49:33", "gold_parse": "Time[]{2017-12-15 X:X (X/X)}", "language": "de" }, { "text": "von 17.10.-19.10.17", "ref_time": "2017-10-16T07:35:59", "gold_parse": "Interval[]{2017-10-17 X:X (X/X) - 2017-10-19 X:X (X/X)}", "language": "de" }, { "text": "09.08.2017", "ref_time": "2017-07-18T08:28:58", "gold_parse": "Time[]{2017-08-09 X:X (X/X)}", "language": "de" }, { "text": "Fr., 04.08.2017 10.00", "ref_time": "2017-07-27T09:28:06", "gold_parse": "Time[]{2017-08-04 10:00 (X/X)}", "language": "de" }, { "text": "Di., 5. Dez. 8:45 Uhr - 10:00 Uhr", "ref_time": "2017-11-01T12:43:18", "gold_parse": "Interval[]{2017-12-05 08:45 (X/X) - 2017-12-05 10:00 (X/X)}", "language": "de" }, { "text": "on 12.09.2017 between 5-9 am", "ref_time": "2017-09-06T09:39:08", "gold_parse": "Interval[]{2017-09-12 05:00 (X/X) - 2017-09-12 09:00 (X/X)}", "language": "de" }, { "text": "25.10.2017 nach 06:00 Uhr", "ref_time": "2017-10-10T05:43:58", "gold_parse": "Interval[]{2017-10-25 06:00 (X/X) - None}", "language": "de" }, { "text": "01.08.2017 08:00 - 10:00 Uhr", "ref_time": "2017-07-18T10:19:48", "gold_parse": "Interval[]{2017-08-01 08:00 (X/X) - 2017-08-01 10:00 (X/X)}", "language": "de" }, { "text": "06.12.2017 19:50", "ref_time": "2017-10-27T11:38:34", "gold_parse": "Time[]{2017-12-06 19:50 (X/X)}", "language": "de" }, { "text": "08.08. spätestens um 9:30 Uhr", "ref_time": "2017-08-04T07:25:31", "gold_parse": "Interval[]{None - 2017-08-08 09:30 (X/X)}", "language": "de" }, { "text": "10 approximately 9.00 a.m.", "ref_time": "2017-10-02T13:56:00", "gold_parse": "Time[]{2017-10-10 09:00 (X/X)}", "language": "en" }, { "text": "13.12.2017", "ref_time": "2017-11-27T14:52:20", "gold_parse": "Time[]{2017-12-13 X:X (X/X)}", "language": "de" }, { "text": "12 loka 15:05", "ref_time": "2017-09-13T14:48:21", "gold_parse": "Time[]{2017-10-12 15:05 (X/X)}", "language": "en" }, { "text": "from 25.10. to 26.10.", "ref_time": "2017-10-25T05:19:21", "gold_parse": "Interval[]{2017-10-25 X:X (X/X) - 2017-10-26 X:X (X/X)}", "language": "en" }, { "text": "20.10.", "ref_time": "2017-10-11T13:00:00", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "de" }, { "text": "am 01.12 11.10 Uhr", "ref_time": "2017-10-05T10:13:07", "gold_parse": "Time[]{2017-12-01 11:10 (X/X)}", "language": "de" }, { "text": "31.05.2017 ab 18:00 Uhr", "ref_time": "2017-05-16T08:27:18", "gold_parse": "Interval[]{2017-05-31 18:00 (X/X) - None}", "language": "de" }, { "text": "Freitag", "ref_time": "2017-08-27T08:22:47", "gold_parse": "Time[]{2017-09-01 X:X (X/X)}", "language": "de" }, { "text": "Nacht vom 5. auf den 6. Dezember", "ref_time": "2017-11-24T09:48:28", "gold_parse": "Interval[]{2017-12-05 X:X (X/X) - 2017-12-06 X:X (X/X)}", "language": "de" }, { "text": "on Thursday 26.10", "ref_time": "2017-10-23T11:18:24", "gold_parse": "Time[]{2017-10-26 X:X (X/X)}", "language": "en" }, { "text": "6.11.", "ref_time": "2017-10-22T19:45:48", "gold_parse": "Time[]{2017-11-06 X:X (X/X)}", "language": "de" }, { "text": "um 17:55 Uhr am 22.09.2017", "ref_time": "2017-09-13T11:25:41", "gold_parse": "Time[]{2017-09-22 17:55 (X/X)}", "language": "de" }, { "text": "16.10.2017", "ref_time": "2017-10-11T08:32:09", "gold_parse": "Time[]{2017-10-16 X:X (X/X)}", "language": "de" }, { "text": "9 loka 21:45", "ref_time": "2017-09-13T14:48:21", "gold_parse": "Time[]{2017-10-09 21:45 (X/X)}", "language": "en" }, { "text": "Sonntag 25. Juni, ca. 12", "ref_time": "2017-06-19T07:05:59", "gold_parse": "Time[]{2017-06-25 12:00 (X/X)}", "language": "de" }, { "text": "27.09.2017", "ref_time": "2017-09-22T13:26:45", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "27.09.", "ref_time": "2017-09-21T07:58:16", "gold_parse": "Time[]{2017-09-27 X:X (X/X)}", "language": "de" }, { "text": "16.11.2017 07:00 Uhr - 07:45 Uhr", "ref_time": "2017-11-03T10:04:03", "gold_parse": "Interval[]{2017-11-16 07:00 (X/X) - 2017-11-16 07:45 (X/X)}", "language": "de" }, { "text": "29.06.2017 09:05 Uhr", "ref_time": "2017-06-13T07:23:41", "gold_parse": "Time[]{2017-06-29 09:05 (X/X)}", "language": "de" }, { "text": "October 25th 07:30am", "ref_time": "2017-10-04T09:39:12", "gold_parse": "Time[]{2017-10-25 07:30 (X/X)}", "language": "en" }, { "text": "on June 17th after 3 pm.", "ref_time": "2017-05-16T18:40:30", "gold_parse": "Interval[]{2017-06-17 15:00 (X/X) - None}", "language": "en" }, { "text": "23.11.2017 früh", "ref_time": "2017-11-21T10:06:41", "gold_parse": "Time[]{2017-11-23 X:X (X/morning)}", "language": "de" }, { "text": "06.06.2017 bis 15:00 Uhr", "ref_time": "2017-06-02T12:10:50", "gold_parse": "Interval[]{None - 2017-06-06 15:00 (X/X)}", "language": "de" }, { "text": "02.06.2017 06:30 Uhr", "ref_time": "2017-05-15T07:07:58", "gold_parse": "Time[]{2017-06-02 06:30 (X/X)}", "language": "de" }, { "text": "24.07. 07:25h", "ref_time": "2017-07-21T11:00:35", "gold_parse": "Time[]{2017-07-24 07:25 (X/X)}", "language": "de" }, { "text": "Montag 19 Juni früh", "ref_time": "2017-06-13T13:05:02", "gold_parse": "Time[]{2017-06-19 X:X (X/earlymorning)}", "language": "de" }, { "text": "on the 12th of October", "ref_time": "2017-10-05T14:14:05", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "en" }, { "text": "28/08 afternoon", "ref_time": "2017-08-14T15:42:42", "gold_parse": "Time[]{2017-08-28 X:X (X/afternoon)}", "language": "en" }, { "text": "am 03.11.2017 gegen 18:00 bis 19:00 Uhr", "ref_time": "2017-10-22T02:42:23", "gold_parse": "Interval[]{2017-11-03 18:00 (X/X) - 2017-11-03 19:00 (X/X)}", "language": "de" }, { "text": "Am 23.11. um 07:03", "ref_time": "2017-11-16T07:49:28", "gold_parse": "Time[]{2017-11-23 07:03 (X/X)}", "language": "de" }, { "text": "am 20.11.2017 um 08:40 Uhr", "ref_time": "2017-11-08T13:44:18", "gold_parse": "Time[]{2017-11-20 08:40 (X/X)}", "language": "de" }, { "text": "vom 15.10.2017 bis 18.10.2017", "ref_time": "2017-10-13T11:30:54", "gold_parse": "Interval[]{2017-10-15 X:X (X/X) - 2017-10-18 X:X (X/X)}", "language": "de" }, { "text": "29.06.17 vormittags", "ref_time": "2017-05-23T10:55:24", "gold_parse": "Time[]{2017-06-29 X:X (X/morning)}", "language": "de" }, { "text": "am 13.06. gegen 22.00 Uhr", "ref_time": "2017-06-09T15:39:12", "gold_parse": "Time[]{2017-06-13 22:00 (X/X)}", "language": "de" }, { "text": "am 19.07. um ca. 22:10 Uhr", "ref_time": "2017-06-26T13:00:13", "gold_parse": "Time[]{2017-07-19 22:10 (X/X)}", "language": "de" }, { "text": "27 Aug 1440", "ref_time": "2017-07-25T07:19:36", "gold_parse": "Time[]{2017-08-27 14:40 (X/X)}", "language": "en" }, { "text": "10.10. 10:22", "ref_time": "2017-09-28T15:50:54", "gold_parse": "Time[]{2017-10-10 10:22 (X/X)}", "language": "de" }, { "text": "18th september 2017 - 06:25-08:05", "ref_time": "2017-09-05T12:25:53", "gold_parse": "Interval[]{2017-09-18 06:25 (X/X) - 2017-09-18 08:05 (X/X)}", "language": "en" }, { "text": "25.07. ca. 16.00h", "ref_time": "2017-07-21T11:00:35", "gold_parse": "Time[]{2017-07-25 16:00 (X/X)}", "language": "de" }, { "text": "Wednesday July 19th evening", "ref_time": "2017-06-19T09:54:53", "gold_parse": "Time[]{2016-07-19 X:X (X/evening)}", "language": "en" }, { "text": "am Donnerstag den 23. November Abends", "ref_time": "2017-11-14T17:29:49", "gold_parse": "Time[]{2017-11-23 X:X (X/evening)}", "language": "de" }, { "text": "21. August ca. 15 Uhr", "ref_time": "2017-07-28T17:16:58", "gold_parse": "Time[]{2017-08-21 15:00 (X/X)}", "language": "de" }, { "text": "22.10.2017", "ref_time": "2017-08-02T06:59:41", "gold_parse": "Time[]{2017-10-22 X:X (X/X)}", "language": "de" }, { "text": "27.10.2017 ab 8:00 Uhr", "ref_time": "2017-10-20T11:04:40", "gold_parse": "Interval[]{2017-10-27 08:00 (X/X) - None}", "language": "de" }, { "text": "12.10", "ref_time": "2017-10-11T08:11:02", "gold_parse": "Time[]{2017-10-12 X:X (X/X)}", "language": "de" }, { "text": "am Freitag, 26.01.2018 - ab 15.00 Uhr", "ref_time": "2017-09-26T12:18:01", "gold_parse": "Interval[]{2017-01-26 15:00 (X/X) - None}", "language": "de" }, { "text": "heute 17:00", "ref_time": "2017-10-06T08:03:32", "gold_parse": "Time[]{2017-10-06 17:00 (X/X)}", "language": "de" }, { "text": "26.-27.10.2017", "ref_time": "2017-09-19T12:19:44", "gold_parse": "Interval[]{2017-10-26 X:X (X/X) - 2017-10-27 X:X (X/X)}", "language": "de" }, { "text": "12.07.2017", "ref_time": "2017-06-22T08:33:33", "gold_parse": "Time[]{2017-07-12 X:X (X/X)}", "language": "de" }, { "text": "04.09.2017 07:20Uhr", "ref_time": "2017-07-05T06:04:05", "gold_parse": "Time[]{2017-09-04 07:20 (X/X)}", "language": "de" }, { "text": "Dienstag 19.9. gegen 8:00 Uhr", "ref_time": "2017-09-11T08:21:28", "gold_parse": "Time[]{2017-09-19 08:00 (X/X)}", "language": "de" }, { "text": "04./05.07.17", "ref_time": "2017-06-29T12:33:48", "gold_parse": "Interval[]{2017-07-04 X:X (X/X) - 2017-07-05 X:X (X/X)}", "language": "de" }, { "text": "1.12 morgens/vormittag", "ref_time": "2017-11-25T16:46:58", "gold_parse": "Interval[]{2017-12-01 X:X (X/morning) - 2017-12-01 X:X (X/earlynoon)}", "language": "de" }, { "text": "vom 20. bis 23.07", "ref_time": "2017-07-18T05:48:17", "gold_parse": "Interval[]{2017-07-20 X:X (X/X) - 2017-07-23 X:X (X/X)}", "language": "de" }, { "text": "So, 23.07.17 bis 9 Uhr", "ref_time": "2017-07-14T14:12:10", "gold_parse": "Interval[]{None - 2017-07-23 09:00 (X/X)}", "language": "de" }, { "text": "am 19.07. um ca. 20:30 Uhr", "ref_time": "2017-06-26T13:00:13", "gold_parse": "Time[]{2017-07-19 20:30 (X/X)}", "language": "de" }, { "text": "15.10", "ref_time": "2017-10-09T11:50:10", "gold_parse": "Time[]{2017-10-15 X:X (X/X)}", "language": "de" }, { "text": "27.7.17 um 12.05 Uhr", "ref_time": "2017-07-21T17:02:05", "gold_parse": "Time[]{2017-07-27 12:05 (X/X)}", "language": "de" }, { "text": "22.08.2017 21:35 Uhr", "ref_time": "2017-08-01T06:17:48", "gold_parse": "Time[]{2017-08-22 21:35 (X/X)}", "language": "de" }, { "text": "am 30.11. ab 20:00 Uhr", "ref_time": "2017-11-17T14:26:49", "gold_parse": "Interval[]{2017-11-30 20:00 (X/X) - None}", "language": "de" }, { "text": "on nov 6th", "ref_time": "2017-10-24T16:16:26", "gold_parse": "Time[]{2017-11-06 X:X (X/X)}", "language": "en" }, { "text": "am 17.07.2017 15:00-17:00 Uhr", "ref_time": "2017-07-11T11:53:20", "gold_parse": "Interval[]{2017-07-17 15:00 (X/X) - 2017-07-17 17:00 (X/X)}", "language": "de" }, { "text": "1 Nacht", "ref_time": "2017-06-07T09:36:05", "gold_parse": "Duration[]{1 nights}", "language": "de" }, { "text": "abends", "ref_time": "2017-10-03T13:51:16", "gold_parse": "Time[]{2017-10-20 X:X (X/evening)}", "language": "de" }, { "text": "11.08.2017", "ref_time": "2017-08-08T09:19:35", "gold_parse": "Time[]{2017-08-11 X:X (X/X)}", "language": "de" }, { "text": "Sonntag 10. Dezember 12:05-13:05", "ref_time": "2017-11-27T14:53:34", "gold_parse": "Interval[]{2017-12-10 12:05 (X/X) - 2017-12-10 13:05 (X/X)}", "language": "de" }, { "text": "Montag früh", "ref_time": "2017-10-28T13:58:54", "gold_parse": "Time[]{2017-11-06 X:X (X/morning)}", "language": "de" }, { "text": "29.11.2017 spätestens um 10:30 Uhr", "ref_time": "2017-11-22T10:40:56", "gold_parse": "Interval[]{None - 2017-11-29 10:30 (X/X)}", "language": "de" }, { "text": "Mi, 08.11.2017 10:06", "ref_time": "2017-10-26T05:55:16", "gold_parse": "Time[]{2017-11-08 10:06 (X/X)}", "language": "de" }, { "text": "morgen", "ref_time": "2017-07-16T17:38:40", "gold_parse": "Time[]{2017-07-17 X:X (X/X)}", "language": "de" }, { "text": "am Freitag, 15.9.2017 ab ca. 15.00 / 16.00 Uhr", "ref_time": "2017-07-14T10:05:38", "gold_parse": "Interval[]{2017-09-15 15:00 (X/X) - 2017-09-15 16:00 (X/X)}", "language": "de" }, { "text": "heute auf morgen", "ref_time": "2017-10-10T11:43:21", "gold_parse": "Interval[]{2017-10-10 X:X (X/X) - 2017-10-11 X:X (X/X)}", "language": "de" }, { "text": "08.08.17 ab 15:00 Uhr", "ref_time": "2017-07-31T12:44:24", "gold_parse": "Interval[]{2017-08-08 15:00 (X/X) - None}", "language": "de" }, { "text": "Mo, 04.09.2017 16:18", "ref_time": "2017-08-21T13:37:30", "gold_parse": "Time[]{2017-09-04 16:18 (X/X)}", "language": "de" }, { "text": "am 26.08. zwischen 09.00 - 13.00 Uhr", "ref_time": "2017-07-06T13:30:57", "gold_parse": "Interval[]{2017-08-26 09:00 (X/X) - 2017-08-26 13:00 (X/X)}", "language": "de" }, { "text": "11.-13.09.17", "ref_time": "2017-08-28T11:51:23", "gold_parse": "Interval[]{2017-09-11 X:X (X/X) - 2017-09-13 X:X (X/X)}", "language": "de" }, { "text": "Jun 21 Wed at 1105am", "ref_time": "2017-06-25T17:46:46", "gold_parse": "Time[]{2017-06-21 11:05 (X/X)}", "language": "en" }, { "text": "am 27.10.2017 am frühen Abend", "ref_time": "2017-09-07T06:42:40", "gold_parse": "Time[]{2017-10-27 X:X (X/earlyevening)}", "language": "de" }, { "text": "21.11.-24.11.17", "ref_time": "2017-11-17T12:58:04", "gold_parse": "Interval[]{2017-11-21 X:X (X/X) - 2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "am 21.10.", "ref_time": "2017-10-06T12:36:24", "gold_parse": "Time[]{2017-10-21 X:X (X/X)}", "language": "de" }, { "text": "am Dienstag späten Abend", "ref_time": "2017-06-09T13:36:53", "gold_parse": "Time[]{2017-06-20 X:X (X/evening)}", "language": "de" }, { "text": "23.10. 2017 (Montag 21:55 - 00:25", "ref_time": "2017-09-20T12:36:33", "gold_parse": "Interval[]{2017-10-23 21:55 (X/X) - 2017-10-24 00:25 (X/X)}", "language": "de" }, { "text": "Dienstag 26.09.2017 15:51", "ref_time": "2017-09-14T08:49:54", "gold_parse": "Time[]{2017-09-26 15:51 (X/X)}", "language": "de" }, { "text": "vom 19.10.2017 bis 20.10.2017", "ref_time": "2017-07-04T12:16:06", "gold_parse": "Interval[]{2017-10-19 X:X (X/X) - 2017-10-20 X:X (X/X)}", "language": "de" }, { "text": "23.10.-26.10.", "ref_time": "2017-10-02T08:18:34", "gold_parse": "Interval[]{2017-10-23 X:X (X/X) - 2017-10-26 X:X (X/X)}", "language": "de" }, { "text": "13.09. frühestens 18 Uhr", "ref_time": "2017-09-06T09:02:24", "gold_parse": "Interval[]{2017-09-13 18:00 (X/X) - None}", "language": "de" }, { "text": "06.11.", "ref_time": "2017-09-25T14:34:50", "gold_parse": "Time[]{2017-11-06 X:X (X/X)}", "language": "de" }, { "text": "Sun 28 May 10:45 - 11:35", "ref_time": "2017-05-22T12:28:30", "gold_parse": "Interval[]{2017-05-28 10:45 (X/X) - 2017-05-28 11:35 (X/X)}", "language": "de" }, { "text": "Montag 21.08", "ref_time": "2017-08-15T08:28:26", "gold_parse": "Time[]{2017-08-21 X:X (X/X)}", "language": "de" }, { "text": "am Mi., den 18.10. am Abend (18-19 Uhr", "ref_time": "2017-10-10T15:10:50", "gold_parse": "Interval[]{2017-10-18 18:00 (X/X) - 2017-10-18 19:00 (X/X)}", "language": "de" }, { "text": "02.07.2017 Nachmittags", "ref_time": "2017-06-01T06:42:27", "gold_parse": "Time[]{2017-07-02 X:X (X/afternoon)}", "language": "de" }, { "text": "24.10.2017 bis: 10:00 Uhr", "ref_time": "2017-10-20T08:26:48", "gold_parse": "Interval[]{None - 2017-10-24 10:00 (X/X)}", "language": "de" }, { "text": "am 15.05.2017 ab 08:00 Uhr ab 19:00 Uhr", "ref_time": "2017-05-10T14:06:17", "gold_parse": "Interval[]{2017-05-15 19:00 (X/X) - None}", "language": "de" }, { "text": "26.09.17 ab 19:00", "ref_time": "2017-09-08T13:34:03", "gold_parse": "Interval[]{2017-09-26 19:00 (X/X) - None}", "language": "de" }, { "text": "18.11 11:20", "ref_time": "2017-11-16T18:17:55", "gold_parse": "Time[]{2017-11-18 11:20 (X/X)}", "language": "de" }, { "text": "16.08.17 ab 05:34", "ref_time": "2017-08-14T11:45:02", "gold_parse": "Time[]{2017-08-16 05:34 (X/X)}", "language": "de" }, { "text": "Kommenden Freitag morgens", "ref_time": "2017-11-18T09:52:11", "gold_parse": "Time[]{2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "Donnerstag, den 16.11. um 17.30h", "ref_time": "2017-11-09T10:40:26", "gold_parse": "Time[]{2017-11-16 17:30 (X/X)}", "language": "de" }, { "text": "29.08.2017 10.00 Uhr", "ref_time": "2017-08-28T09:03:54", "gold_parse": "Time[]{2017-08-29 10:00 (X/X)}", "language": "de" }, { "text": "20.07.2017 22:10 Uhr", "ref_time": "2017-06-23T12:40:07", "gold_parse": "Time[]{2017-07-20 22:10 (X/X)}", "language": "de" }, { "text": "am 15.12. 18:50 Uhr", "ref_time": "2017-11-23T14:13:17", "gold_parse": "Time[]{2017-12-15 18:50 (X/X)}", "language": "de" }, { "text": "am 01.08.2017 ab 17:30 Uhr", "ref_time": "2017-07-24T10:14:55", "gold_parse": "Time[]{2017-08-01 17:30 (X/X)}", "language": "de" }, { "text": "26.10.2017", "ref_time": "2017-09-26T13:44:07", "gold_parse": "Time[]{2017-10-26 X:X (X/X)}", "language": "de" }, { "text": "21.11. - 23.11.", "ref_time": "2017-11-14T13:48:38", "gold_parse": "Interval[]{2017-11-21 X:X (X/X) - 2017-11-23 X:X (X/X)}", "language": "de" }, { "text": "07.06. ab 17 Uhr", "ref_time": "2017-05-30T11:06:44", "gold_parse": "Interval[]{2017-06-07 17:00 (X/X) - None}", "language": "de" }, { "text": "Mittwoch, den 20.09. morgens", "ref_time": "2017-09-13T07:26:35", "gold_parse": "Time[]{2017-09-20 X:X (X/morning)}", "language": "de" }, { "text": "23.09 abends", "ref_time": "2017-09-06T12:17:42", "gold_parse": "Time[]{2017-09-23 X:X (X/evening)}", "language": "de" }, { "text": "27.11.2017 17:00 Uhr", "ref_time": "2017-10-11T10:08:05", "gold_parse": "Time[]{2017-11-27 17:00 (X/X)}", "language": "de" }, { "text": "Mo, 20.11. ca. 18.00Uhr", "ref_time": "2017-11-19T04:44:14", "gold_parse": "Time[]{2017-11-20 18:00 (X/X)}", "language": "de" }, { "text": "am 12./13.", "ref_time": "2017-11-15T07:48:33", "gold_parse": "Interval[]{2017-12-12 X:X (X/X) - 2017-12-13 X:X (X/X)}", "language": "de" }, { "text": "von heute 19. - 21.06.2017", "ref_time": "2017-06-19T11:32:50", "gold_parse": "Interval[]{2017-06-19 X:X (X/X) - 2017-06-21 X:X (X/X)}", "language": "de" }, { "text": "13.11.2017, 15h50", "ref_time": "2017-11-09T16:40:57", "gold_parse": "Time[]{2017-11-13 15:50 (X/X)}", "language": "en" }, { "text": "25.07.2017", "ref_time": "2017-06-19T11:51:01", "gold_parse": "Time[]{2017-07-25 X:X (X/X)}", "language": "de" }, { "text": "am 31. ca 17 Uhr", "ref_time": "2017-11-15T18:32:47", "gold_parse": "Time[]{2017-11-30 17:00 (X/X)}", "language": "de" }, { "text": "on Jan 8, 2018 0905-1340", "ref_time": "2017-11-29T14:38:44", "gold_parse": "Interval[]{2018-01-08 09:05 (X/X) - 2018-01-08 13:40 (X/X)}", "language": "en" }, { "text": "am 16.08.17 um ca. 06:30 Uhr", "ref_time": "2017-08-11T08:53:53", "gold_parse": "Time[]{2017-08-16 06:30 (X/X)}", "language": "de" }, { "text": "on September 23", "ref_time": "2017-08-30T11:54:52", "gold_parse": "Time[]{2017-09-23 X:X (X/X)}", "language": "en" }, { "text": "Mo, 20.11. ca. 14.00Uhr", "ref_time": "2017-11-19T04:44:14", "gold_parse": "Time[]{2017-11-20 14:00 (X/X)}", "language": "de" }, { "text": "morgen", "ref_time": "2017-11-23T11:28:58", "gold_parse": "Time[]{2017-11-24 X:X (X/X)}", "language": "de" }, { "text": "Di, 21.11.17 10:49", "ref_time": "2017-11-16T12:19:19", "gold_parse": "Time[]{2017-11-21 10:49 (X/X)}", "language": "de" }, { "text": "14-15.11.2017", "ref_time": "2017-11-09T08:41:57", "gold_parse": "Interval[]{2017-11-14 X:X (X/X) - 2017-11-15 X:X (X/X)}", "language": "en" }, { "text": "15.05.", "ref_time": "2017-05-11T12:18:59", "gold_parse": "Time[]{2017-05-15 X:X (X/X)}", "language": "de" }, { "text": "on Thursday 21st in the late afternoon", "ref_time": "2017-09-12T10:04:23", "gold_parse": "Time[]{2017-09-21 X:X (X/lateafternoon)}", "language": "en" }, { "text": "23.06.2017 ca. 10Uhr morgens", "ref_time": "2017-06-02T09:41:12", "gold_parse": "Time[]{2017-06-23 10:00 (X/X)}", "language": "de" }, { "text": "tomorrow evening Tue 28. Nov 2017", "ref_time": "2017-11-27T19:37:43", "gold_parse": "Time[]{2017-11-28 X:X (X/evening)}", "language": "en" }, { "text": "Sa. 15.07.2017", "ref_time": "2017-07-13T20:48:02", "gold_parse": "Time[]{2017-07-15 X:X (X/X)}", "language": "de" }, { "text": "Sa. 09.12.2017 ca. 13:00 Uhr", "ref_time": "2017-11-28T14:05:46", "gold_parse": "Time[]{2017-12-09 13:00 (X/X)}", "language": "de" }, { "text": "21.09. so spät wie möglich", "ref_time": "2017-09-07T10:38:37", "gold_parse": "Time[]{2017-09-21 X:X (X/last)}", "language": "de" }, { "text": "24 - 29", "ref_time": "2017-08-30T10:02:11", "gold_parse": "Interval[]{2017-09-24 X:X (X/X) - 2017-09-29 X:X (X/X)}", "language": "en" }, { "text": "25.11.2017 zwischen 07:00 - 11:00 Uhr", "ref_time": "2017-11-20T09:05:29", "gold_parse": "Interval[]{2017-11-25 07:00 (X/X) - 2017-11-25 11:00 (X/X)}", "language": "de" }, { "text": "09.11.17 20:32", "ref_time": "2017-11-06T08:48:13", "gold_parse": "Time[]{2017-11-09 20:32 (X/X)}", "language": "de" }, { "text": "16 Nov 2330", "ref_time": "2017-08-25T12:15:35", "gold_parse": "Time[]{2017-11-16 23:30 (X/X)}", "language": "en" }, { "text": "16.10-22.10.", "ref_time": "2017-06-22T09:26:04", "gold_parse": "Interval[]{2017-10-16 X:X (X/X) - 2017-10-22 X:X (X/X)}", "language": "de" }, { "text": "Dienstag 20.6. 1030-1215", "ref_time": "2017-06-04T16:33:48", "gold_parse": "Interval[]{2017-06-20 10:30 (X/X) - 2017-06-20 12:15 (X/X)}", "language": "de" }, { "text": "morning of Wednesday, June 21st", "ref_time": "2017-06-15T15:47:32", "gold_parse": "Time[]{2017-06-21 X:X (X/morning)}", "language": "en" }, { "text": "nachmittag", "ref_time": "2017-08-24T09:54:37", "gold_parse": "Time[]{2017-08-25 X:X (X/afternoon)}", "language": "de" }, { "text": "am 18.", "ref_time": "2017-07-06T16:48:23", "gold_parse": "Time[]{2017-07-18 X:X (X/X)}", "language": "de" }, { "text": "22.06.2017 früh", "ref_time": "2017-06-21T07:13:28", "gold_parse": "Time[]{2017-06-22 X:X (X/earlymorning)}", "language": "de" }, { "text": "25.10.2017 18:00 Uhr", "ref_time": "2017-10-13T13:11:51", "gold_parse": "Time[]{2017-10-25 18:00 (X/X)}", "language": "de" }, { "text": "on the 5th Night", "ref_time": "2017-10-24T12:08:03", "gold_parse": "Time[]{2017-11-05 X:X (X/night)}", "language": "en" }, { "text": "Montag 18.09", "ref_time": "2017-09-12T09:45:16", "gold_parse": "Time[]{2017-09-18 X:X (X/X)}", "language": "de" }, { "text": "Nov 6th - Nov 8th", "ref_time": "2017-10-18T09:02:32", "gold_parse": "Interval[]{2017-11-06 X:X (X/X) - 2017-11-08 X:X (X/X)}", "language": "de" }, { "text": "30.07.2017 Ab 20:00 Uhr", "ref_time": "2017-06-19T11:51:01", "gold_parse": "Interval[]{2017-07-30 20:00 (X/X) - None}", "language": "de" }, { "text": "19 Uhr", "ref_time": "2017-11-06T15:24:40", "gold_parse": "Time[]{2017-11-09 19:00 (X/X)}", "language": "de" }, { "text": "vom 20. - 22.11.2017", "ref_time": "2017-11-13T13:35:03", "gold_parse": "Interval[]{2017-11-20 X:X (X/X) - 2017-11-22 X:X (X/X)}", "language": "de" }, { "text": "Nacht vom 05.11.", "ref_time": "2017-11-01T10:24:11", "gold_parse": "Time[]{2017-11-05 X:X (X/X)}", "language": "de" }, { "text": "18:50 05/09 (tomorrow", "ref_time": "2017-09-04T10:25:15", "gold_parse": "Time[]{2017-09-05 18:50 (X/X)}", "language": "other" }, { "text": "1.Jun at 6:34am.", "ref_time": "2017-05-29T15:33:01", "gold_parse": "Time[]{2017-06-01 06:34 (X/X)}", "language": "en" }, { "text": "from 3. to 5.10.2017", "ref_time": "2017-10-02T06:20:20", "gold_parse": "Interval[]{2017-10-03 X:X (X/X) - 2017-10-05 X:X (X/X)}", "language": "en" }, { "text": "18th", "ref_time": "2017-06-20T17:05:49", "gold_parse": "Time[]{2017-08-18 X:X (X/X)}", "language": "en" }, { "text": "June 18th", "ref_time": "2017-06-12T08:39:41", "gold_parse": "Time[]{2017-06-18 X:X (X/X)}", "language": "en" }, { "text": "Montag, 28.08.2017 um 10:55h", "ref_time": "2017-07-24T15:15:56", "gold_parse": "Time[]{2017-08-28 10:55 (X/X)}", "language": "de" }, { "text": "on July 11 at 0705am", "ref_time": "2017-07-05T09:23:08", "gold_parse": "Time[]{2017-07-11 07:05 (X/X)}", "language": "en" }, { "text": "am 18.7 vormittags (vor 10:00", "ref_time": "2017-07-07T12:10:14", "gold_parse": "Interval[]{None - 2017-07-18 10:00 (X/X)}", "language": "de" }, { "text": "Sonntag 22:40 - 1:10", "ref_time": "2017-07-03T14:26:04", "gold_parse": "Interval[]{2017-07-09 22:40 (X/X) - 2017-07-10 01:10 (X/X)}", "language": "de" }, { "text": "24.10.2017", "ref_time": "2017-10-17T12:57:20", "gold_parse": "Time[]{2017-10-24 X:X (X/X)}", "language": "de" }, { "text": "Fr. 01.12.2017 ca. 14:00 Uhr", "ref_time": "2017-11-22T09:23:28", "gold_parse": "Time[]{2017-12-01 14:00 (X/X)}", "language": "de" }, { "text": "Freitagmorgen 21/07/17", "ref_time": "2017-07-18T19:11:47", "gold_parse": "Time[]{2017-07-21 X:X (X/morning)}", "language": "de" }, { "text": "Mi. 25.10.2017", "ref_time": "2017-10-11T10:05:05", "gold_parse": "Time[]{2017-10-25 X:X (X/X)}", "language": "de" }, { "text": "Fri 19 May 18:40 - 19:55", "ref_time": "2017-05-11T17:16:49", "gold_parse": "Interval[]{2017-05-19 18:40 (X/X) - 2017-05-19 19:55 (X/X)}", "language": "en" }, { "text": "the 11th early morning at around 7.30/8am", "ref_time": "2017-09-27T19:18:24", "gold_parse": "Interval[]{2017-10-11 07:30 (X/X) - 2017-10-11 08:00 (X/X)}", "language": "en" }, { "text": "am 27.11.2017 um 17:00 Uhr", "ref_time": "2017-10-06T07:20:20", "gold_parse": "Time[]{2017-11-27 17:00 (X/X)}", "language": "de" }, { "text": "am 29.05. ab ca. 8:00-9:00 Uhr", "ref_time": "2017-05-23T10:07:56", "gold_parse": "Interval[]{2017-05-29 08:00 (X/X) - 2017-05-29 09:00 (X/X)}", "language": "de" }, { "text": "am 19.Juni morgens", "ref_time": "2017-06-06T12:00:56", "gold_parse": "Time[]{2017-06-19 X:X (X/morning)}", "language": "de" }, { "text": "vom 25.07.- 26.07.17", "ref_time": "2017-07-20T07:16:48", "gold_parse": "Interval[]{2017-07-25 X:X (X/X) - 2017-07-26 X:X (X/X)}", "language": "de" }, { "text": "vom 22. bis 23. August 17-18 Uhr", "ref_time": "2017-08-14T09:16:16", "gold_parse": "Interval[]{2017-08-23 17:00 (X/X) - 2017-08-23 18:00 (X/X)}", "language": "de" }, { "text": "15.09.2017 um 15:00 Uhr", "ref_time": "2017-08-31T14:28:32", "gold_parse": "Time[]{2017-09-15 15:00 (X/X)}", "language": "de" }, { "text": "05.12.17 17:00", "ref_time": "2017-11-13T10:34:59", "gold_parse": "Time[]{2017-12-05 17:00 (X/X)}", "language": "de" }, { "text": "26.10.2017 19:10 - 22:00", "ref_time": "2017-10-09T10:12:29", "gold_parse": "Interval[]{2017-10-26 19:10 (X/X) - 2017-10-26 22:00 (X/X)}", "language": "de" }, { "text": "11.08", "ref_time": "2017-07-21T07:43:24", "gold_parse": "Time[]{2017-08-11 X:X (X/X)}", "language": "de" }, { "text": "20.6.", "ref_time": "2017-06-06T10:24:43", "gold_parse": "Time[]{2017-06-20 X:X (X/X)}", "language": "de" }, { "text": "vom 22. Bis 23. November", "ref_time": "2017-11-15T11:37:40", "gold_parse": "Interval[]{2017-11-22 X:X (X/X) - 2017-11-23 X:X (X/X)}", "language": "de" }, { "text": "Monday 24th", "ref_time": "2017-07-17T12:57:50", "gold_parse": "Time[]{2017-07-24 X:X (X/X)}", "language": "en" }, { "text": "am 27.09.2017 ab 07:00 Uhr", "ref_time": "2017-09-20T10:34:47", "gold_parse": "Interval[]{2017-09-27 07:00 (X/X) - None}", "language": "de" }, { "text": "Mi 02 Aug 2017 23:50 - 05:25", "ref_time": "2017-06-28T12:06:16", "gold_parse": "Interval[]{2017-08-02 23:50 (X/X) - 2017-08-03 05:25 (X/X)}", "language": "de" }, { "text": "Mi. 14. Jun. 20:13", "ref_time": "2017-06-09T07:26:04", "gold_parse": "Time[]{2017-06-14 20:13 (X/X)}", "language": "de" }, { "text": "16.9", "ref_time": "2017-06-13T14:44:46", "gold_parse": "Time[]{2017-09-16 X:X (X/X)}", "language": "de" }, { "text": "03.02.2018", "ref_time": "2017-10-17T05:56:05", "gold_parse": "Time[]{2018-02-03 X:X (X/X)}", "language": "de" }, { "text": "29.09.2017 14:03", "ref_time": "2017-09-19T06:36:35", "gold_parse": "Time[]{2017-09-29 14:03 (X/X)}", "language": "de" }, { "text": "Am 08.09. Frühflieger", "ref_time": "2017-08-15T13:44:08", "gold_parse": "Time[]{2017-09-08 X:X (X/first)}", "language": "de" }, { "text": "von Montag, 11.09. bis Donnerstag 14.09.", "ref_time": "2017-09-08T09:49:10", "gold_parse": "Interval[]{2017-09-11 X:X (X/X) - 2017-09-14 X:X (X/X)}", "language": "de" }, { "text": "6 Nov 2359", "ref_time": "2017-08-25T12:23:01", "gold_parse": "Time[]{2017-11-06 23:59 (X/X)}", "language": "en" }, { "text": "am 14.09. ab 15 Uhr", "ref_time": "2017-09-06T20:00:36", "gold_parse": "Interval[]{2017-09-14 15:00 (X/X) - None}", "language": "de" }, { "text": "Mo 09.10.17 06:20", "ref_time": "2017-09-29T08:46:55", "gold_parse": "Time[]{2017-10-09 06:20 (X/X)}", "language": "de" }, { "text": "20.07 um 18:25", "ref_time": "2017-06-28T11:22:47", "gold_parse": "Time[]{2017-07-20 18:25 (X/X)}", "language": "de" }, { "text": "06.07.17 (ab 18:00 Uhr", "ref_time": "2017-07-05T08:43:35", "gold_parse": "Interval[]{2017-07-06 18:00 (X/X) - None}", "language": "de" }, { "text": "Sunday December 3rd at 6pm.", "ref_time": "2017-10-17T15:21:29", "gold_parse": "Time[]{2017-12-03 18:00 (X/X)}", "language": "en" }, { "text": "10.11. um ca. 18:00 Uhr", "ref_time": "2017-11-08T14:01:10", "gold_parse": "Time[]{2017-11-10 18:00 (X/X)}", "language": "de" }, { "text": "morgen ca 16:00h", "ref_time": "2017-05-29T09:52:30", "gold_parse": "Time[]{2017-05-30 16:00 (X/X)}", "language": "de" }, { "text": "Di. 03.10.2017 19:05", "ref_time": "2017-08-22T10:01:21", "gold_parse": "Time[]{2017-10-03 19:05 (X/X)}", "language": "de" }, { "text": "am 12.10.2017 um 09.50", "ref_time": "2017-10-09T10:54:22", "gold_parse": "Time[]{2017-10-12 09:50 (X/X)}", "language": "de" }, { "text": "Sonntag, 2. Juli abends", "ref_time": "2017-05-27T07:50:19", "gold_parse": "Time[]{2017-06-02 X:X (X/evening)}", "language": "de" }, { "text": "vom 13.09., 12:00 Uhr, bis 14.09., 08:00 Uhr", "ref_time": "2017-09-11T15:46:17", "gold_parse": "Interval[]{2017-09-13 12:00 (X/X) - 2017-09-14 08:00 (X/X)}", "language": "de" }, { "text": "17 JUN 08:00", "ref_time": "2017-05-23T09:39:45", "gold_parse": "Time[]{2017-06-17 08:00 (X/X)}", "language": "en" }, { "text": "Fri. 22 Sept. 16:25", "ref_time": "2017-09-08T07:58:44", "gold_parse": "Time[]{2017-09-22 16:25 (X/X)}", "language": "en" }, { "text": "14.9. um 11:00 Uhr", "ref_time": "2017-09-01T09:36:44", "gold_parse": "Time[]{2017-09-14 11:00 (X/X)}", "language": "de" }, { "text": "am 19.9. ab 18.25", "ref_time": "2017-09-12T18:13:07", "gold_parse": "Interval[]{2017-09-19 18:25 (X/X) - None}", "language": "de" }, { "text": "20.06.2017 12:47 Uhr", "ref_time": "2017-06-13T09:49:31", "gold_parse": "Time[]{2017-06-20 12:47 (X/X)}", "language": "de" }, { "text": "Mi 13. Sep 09:30", "ref_time": "2017-07-25T12:26:26", "gold_parse": "Time[]{2017-09-13 09:30 (X/X)}", "language": "de" }, { "text": "Mo. 11 Sept. 21:00", "ref_time": "2017-09-04T16:13:06", "gold_parse": "Time[]{2017-09-11 21:00 (X/X)}", "language": "de" }, { "text": "13.06", "ref_time": "2017-06-06T08:37:37", "gold_parse": "Time[]{2017-06-13 X:X (X/X)}", "language": "de" }, { "text": "July 26th", "ref_time": "2017-06-26T09:49:16", "gold_parse": "Time[]{2017-07-26 X:X (X/X)}", "language": "en" }, { "text": "11 loka 09:25", "ref_time": "2017-09-13T14:48:21", "gold_parse": "Time[]{2017-10-11 09:25 (X/X)}", "language": "en" }, { "text": "von 21-23. Juni", "ref_time": "2017-05-30T13:24:23", "gold_parse": "Interval[]{2017-06-21 X:X (X/X) - 2017-06-23 X:X (X/X)}", "language": "de" }, { "text": "07.09.", "ref_time": "2017-09-01T15:47:14", "gold_parse": "Time[]{2017-09-07 X:X (X/X)}", "language": "de" }, { "text": "12.11 ab 19:00 Uhr", "ref_time": "2017-10-26T10:37:49", "gold_parse": "Interval[]{2017-11-12 19:00 (X/X) - None}", "language": "de" }, { "text": "06.09.-07.09.2017 19:40 Uhr", "ref_time": "2017-08-23T09:05:20", "gold_parse": "Time[]{2017-09-07 19:40 (X/X)}", "language": "de" }, { "text": "Friday, 15 September 2017 13:55", "ref_time": "2017-09-04T06:55:16", "gold_parse": "Time[]{2017-09-15 13:55 (X/X)}", "language": "other" }, { "text": "am 30.8. 18:00", "ref_time": "2017-08-24T06:12:14", "gold_parse": "Time[]{2017-08-30 18:00 (X/X)}", "language": "de" }, { "text": "06.06 07:26", "ref_time": "2017-05-23T07:49:54", "gold_parse": "Time[]{2017-06-06 07:26 (X/X)}", "language": "de" }, { "text": "heute", "ref_time": "2017-08-25T05:57:35", "gold_parse": "Time[]{2017-08-25 X:X (X/X)}", "language": "de" }, { "text": "on Tuesday evening Nov 28th", "ref_time": "2017-10-26T08:50:53", "gold_parse": "Time[]{2017-11-28 X:X (X/evening)}", "language": "en" }, { "text": "29.11.2017 ab 18:30 Uhr", "ref_time": "2017-10-11T10:35:19", "gold_parse": "Interval[]{2017-11-29 18:30 (X/X) - None}", "language": "de" }, { "text": "21/09 1810-2020", "ref_time": "2017-08-11T06:30:46", "gold_parse": "Interval[]{2017-09-21 18:10 (X/X) - 2017-09-21 20:20 (X/X)}", "language": "en" }, { "text": "03.11.2017 13:25 - 14:23 Uhr", "ref_time": "2017-10-27T13:27:35", "gold_parse": "Interval[]{2017-11-03 13:25 (X/X) - 2017-11-03 14:23 (X/X)}", "language": "de" }, { "text": "27.10.2017", "ref_time": "2017-10-16T14:51:25", "gold_parse": "Time[]{2017-10-27 X:X (X/X)}", "language": "de" }, { "text": "26.09. 8:15", "ref_time": "2017-09-13T12:05:22", "gold_parse": "Time[]{2017-09-26 08:15 (X/X)}", "language": "de" }, { "text": "13AUG 09:10", "ref_time": "2017-05-19T08:51:30", "gold_parse": "Time[]{2017-08-13 09:10 (X/X)}", "language": "de" }, { "text": "on 06/08 evening", "ref_time": "2017-07-31T09:04:05", "gold_parse": "Time[]{2017-08-06 X:X (X/evening)}", "language": "en" }, { "text": "Montag, 28.08.17", "ref_time": "2017-05-23T12:46:25", "gold_parse": "Time[]{2017-08-28 X:X (X/X)}", "language": "de" }, { "text": "am 04.12.2017 18:10", "ref_time": "2017-11-29T10:51:43", "gold_parse": "Time[]{2017-12-04 18:10 (X/X)}", "language": "de" }, { "text": "tomorrow 18th November at 13.00", "ref_time": "2017-11-17T21:08:07", "gold_parse": "Time[]{2017-11-18 13:00 (X/X)}", "language": "en" }, { "text": "Monday 19.06", "ref_time": "2017-05-24T08:15:22", "gold_parse": "Time[]{2017-06-19 X:X (X/X)}", "language": "en" }, { "text": "20.11.", "ref_time": "2017-11-17T15:03:42", "gold_parse": "Time[]{2017-11-20 X:X (X/X)}", "language": "de" }, { "text": "May 19 at 1120pm", "ref_time": "2017-05-17T06:22:34", "gold_parse": "Time[]{2017-05-19 23:20 (X/X)}", "language": "en" }, { "text": "10. Oktober 19:10 h", "ref_time": "2017-08-14T13:56:10", "gold_parse": "Time[]{2017-10-10 19:10 (X/X)}", "language": "de" }, { "text": "07.11.2017 ca. ab 17:30Uhr", "ref_time": "2017-10-19T15:05:52", "gold_parse": "Interval[]{2017-11-07 17:30 (X/X) - None}", "language": "de" }, { "text": "20 october", "ref_time": "2017-10-19T08:47:39", "gold_parse": "Time[]{2017-10-20 X:X (X/X)}", "language": "en" }, { "text": "14.12.17", "ref_time": "2017-11-27T11:14:03", "gold_parse": "Time[]{2017-12-14 X:X (X/X)}", "language": "de" }, { "text": "Sonntag, den 19.11.2017", "ref_time": "2017-09-26T13:42:07", "gold_parse": "Time[]{2017-11-19 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch, 6.9.", "ref_time": "2017-08-16T11:00:02", "gold_parse": "Time[]{2017-09-06 X:X (X/X)}", "language": "de" }, { "text": "early morning on Tuesday 12.12", "ref_time": "2017-11-29T09:35:29", "gold_parse": "Time[]{2017-12-12 X:X (X/earlymorning)}", "language": "en" }, { "text": "Fri 11.8", "ref_time": "2017-08-08T14:50:05", "gold_parse": "Time[]{2017-08-11 X:X (X/X)}", "language": "en" }, { "text": "Mittwoch, 22.11.2017 16:40 Uhr", "ref_time": "2017-11-08T10:29:19", "gold_parse": "Time[]{2017-11-22 16:40 (X/X)}", "language": "de" }, { "text": "am nächsten Vormittag", "ref_time": "2017-11-14T12:16:22", "gold_parse": "Time[]{2017-12-06 X:X (X/earlynoon)}", "language": "de" }, { "text": "21/10 02:10", "ref_time": "2017-08-07T11:38:37", "gold_parse": "Time[]{2017-10-21 02:10 (X/X)}", "language": "de" }, { "text": "12/24 02:10", "ref_time": "2022-11-30T11:38:37", "gold_parse": "Time[]{2022-12-24 02:10 (X/X)}", "language": "de" }, { "text": "3/24", "ref_time": "2022-11-30T11:38:37", "gold_parse": "Time[]{2023-03-24 X:X (X/X)}", "language": "de" }, { "text": "10/19", "ref_time": "2022-11-30T11:38:37", "gold_parse": "Time[]{2023-10-19 X:X (X/X)}", "language": "de" }, { "text": "6/14", "ref_time": "2022-11-30T11:38:37", "gold_parse": "Time[]{2023-06-14 X:X (X/X)}", "language": "de" }, { "text": "7/17", "ref_time": "2022-11-30T11:38:37", "gold_parse": "Time[]{2023-07-17 X:X (X/X)}", "language": "de" }, { "text": "05-06.10.17", "ref_time": "2017-10-04T14:05:51", "gold_parse": "Interval[]{2017-10-05 X:X (X/X) - 2017-10-06 X:X (X/X)}", "language": "en" }, { "text": "am 11.10. morgens", "ref_time": "2017-09-28T15:30:35", "gold_parse": "Time[]{2017-10-11 X:X (X/morning)}", "language": "de" }, { "text": "am 18.9.2017", "ref_time": "2017-09-07T07:08:57", "gold_parse": "Time[]{2017-09-18 X:X (X/X)}", "language": "de" }, { "text": "Oct. 11th - October 13th", "ref_time": "2017-09-27T18:50:13", "gold_parse": "Interval[]{2017-10-11 X:X (X/X) - 2017-10-13 X:X (X/X)}", "language": "en" }, { "text": "1.9. 17:00 the earliest", "ref_time": "2017-07-31T17:32:42", "gold_parse": "Interval[]{2017-09-01 17:00 (X/X) - None}", "language": "en" }, { "text": "am 22.06. um 13:00 Uhr", "ref_time": "2017-06-19T16:33:33", "gold_parse": "Time[]{2017-06-22 13:00 (X/X)}", "language": "de" }, { "text": "12.9. 19.06 Uhr", "ref_time": "2017-09-06T16:28:50", "gold_parse": "Time[]{2017-09-12 19:06 (X/X)}", "language": "de" }, { "text": "one night", "ref_time": "2017-09-06T05:40:32", "gold_parse": "Duration[]{1 nights}", "language": "en" }, { "text": "13.10.2017", "ref_time": "2017-10-12T07:50:21", "gold_parse": "Time[]{2017-10-13 X:X (X/X)}", "language": "de" }, { "text": "13 JUL 13:30", "ref_time": "2017-06-29T08:25:05", "gold_parse": "Time[]{2017-07-13 13:30 (X/X)}", "language": "de" }, { "text": "19th May 20:20", "ref_time": "2017-05-10T11:09:25", "gold_parse": "Time[]{2017-05-19 20:20 (X/X)}", "language": "en" }, { "text": "19.05.2017 11:00Uhr", "ref_time": "2017-05-15T12:41:41", "gold_parse": "Time[]{2017-05-19 11:00 (X/X)}", "language": "de" }, { "text": "07.-09.08.2017", "ref_time": "2017-07-18T08:02:41", "gold_parse": "Interval[]{2017-08-07 X:X (X/X) - 2017-08-09 X:X (X/X)}", "language": "de" }, { "text": "Mittwoch, 04.10.2017 09:00 Uhr", "ref_time": "2017-10-02T13:01:23", "gold_parse": "Time[]{2017-10-04 09:00 (X/X)}", "language": "de" }, { "text": "Mo., 25.09.2017 11:35", "ref_time": "2017-09-07T12:32:56", "gold_parse": "Time[]{2017-09-25 11:35 (X/X)}", "language": "de" }, { "text": "07.09-08.09", "ref_time": "2017-09-06T09:31:34", "gold_parse": "Interval[]{2017-09-07 X:X (X/X) - 2017-09-08 X:X (X/X)}", "language": "de" }, { "text": "28.11.", "ref_time": "2017-10-30T16:22:20", "gold_parse": "Time[]{2017-11-28 X:X (X/X)}", "language": "de" }, { "text": "am Dienstag, 11.07. morgens", "ref_time": "2017-07-05T08:46:38", "gold_parse": "Time[]{2017-07-11 X:X (X/morning)}", "language": "de" }, { "text": "26.08. - 09.09.2017", "ref_time": "2017-07-31T12:34:08", "gold_parse": "Interval[]{2017-08-26 X:X (X/X) - 2017-09-09 X:X (X/X)}", "language": "de" }, { "text": "Sep 7th, 9am - Sep 7th, 11pm", "ref_time": "2017-07-12T07:17:33", "gold_parse": "Interval[]{2017-09-07 09:00 (X/X) - 2017-09-07 23:00 (X/X)}", "language": "de" }, { "text": "Vom 11.-12.12.2017", "ref_time": "2017-11-20T06:53:47", "gold_parse": "Interval[]{2017-12-11 X:X (X/X) - 2017-12-12 X:X (X/X)}", "language": "de" }, { "text": "21.09 Uhr", "ref_time": "2017-10-11T12:42:56", "gold_parse": "Time[]{2017-10-18 21:09 (X/X)}", "language": "de" }, { "text": "19. Juni", "ref_time": "2017-06-04T16:39:54", "gold_parse": "Time[]{2017-06-19 X:X (X/X)}", "language": "de" }, { "text": "Dienstag, 31.10.2017 15:25", "ref_time": "2017-10-26T11:53:15", "gold_parse": "Time[]{2017-10-31 15:25 (X/X)}", "language": "de" }, { "text": "26.08. früh morgens", "ref_time": "2017-08-16T10:21:36", "gold_parse": "Time[]{2017-08-26 X:X (X/earlymorning)}", "language": "de" }, { "text": "19.11.2017 um 18:00 - 19:10", "ref_time": "2017-10-19T08:51:43", "gold_parse": "Interval[]{2017-11-19 18:00 (X/X) - 2017-11-19 19:10 (X/X)}", "language": "de" }, { "text": "27.11.2017 06:40 Uhr", "ref_time": "2017-11-10T08:30:02", "gold_parse": "Time[]{2017-11-27 06:40 (X/X)}", "language": "de" }, { "text": "09.06. bis 12.06.2017", "ref_time": "2017-05-12T13:22:07", "gold_parse": "Interval[]{2017-06-09 X:X (X/X) - 2017-06-12 X:X (X/X)}", "language": "de" }, { "text": "6:40am THURSDAY, 29th", "ref_time": "2017-06-26T10:34:18", "gold_parse": "Time[]{2017-06-29 06:40 (X/X)}", "language": "en" }, { "text": "Abends", "ref_time": "2017-06-01T06:42:27", "gold_parse": "Time[]{2017-07-02 X:X (X/evening)}", "language": "de" }, { "text": "04 JUN 09:35", "ref_time": "2017-05-17T09:16:24", "gold_parse": "Time[]{2017-06-04 09:35 (X/X)}", "language": "de" }, { "text": "29. September 18 Uhr", "ref_time": "2017-09-15T16:06:25", "gold_parse": "Time[]{2017-09-29 18:00 (X/X)}", "language": "de" }, { "text": "am 16.10.2017 ersten", "ref_time": "2017-10-09T09:54:25", "gold_parse": "Time[]{2017-10-16 X:X (X/first)}", "language": "de" }, { "text": "May 23", "ref_time": "2017-05-21T20:46:09", "gold_parse": "Time[]{2017-05-23 X:X (X/X)}", "language": "de" }, { "text": "05.11.2017 15:40", "ref_time": "2017-10-16T08:39:23", "gold_parse": "Time[]{2017-11-06 15:40 (X/X)}", "language": "de" }, { "text": "24 Aug 1915-2015", "ref_time": "2017-08-12T16:43:06", "gold_parse": "Interval[]{2017-08-24 19:15 (X/X) - 2017-08-24 20:15 (X/X)}", "language": "en" }, { "text": "July 7th 7-9am", "ref_time": "2017-07-03T12:40:32", "gold_parse": "Interval[]{2017-07-07 07:00 (X/X) - 2017-07-07 09:00 (X/X)}", "language": "en" }, { "text": "2 Nächte", "ref_time": "2017-06-28T09:25:50", "gold_parse": "Interval[]{2017-06-28 X:X (X/X) - 2017-06-30 X:X (X/X)}", "language": "de" }, { "text": "Von 8.11 - 9.11", "ref_time": "2017-11-07T13:20:43", "gold_parse": "Interval[]{2017-11-08 X:X (X/X) - 2017-11-09 X:X (X/X)}", "language": "de" }, { "text": "31.05.", "ref_time": "2017-05-23T05:36:16", "gold_parse": "Time[]{2017-05-31 X:X (X/X)}", "language": "de" }, { "text": "03.09 - 04.09", "ref_time": "2017-09-01T06:41:28", "gold_parse": "Interval[]{2017-09-03 X:X (X/X) - 2017-09-04 X:X (X/X)}", "language": "de" }, { "text": "15.10.", "ref_time": "2017-07-14T15:22:48", "gold_parse": "Time[]{2017-10-15 X:X (X/X)}", "language": "de" }, { "text": "06.12.2017 21:15", "ref_time": "2017-10-27T11:38:34", "gold_parse": "Time[]{2017-12-06 21:15 (X/X)}", "language": "de" }, { "text": "19.02.2018 07:00 Uhr", "ref_time": "2017-10-12T12:16:31", "gold_parse": "Time[]{2018-02-19 07:00 (X/X)}", "language": "de" }, { "text": "Fri 18 Aug 1500-1735", "ref_time": "2017-07-24T07:50:25", "gold_parse": "Interval[]{2017-08-18 15:00 (X/X) - 2017-08-18 17:35 (X/X)}", "language": "en" }, { "text": "26/09 1210-1340", "ref_time": "2017-09-15T16:21:39", "gold_parse": "Interval[]{2017-09-26 12:10 (X/X) - 2017-09-26 13:40 (X/X)}", "language": "en" }, { "text": "27.10.2017 18:30 Uhr", "ref_time": "2017-10-02T11:09:18", "gold_parse": "Time[]{2017-10-27 18:30 (X/X)}", "language": "de" }, { "text": "26.07.17 13:09", "ref_time": "2017-07-24T09:55:47", "gold_parse": "Time[]{2017-07-26 13:09 (X/X)}", "language": "de" }, { "text": "from Jul24 to Jul 25th", "ref_time": "2017-07-18T18:50:36", "gold_parse": "Interval[]{2017-07-24 X:X (X/X) - 2017-07-25 X:X (X/X)}", "language": "en" } ] ================================================ FILE: docs/Makefile ================================================ # Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = python -msphinx SPHINXPROJ = ctparse SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) ================================================ FILE: docs/authors.rst ================================================ .. include:: ../AUTHORS.rst ================================================ FILE: docs/conf.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- # # ctparse documentation build configuration file, created by # sphinx-quickstart on Fri Jun 9 13:47:02 2017. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another # directory, add these directories to sys.path here. If the directory is # relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. # import os import sys sys.path.insert(0, os.path.abspath('..')) import ctparse # noqa # -- General configuration --------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.napoleon'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General information about the project. project = u'ctparse - Parse natural language time expressions' copyright = u"2018, Sebastian Mika, Comtravo GmbH" author = u"Sebastian Mika - Comtravo" # The version info for the project you're documenting, acts as replacement # for |version| and |release|, also used in various other places throughout # the built documents. # # The short X.Y version. version = ctparse.__version__ # The full version, including alpha/beta/rc tags. release = ctparse.__version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a # theme further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # -- Options for HTMLHelp output --------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = 'ctparsedoc' # -- Options for LaTeX output ------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass # [howto, manual, or own class]). latex_documents = [ (master_doc, 'ctparse.tex', u'ctparse - Parse natural language time expressions in pytho Documentation', u'Sebastian Mika', 'manual'), ] # -- Options for manual page output ------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'ctparse', u'ctparse - Parse natural language time expressions Documentation', [author], 1) ] # -- Options for Texinfo output ---------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'ctparse', u'ctparse - Parse natural language time expressions Documentation', author, 'ctparse', 'One line description of project.', 'Miscellaneous'), ] ================================================ FILE: docs/contributing.rst ================================================ .. include:: ../CONTRIBUTING.rst ================================================ FILE: docs/ctparse.rst ================================================ ctparse package =============== Subpackages ----------- .. toctree:: ctparse.time Submodules ---------- ctparse.corpus module --------------------- .. automodule:: ctparse.corpus :members: :undoc-members: :show-inheritance: ctparse.count\_vectorizer module -------------------------------- .. automodule:: ctparse.count_vectorizer :members: :undoc-members: :show-inheritance: ctparse.ctparse module ---------------------- .. automodule:: ctparse.ctparse :members: :undoc-members: :show-inheritance: ctparse.loader module --------------------- .. automodule:: ctparse.loader :members: :undoc-members: :show-inheritance: ctparse.nb\_estimator module ---------------------------- .. automodule:: ctparse.nb_estimator :members: :undoc-members: :show-inheritance: ctparse.nb\_scorer module ------------------------- .. automodule:: ctparse.nb_scorer :members: :undoc-members: :show-inheritance: ctparse.partial\_parse module ----------------------------- .. automodule:: ctparse.partial_parse :members: :undoc-members: :show-inheritance: ctparse.pipeline module ----------------------- .. automodule:: ctparse.pipeline :members: :undoc-members: :show-inheritance: ctparse.rule module ------------------- .. automodule:: ctparse.rule :members: :undoc-members: :show-inheritance: ctparse.scorer module --------------------- .. automodule:: ctparse.scorer :members: :undoc-members: :show-inheritance: ctparse.timers module --------------------- .. automodule:: ctparse.timers :members: :undoc-members: :show-inheritance: ctparse.types module -------------------- .. automodule:: ctparse.types :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: ctparse :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/ctparse.time.rst ================================================ ctparse.time package ==================== Submodules ---------- ctparse.time.corpus module -------------------------- .. automodule:: ctparse.time.corpus :members: :undoc-members: :show-inheritance: ctparse.time.rules module ------------------------- .. automodule:: ctparse.time.rules :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: ctparse.time :members: :undoc-members: :show-inheritance: ================================================ FILE: docs/dataset.rst ================================================ .. include:: ../datasets/README.rst ================================================ FILE: docs/history.rst ================================================ .. include:: ../HISTORY.rst ================================================ FILE: docs/index.rst ================================================ Welcome to the ctparse documentation! ===================================== .. toctree:: :maxdepth: 2 :caption: Contents: readme installation usage dataset contributing modules authors history Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` ================================================ FILE: docs/installation.rst ================================================ .. highlight:: shell ============ Installation ============ Stable release -------------- To install ctparse - Parse natural language time expressions in pytho, run this command in your terminal: .. code-block:: console $ pip install ctparse This is the preferred method to install ctparse - Parse natural language time expressions in pytho, as it will always install the most recent stable release. If you don't have `pip`_ installed, this `Python installation guide`_ can guide you through the process. .. _pip: https://pip.pypa.io .. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/ From sources ------------ The sources for ctparse - Parse natural language time expressions in pytho can be downloaded from the `Github repo`_. You can either clone the public repository: .. code-block:: console $ git clone git://github.com/comtravo/ctparse Or download the `tarball`_: .. code-block:: console $ curl -OL https://github.com/comtravo/ctparse/tarball/master Once you have a copy of the source, you can install it with: .. code-block:: console $ python setup.py install .. _Github repo: https://github.com/comtravo/ctparse .. _tarball: https://github.com/comtravo/ctparse/tarball/master ================================================ FILE: docs/make.bat ================================================ @ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=python -msphinx ) set SOURCEDIR=. set BUILDDIR=_build set SPHINXPROJ=ctparse if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The Sphinx module was not found. Make sure you have Sphinx installed, echo.then set the SPHINXBUILD environment variable to point to the full echo.path of the 'sphinx-build' executable. Alternatively you may add the echo.Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% :end popd ================================================ FILE: docs/modules.rst ================================================ ctparse ======= .. toctree:: :maxdepth: 4 ctparse ================================================ FILE: docs/readme.rst ================================================ .. include:: ../README.rst ================================================ FILE: docs/usage.rst ================================================ ===== Usage ===== To use ctparse simply import the main ``ctparse`` function:: from datetime import datetime from ctparse import ctparse ctparse('today', datetime(2018, 7, 8), timeout=1) The output for the above code is `2018-07-08 X:X (X/X) s=2.273 p=(149, 'ruleToday')` For more details on the parameters please see the docstrings. ================================================ FILE: mypy.ini ================================================ [mypy] # Specify the target platform details in config, so your developers are # free to run mypy on Windows, Linux, or macOS and get consistent # results. python_version=3.6 platform=linux # flake8-mypy expects the two following for sensible formatting show_column_numbers=True # show error messages from unrelated files follow_imports=normal # suppress errors about unsatisfied imports ignore_missing_imports=True # be strict disallow_untyped_calls=True warn_return_any=True strict_optional=True warn_no_return=True warn_redundant_casts=True warn_unused_ignores=True disallow_any_generics=True disallow_untyped_defs=True check_untyped_defs=True # No incremental mode cache_dir=/dev/null [mypy-ctparse.time.rules] # time rules check existence of fields in predicates strict_optional=False [mypy-tests.*] disallow_untyped_defs=False ================================================ FILE: requirements.txt ================================================ . ================================================ FILE: requirements_dev.txt ================================================ pip==20.1.1 bumpversion==0.6.0 watchdog==0.10.2 flake8==3.8.2 flake8-bugbear==20.1.4 tox==3.15.1 coverage==5.1 sphinx==3.0.4 sphinx-rtd-theme==0.4.3 twine==3.1.1 pytest==5.4.2 pytest-runner==5.2 pytest-cov==2.9.0 mypy==0.770 black==19.10b0 ================================================ FILE: scripts/train_default_model.py ================================================ """Train a default multinomial bayes classifier""" import argparse import logging from ctparse.corpus import load_timeparse_corpus, make_partial_rule_dataset, run_corpus from ctparse.loader import DEFAULT_MODEL_FILE from ctparse.nb_scorer import save_naive_bayes, train_naive_bayes from ctparse.scorer import DummyScorer from ctparse.time import auto_corpus, corpus logger = logging.getLogger(__name__) def parse_args(): parser = argparse.ArgumentParser() parser.add_argument( "--legacy", help="Use legacy dataset (ctparse.time.corpus and ctparse.time.auto_corpus as training data)", action="store_true", ) parser.add_argument("--dataset", help="Dataset file") return parser.parse_args() def main(): args = parse_args() logging.basicConfig( level=logging.INFO, format="%(asctime)s %(levelname)s [%(name)s] %(message)s" ) X_combined = [] y_combined = [] if args.legacy: logger.info("Loading legacy dataset") X, y = run_corpus(corpus.corpus + auto_corpus.corpus) X_combined.extend(X) y_combined.extend(y) if args.dataset: logger.info("Loading dataset {}".format(args.dataset)) entries = load_timeparse_corpus(args.dataset) X, y = zip( *make_partial_rule_dataset( entries, scorer=DummyScorer(), timeout=30, max_stack_depth=100, progress=True, ) ) X_combined.extend(X) y_combined.extend(y) if len(X) == 0: raise ValueError("Need to specify at least a dataset for training") mdl = train_naive_bayes(X_combined, y_combined) save_naive_bayes(mdl, DEFAULT_MODEL_FILE) if __name__ == "__main__": main() ================================================ FILE: setup.cfg ================================================ [bumpversion] current_version = 0.3.01 commit = True tag = True [bumpversion:file:setup.py] search = version='{current_version}' replace = version='{new_version}' [bumpversion:file:ctparse/__init__.py] search = __version__ = '{current_version}' replace = __version__ = '{new_version}' [bdist_wheel] universal = 1 [flake8] exclude = docs max-line-length = 80 select = C,E,F,W,B,B950 ignore = E203,E266,E501,W503 mypy_config = mypy.ini [aliases] test = pytest ;[tool:pytest] ;collect_ignore = ['setup.py'] [coverage:run] include = ctparse/* [coverage:report] show_missing = True fail_under = 95 ================================================ FILE: setup.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """The setup script.""" from setuptools import setup, find_packages with open('README.rst') as readme_file: readme = readme_file.read() with open('HISTORY.rst') as history_file: history = history_file.read() requirements = [] setup_requirements = ['pytest-runner', ] test_requirements = ['pytest', ] setup( author="Sebastian Mika/Comtravo", author_email='sebastian.mika@comtravo.com', classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Natural Language :: English', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Text Processing :: Linguistic', ], description="Parse natural language time expressions in python", install_requires=[ 'python-dateutil>=2.7.3,<3.0.0', 'regex>=2018.6.6', 'tqdm>=4.23.4,<5.0.0' ], license="MIT license", long_description=readme + '\n\n' + history, include_package_data=True, keywords='quickadd', name='quickadd', packages=find_packages(include=['ctparse*']), package_dir={'ctparse': 'ctparse'}, package_data={'ctparse': ['models/model.pbz', 'py.typed']}, setup_requires=setup_requirements, test_suite='tests', tests_require=test_requirements, url='https://github.com/inferense/quickadd', version='0.6.5', zip_safe=False, ) ================================================ FILE: tests/__init__.py ================================================ ================================================ FILE: tests/test_corpus.py ================================================ from datetime import datetime import pytest from ctparse.corpus import ( TimeParseEntry, load_timeparse_corpus, make_partial_rule_dataset, parse_nb_string, run_corpus, ) from ctparse.scorer import DummyScorer from ctparse.time.corpus import corpus from ctparse.types import Interval, Time CORPUS_JSON = """ [ { "text": "Donnerstag, den 05.10. ca 6:55", "ref_time": "2017-09-25T16:06:55", "gold_parse": "Time[]{2017-10-05 06:55 (X/X)}", "language": "de" }, { "text": "22.05.2017 früh", "ref_time": "2017-05-16T05:42:09", "gold_parse": "Time[]{2017-05-22 X:X (X/earlymorning)}", "language": "de" } ] """ def test_run_corpus() -> None: """The corpus passes if ctparse generates the desired solution for each test at least once. Otherwise it fails. """ X, y = run_corpus(corpus) assert isinstance(y[0], bool) assert isinstance(X[0][0], str) def test_run_corpus_failure() -> None: fail_corpus = [("never produced", "2015-12-12T12:30", ("today", "heute"))] with pytest.raises(Exception): run_corpus(fail_corpus) def test_make_partial_rule_dataset() -> None: ts = datetime(year=2019, month=10, day=1) entries = [ TimeParseEntry( "today at 5 pm", ts, Time(year=2019, month=10, day=1, hour=17, minute=0) ) ] X, y = zip( *make_partial_rule_dataset( entries, timeout=0, max_stack_depth=0, scorer=DummyScorer() ) ) assert isinstance(y[0], bool) assert isinstance(X[0][0], str) def test_parse_nb_string() -> None: t = Time(year=1, month=1, day=1, hour=1, minute=1, DOW=1, POD="pod") assert t == parse_nb_string("Time[]{0001-01-01 01:01 (1/pod)}") assert Interval(Time(), Time()) == parse_nb_string( "Interval[]{X-X-X X:X (X/X) - X-X-X X:X (X/X)}" ) def test_load_timeparse_corpus(tmp_path) -> None: path = tmp_path / "test.json" path.write_text(CORPUS_JSON, encoding="utf-8") result = load_timeparse_corpus(str(path)) assert len(result) == 2 ================================================ FILE: tests/test_count_vectorizer.py ================================================ import pytest from ctparse.count_vectorizer import CountVectorizer @pytest.mark.parametrize( "ngrams,doc,result", [ ((1, 1), ["a", "b", "c"], ["a", "b", "c"]), ((1, 2), ["a", "b", "c"], ["a", "b", "c", "a b", "b c"]), ((2, 2), ["a", "b", "c"], ["a b", "b c"]), ((1, 3), ["a", "b"], ["a", "b", "a b"]), ((2, 3), ["a", "b"], ["a b"]), ], ) def test_ngrams(ngrams, doc, result): assert CountVectorizer._create_ngrams(ngrams, [doc]) == [result] def test_count_vectorizer_fit_and_transform(): cv = CountVectorizer((1, 2)) cv = cv.fit([["a", "b", "c"], ["c", "d"]]) assert cv.vocabulary assert cv.transform([["b"]]) == [{cv.vocabulary["b"]: 1, 6: 0}] def test_count_vectorizer_fit_transform(): cv = CountVectorizer((1, 2)) X = cv.fit_transform([["a", "b"], ["b", "c"]]) assert cv.vocabulary assert X == [ { cv.vocabulary["a"]: 1, cv.vocabulary["b"]: 1, cv.vocabulary["a b"]: 1, len(cv.vocabulary) - 1: 0, }, {cv.vocabulary["b"]: 1, cv.vocabulary["c"]: 1, cv.vocabulary["b c"]: 1}, ] def test_count_vectorizer_transform_no_fit(): cv = CountVectorizer((1, 2)) with pytest.raises(ValueError): cv.transform([["a"]]) ================================================ FILE: tests/test_ctparse.py ================================================ from datetime import datetime from ctparse.ctparse import ctparse, ctparse_gen, _match_rule from ctparse.types import Interval, Time, Artifact def test_ctparse(): txt = "12.12.2020" res = ctparse(txt) assert res assert res.resolution == Time(year=2020, month=12, day=12) assert str(res) assert repr(res) # non sense gives no result assert ctparse("gargelbabel") is None txt = "12.12." res = ctparse(txt, ts=datetime(2020, 12, 1)) assert res assert res.resolution == Time(year=2020, month=12, day=12) gres = ctparse_gen(txt, ts=datetime(2020, 12, 1)) first_res = next(gres) assert first_res assert first_res.resolution == Time(year=2020, month=12, day=12) def test_ctparse_timeout(): # timeout in ctparse: should rather mock the logger and see # whether the timeout was hit, but cannot get it mocked txt = "tomorrow 8 yesterday Sep 9 9 12 2023 1923" ctparse(txt, timeout=0.0001) def test_match_rule(): def rule(a: Artifact) -> bool: return True assert list(_match_rule([], [rule])) == [] assert list(_match_rule([Artifact()], [])) == [] def test_latent_time(): parse = ctparse("8:00 pm", ts=datetime(2020, 1, 1, 7, 0), latent_time=False) assert parse assert parse.resolution == Time(None, None, None, 20, 00) parse = ctparse("8:00 pm", ts=datetime(2020, 1, 1, 7, 0), latent_time=True) assert parse assert parse.resolution == Time(2020, 1, 1, 20, 00) def test_latent_time_interval(): parse = ctparse( "8:00 pm - 9:00 pm", ts=datetime(2020, 1, 1, 7, 0), latent_time=False ) assert parse assert parse.resolution == Interval( Time(None, None, None, 20, 00), Time(None, None, None, 21, 00) ) parse = ctparse( "8:00 pm - 9:00 pm", ts=datetime(2020, 1, 1, 7, 0), latent_time=True ) assert parse assert parse.resolution == Interval( Time(2020, 1, 1, 20, 00), Time(2020, 1, 1, 21, 00) ) ================================================ FILE: tests/test_partialparse.py ================================================ import datetime from typing import Any, Callable import pytest import regex from ctparse.partial_parse import PartialParse, _seq_match from ctparse.types import RegexMatch, Time def test_partial_parse() -> None: match_a = regex.match("(?a)", "ab") match_b = next(regex.finditer("(?b)", "ab")) pp = PartialParse.from_regex_matches( (RegexMatch(1, match_a), RegexMatch(2, match_b)) ) assert len(pp.prod) == 2 assert len(pp.rules) == 2 assert isinstance(pp.score, float) def mock_rule(ts: datetime.datetime, a: Time) -> Time: return Time() pp2 = pp.apply_rule( datetime.datetime(day=1, month=1, year=2015), mock_rule, "mock_rule", (0, 1) ) assert pp != pp2 with pytest.raises(ValueError): PartialParse((), ()) def test_seq_match() -> None: # NOTE: we are testing a private function because the algorithm # is quite complex def make_rm(i: int) -> Callable[[Any], bool]: def _regex_match(s: Any) -> bool: return bool(s == i) return _regex_match # empty sequence, empty pattern: matches on a single empty sequence assert list(_seq_match([], [])) == [[]] # non empty sequence, empty pattern matches on an empty sequence assert list(_seq_match(["a", "b"], [])) == [[]] # non empty sequence, non empty pattern that does not apper: no match assert list(_seq_match(["a", "b"], [make_rm(1)])) == [] # empty sequence, non empty pattern: no match assert list(_seq_match([], [make_rm(1)])) == [] # sequence shorter than pattern: no match assert list(_seq_match(["a"], [make_rm(1), make_rm(2)])) == [] # seq = pat assert list(_seq_match([1], [make_rm(1)])) == [[0]] assert list(_seq_match([1, 2, 3], [make_rm(1)])) == [[0]] assert list(_seq_match([1, 2, 3], [make_rm(2)])) == [[1]] assert list(_seq_match([1, 2, 3], [make_rm(3)])) == [[2]] assert list(_seq_match([1, 2, "a"], [make_rm(1), make_rm(2)])) == [[0, 1]] assert list(_seq_match([1, "a", 3], [make_rm(1), _identity, make_rm(3)])) == [ [0, 2] ] assert list(_seq_match(["a", 2, 3], [make_rm(2), make_rm(3)])) == [[1, 2]] # starts with non regex assert list(_seq_match([1, 2], [_identity, make_rm(1), make_rm(2)])) == [] assert list(_seq_match(["a", 1, 2], [_identity, make_rm(1), make_rm(2)])) == [ [1, 2] ] # ends with non regex assert list(_seq_match([1, 2], [make_rm(1), make_rm(2), _identity])) == [] assert list(_seq_match([1, 2, "a"], [make_rm(1), make_rm(2), _identity])) == [ [0, 1] ] # repeated pattern assert list(_seq_match([1, 2, 1, 2, 2], [make_rm(1), make_rm(2)])) == [ [0, 1], [0, 3], [0, 4], [2, 3], [2, 4], ] assert list(_seq_match([1, 2, 1, 2, 2], [make_rm(1), _identity, make_rm(2)])) == [ [0, 3], [0, 4], [2, 4], ] assert list(_seq_match([1, 2, 1, 2, 2], [_identity, make_rm(1), make_rm(2)])) == [ [2, 3], [2, 4], ] assert list(_seq_match([1, 2, 1, 2, 2], [make_rm(1), make_rm(2), _identity])) == [ [0, 1], [0, 3], [2, 3], ] assert ( list( _seq_match( [1, 2, 1, 2, 2], [_identity, make_rm(1), _identity, make_rm(2), _identity], ) ) == [] ) assert list( _seq_match( [1, 2, 1, 2, 2, 3], [_identity, make_rm(1), _identity, make_rm(2), _identity], ) ) == [[2, 4]] def _identity(x: Any) -> bool: return True ================================================ FILE: tests/test_regressions.py ================================================ """This file contains regression tests for commonly parsed time expressions""" import ctparse from datetime import datetime def test_military_time(): result = ctparse.ctparse("3 March 2020", ts=datetime(2020, 2, 25)) assert result assert str(result.resolution) == "2020-03-03 X:X (X/X)" def test_parse_years_ahead(): result = ctparse.ctparse("3 March 2023", ts=datetime(2020, 2, 25)) assert result assert str(result.resolution) == "2023-03-03 X:X (X/X)" ================================================ FILE: tests/test_rule.py ================================================ from unittest import TestCase import regex from ctparse.types import RegexMatch, Artifact from ctparse.rule import dimension, predicate, regex_match, rule class TestClassA(Artifact): predA = 1 class TestClassB(Artifact): pass class TestRule(TestCase): def test_empty_regex_match_not_allowed(self): with self.assertRaises(ValueError): rule(r"") with self.assertRaises(ValueError): rule(r"[a-z]*") self.assertIsNotNone( rule( r"This long string must not match as this expression " "will be part of the system unless ctparse is reloaded" ) ) def test_consecutive_regex_not_allowed(self): with self.assertRaises(ValueError): rule(r"one", r"two") def test_regex_match(self): m = next(regex.finditer("(?Px)", "x")) r = RegexMatch(1, m) self.assertTrue(regex_match(1)(r)) self.assertFalse(regex_match(1)(TestClassA())) def test_dimension(self): self.assertTrue(dimension(TestClassA)(TestClassA())) self.assertFalse(dimension(TestClassA)(TestClassB())) def test_predicate(self): self.assertTrue(predicate("predA")(TestClassA())) self.assertFalse(predicate("predA")(TestClassB())) ================================================ FILE: tests/test_scorer.py ================================================ import datetime import random import bz2 import pickle from ctparse.nb_scorer import NaiveBayesScorer, train_naive_bayes, save_naive_bayes from ctparse.partial_parse import PartialParse from ctparse.scorer import DummyScorer, RandomScorer from ctparse.count_vectorizer import CountVectorizer from ctparse.nb_estimator import MultinomialNaiveBayes from ctparse.pipeline import CTParsePipeline from ctparse.types import Interval, Time def test_dummy(): scorer = DummyScorer() pp = PartialParse((Time(), Interval()), ("rule1", "rule2")) assert scorer.score("a", datetime.datetime(2019, 1, 1), pp) == 0.0 assert scorer.score_final("a", datetime.datetime(2019, 1, 1), pp, pp.prod[0]) == 0.0 def test_random(): rng = random.Random(42) scorer = RandomScorer(rng) pp = PartialParse((Time(), Interval()), ("rule1", "rule2")) assert 0.0 <= scorer.score("a", datetime.datetime(2019, 1, 1), pp) <= 1.0 assert ( 0.0 <= scorer.score_final("a", datetime.datetime(2019, 1, 1), pp, pp.prod[1]) <= 1.0 ) def test_nbscorer(): # We only test that it runs just fine X = [("a", "b"), ("a",), ("b"), ("a", "b", "a", "b")] y = [False, True, True, False] model = train_naive_bayes(X, y) scorer = NaiveBayesScorer(model) pp = PartialParse((Time(), Interval()), ("rule1", "rule2")) pp.prod[0].mstart = 0 pp.prod[1].mend = 1 pp.prod[0].mend = 1 pp.prod[1].mend = 2 assert 0.0 <= scorer.score("ab", datetime.datetime(2019, 1, 1), pp) <= 1.0 assert ( 0.0 <= scorer.score_final("ab", datetime.datetime(2019, 1, 1), pp, pp.prod[1]) <= 1.0 ) def test_naive_bayes_from_file(tmp_path): nb = NaiveBayesScorer( CTParsePipeline(CountVectorizer((1, 1)), MultinomialNaiveBayes()) ) path = tmp_path / "model.pkl" with bz2.open(path, "w") as f: pickle.dump(nb, f) nb = NaiveBayesScorer.from_model_file(path) assert nb def test_save_naive_bayes(tmp_path): path = tmp_path / "model.pkl" model = CTParsePipeline(CountVectorizer((1, 1)), MultinomialNaiveBayes()) save_naive_bayes(model, path) ================================================ FILE: tests/test_time_rules.py ================================================ from unittest import TestCase from ctparse.types import Time from ctparse.time.rules import ( ruleDateDate, ruleDOMDate, ruleDateTimeDateTime, ruleDOYDate, ruleQuarterBeforeHH, ruleQuarterAfterHH, ) class TestRules(TestCase): def test_ruleDateDate(self): t1 = Time(year=2017) t2 = Time(year=2015) self.assertIsNone(ruleDateDate(None, t1, None, t2)) t1 = Time(year=2017, month=12) t2 = Time(year=2017, month=11) self.assertIsNone(ruleDateDate(None, t1, None, t2)) t1 = Time(year=2017, month=12, day=31) t2 = Time(year=2017, month=12, day=30) self.assertIsNone(ruleDateDate(None, t1, None, t2)) t1 = Time(year=2017, month=12, day=31) t2 = Time(year=2017, month=12, day=31) self.assertIsNone(ruleDateDate(None, t1, None, t2)) t1 = Time(year=2017, month=12, day=30) t2 = Time(year=2017, month=12, day=31) self.assertIsNotNone(ruleDateDate(None, t1, None, t2)) def test_ruleDOMDate(self): t1 = Time(day=30) t2 = Time(year=2015, month=1, day=29) self.assertIsNone(ruleDOMDate(None, t1, None, t2)) t1 = Time(day=30) t2 = Time(year=2015, month=1, day=30) self.assertIsNone(ruleDOMDate(None, t1, None, t2)) t1 = Time(day=29) t2 = Time(year=2015, month=1, day=30) self.assertIsNotNone(ruleDOMDate(None, t1, None, t2)) def test_ruleDateTimeDateTime(self): t1 = Time(year=2017, month=4, day=12, hour=12, minute=30) t2 = Time(year=2016, month=4, day=12, hour=12, minute=30) self.assertIsNone(ruleDateTimeDateTime(None, t1, None, t2)) t1 = Time(year=2017, month=4, day=12, hour=12, minute=30) t2 = Time(year=2017, month=3, day=12, hour=12, minute=30) self.assertIsNone(ruleDateTimeDateTime(None, t1, None, t2)) t1 = Time(year=2017, month=4, day=12, hour=12, minute=30) t2 = Time(year=2017, month=4, day=11, hour=12, minute=30) self.assertIsNone(ruleDateTimeDateTime(None, t1, None, t2)) t1 = Time(year=2017, month=4, day=12, hour=12, minute=30) t2 = Time(year=2017, month=4, day=12, hour=11, minute=30) self.assertIsNone(ruleDateTimeDateTime(None, t1, None, t2)) t1 = Time(year=2017, month=4, day=12, hour=12, minute=30) t2 = Time(year=2017, month=4, day=12, hour=12, minute=29) self.assertIsNone(ruleDateTimeDateTime(None, t1, None, t2)) t1 = Time(year=2017, month=4, day=12, hour=12, minute=30) t2 = Time(year=2017, month=4, day=12, hour=12, minute=30) self.assertIsNone(ruleDateTimeDateTime(None, t1, None, t2)) t1 = Time(year=2017, month=4, day=12, hour=12, minute=30) t2 = Time(year=2017, month=4, day=12, hour=12, minute=31) self.assertIsNotNone(ruleDateTimeDateTime(None, t1, None, t2)) def test_ruleDOYDate(self): t1 = Time(month=4, day=12) t2 = Time(year=2017, month=4, day=12) self.assertIsNone(ruleDOYDate(None, t1, None, t2)) t1 = Time(month=4, day=12) t2 = Time(year=2017, month=4, day=13) self.assertIsNotNone(ruleDOYDate(None, t1, None, t2)) def test_ruleQuarterBeforeHH(self): t1 = Time(hour=12, minute=1) self.assertIsNone(ruleQuarterBeforeHH(None, None, t1)) def test_ruleQuarterAferHH(self): t1 = Time(hour=12, minute=1) self.assertIsNone(ruleQuarterAfterHH(None, None, t1)) ================================================ FILE: tests/test_timers.py ================================================ from ctparse.timers import timeout, CTParseTimeoutError, timeit from unittest import TestCase import time class TimersTest(TestCase): def test_timeout(self): t_fun = timeout(0.5) with self.assertRaises(CTParseTimeoutError): time.sleep(1.0) t_fun() t_fun = timeout(0) t_fun() # all good def test_timeit(self): def fun(x): return x * x result, elapsed = timeit(fun)(3) self.assertEqual(result, 9) self.assertIsInstance(elapsed, float) ================================================ FILE: tests/test_types.py ================================================ from unittest import TestCase import regex from datetime import datetime from ctparse.types import Artifact, RegexMatch, Time, Interval class TestArtifact(TestCase): def test_init(self): a = Artifact() self.assertEqual(a.mstart, 0) self.assertEqual(a.mend, 0) self.assertEqual(len(a), 0) self.assertTrue(a) def test_eq(self): a = Artifact() b = Artifact() self.assertEqual(a, b) a = Time(2017, 12, 12, 12, 12, 4, "morning") b = Time(2017, 12, 12, 12, 12, 4, "morning") self.assertEqual(a, b) a = Time(2017, 12, 12, 12, 12, 4, "morning") b = Time(2017, 12, 12, 12, 12, 3, "morning") self.assertNotEqual(a, b) a = Time() b = Interval() self.assertNotEqual(a, b) def test_update_span(self): a1 = Artifact() a2 = Artifact() a3 = Artifact() a2.mstart = 10 a3.mend = 100 a1.update_span(a2, a3) self.assertEqual(a1.mstart, 10) self.assertEqual(a1.mend, 100) self.assertEqual(len(a1), 90) def test_repr(self): a = Artifact() self.assertEqual(repr(a), "Artifact[0-0]{}") def test_nb_str(self): a = Artifact() self.assertEqual(a.nb_str(), "Artifact[]{}") class TestRegexMatch(TestCase): def test_init(self): m = next(regex.finditer(r"(?Pmatch me)", "xxx match me xxx")) r = RegexMatch(1, m) self.assertEqual(r.mstart, 4) self.assertEqual(r.mend, 12) self.assertEqual(len(r), 8) self.assertEqual(r._text, "match me") self.assertEqual(repr(r), "RegexMatch[4-12]{1:match me}") self.assertEqual(r.nb_str(), "RegexMatch[]{1:match me}") class TestTime(TestCase): def test_init(self): self.assertIsNotNone(Time()) def test_isDOY(self): self.assertTrue(Time(month=1, day=1).isDOY) self.assertFalse(Time(year=1).isDOY) def test_isDOM(self): self.assertTrue(Time(day=1).isDOM) self.assertFalse(Time(month=1).isDOM) def test_isHour(self): self.assertTrue(Time(hour=1).isHour) self.assertFalse(Time(hour=1, minute=1).isHour) self.assertFalse(Time(hour=1, month=1).isHour) def test_isDOW(self): self.assertTrue(Time(DOW=1).isDOW) self.assertFalse(Time().isDOW) def test_isMonth(self): self.assertTrue(Time(month=1).isMonth) self.assertFalse(Time(day=1).isMonth) self.assertFalse(Time(year=1).isMonth) def test_isPOD(self): self.assertTrue(Time(POD="morning").isPOD) self.assertFalse(Time(day=1).isPOD) self.assertFalse(Time(year=1).isPOD) def test_isTOD(self): self.assertTrue(Time(hour=1, minute=1).isTOD) self.assertTrue(Time(hour=1).isTOD) self.assertFalse(Time(minute=1).isTOD) self.assertFalse(Time().isTOD) def test_isDate(self): self.assertTrue(Time(year=1, month=1, day=1).isDate) self.assertFalse(Time(year=1, month=1).isDate) self.assertFalse(Time(year=1, day=1).isDate) self.assertFalse(Time(day=1, month=1).isDate) self.assertFalse(Time(year=1, month=1, day=1, hour=1).isDate) def test_isDateTime(self): self.assertTrue(Time(year=1, month=1, day=1, hour=1).isDateTime) self.assertFalse(Time(year=1, month=1, day=1).isDateTime) def test_isYear(self): self.assertTrue(Time(year=1).isYear) self.assertFalse(Time(year=1, month=1).isYear) def test_hasDate(self): self.assertTrue(Time(year=1, month=1, day=1).hasDate) self.assertFalse(Time(year=1, month=1).isDate) self.assertFalse(Time(year=1, day=1).isDate) self.assertFalse(Time(day=1, month=1).isDate) self.assertTrue(Time(year=1, month=1, day=1, hour=1).hasDate) def test_hasTime(self): self.assertTrue(Time(hour=1, minute=1, day=1, month=1, year=1).hasTime) self.assertTrue(Time(hour=1, day=1, month=1, year=1).hasTime) self.assertFalse(Time(day=1, month=1, year=1).hasTime) def test_hasPOD(self): self.assertTrue(Time(POD="pod").hasPOD) self.assertFalse(Time(day=1, month=1, year=1).hasPOD) def test_repr(self): t = Time(year=1, month=1, day=1, hour=1, minute=1, DOW=1, POD="pod") self.assertEqual(repr(t), "Time[0-0]{0001-01-01 01:01 (1/pod)}") def test_from_str(self): # Complete time t = Time(year=1, month=1, day=1, hour=1, minute=1, DOW=1, POD="pod") t_str = str(t) t_back = Time.from_str(t_str) self.assertEqual(t, t_back) # Incomplete time t = Time(year=None, month=1, day=1, hour=None, minute=None, DOW=None, POD="pod") t_str = str(t) t_back = Time.from_str(t_str) self.assertEqual(t, t_back) # Zeroed time t = Time() t_str = str(t) t_back = Time.from_str(t_str) self.assertEqual(t, t_back) # Mistake with self.assertRaises(ValueError): Time.from_str("0001-01-01 01-01 (1/pod)") def test_start(self): t = Time() self.assertEqual(t.start, Time(hour=0, minute=0)) t = Time(year=2012, month=1, day=1) self.assertEqual(t.start, Time(2012, 1, 1, 0, 0)) t = Time(year=2012, month=1, day=1, hour=12) self.assertEqual(t.start, Time(2012, 1, 1, 12, 0)) t = Time(year=2012, month=1, day=1, hour=12, minute=20) self.assertEqual(t.start, Time(2012, 1, 1, 12, 20)) t = Time(year=2012, month=1, day=1, POD="last") self.assertEqual(t.start, Time(2012, 1, 1, 23, 00)) def test_end(self): t = Time() self.assertEqual(t.end, Time(hour=23, minute=59)) t = Time(year=2012, month=1, day=1) self.assertEqual(t.end, Time(2012, 1, 1, 23, 59)) t = Time(year=2012, month=1, day=1, hour=12) self.assertEqual(t.end, Time(2012, 1, 1, 12, 59)) t = Time(year=2012, month=1, day=1, hour=12, minute=20) self.assertEqual(t.end, Time(2012, 1, 1, 12, 20)) t = Time(year=2012, month=1, day=1, POD="last") self.assertEqual(t.end, Time(2012, 1, 1, 23, 59)) def test_dt(self): t = Time(2015, 12, 12, 12, 12) self.assertEqual(t.dt, datetime(2015, 12, 12, 12, 12)) t = Time(2015, 12, 12, 12) self.assertEqual(t.dt, datetime(2015, 12, 12, 12)) t = Time(2015, 12, 12) self.assertEqual(t.dt, datetime(2015, 12, 12)) with self.assertRaises(ValueError): t = Time(year=2012, month=12, hour=12, minute=12) t.dt class TestInterval(TestCase): def test_init(self): self.assertIsNotNone(Interval()) def test_isTimeInterval(self): self.assertTrue(Interval(Time(hour=1), Time(hour=2)).isTimeInterval) def test_repr(self): self.assertEqual( repr(Interval(Time(), Time())), "Interval[0-0]{X-X-X X:X (X/X) - X-X-X X:X (X/X)}", ) def test_from_str(self): # Complete interval t1 = Time(year=1, month=1, day=1, hour=1, minute=1, DOW=1, POD="pod") t2 = Time(year=2, month=1, day=1, hour=1, minute=1, DOW=1, POD="pod") interval = Interval(t1, t2) i_back = Interval.from_str(str(interval)) self.assertEqual(interval, i_back) # Incomplete interval interval = Interval(None, t2) i_back = Interval.from_str(str(interval)) self.assertEqual(interval, i_back) # Zeroed interval interval = Interval() i_back = Interval.from_str(str(interval)) self.assertEqual(interval, i_back) # Mistake with self.assertRaises(ValueError): Interval.from_str("X-X-X X: X(X/X) -X-X-X X: X(X/X)") def test_start(self): i = Interval(Time(2013, 1, 1), Time(2013, 1, 2)) self.assertEqual(i.start, Time(2013, 1, 1, 0, 0)) i = Interval(Time(2013, 1, 1), None) self.assertEqual(i.start, Time(2013, 1, 1, 0, 0)) i = Interval(None, Time(2013, 1, 2)) self.assertIsNone(i.start) def test_end(self): i = Interval(Time(2013, 1, 1), Time(2013, 1, 2)) self.assertEqual(i.end, Time(2013, 1, 2, 23, 59)) i = Interval(None, Time(2013, 1, 2)) self.assertEqual(i.end, Time(2013, 1, 2, 23, 59)) i = Interval(Time(2013, 1, 1), None) self.assertIsNone(i.end) ================================================ FILE: tox.ini ================================================ [tox] envlist = py36, py37, py38 [travis] python = 3.8: py38 3.7: py37 3.6: py36 [testenv] whitelist_externals= make setenv = PYTHONPATH = {toxinidir} deps = -r{toxinidir}/requirements_dev.txt commands = pip install -U pip make lint py.test --cov=ctparse --basetemp={envtmpdir}