Add GermEval 2014 NER dataset
State: closed | Author: stefan-it (CONTRIBUTOR)

Hi, 

this PR adds the GermEval 2014 NER dataset 😃

> The GermEval 2014 NER Shared Task builds on a new dataset with German Named Entity annotation [1] with the following properties:

> - The data was sampled from German Wikipedia and News Corpora as a collection of citations.
> - The dataset covers over 31,000 sentences corresponding to over 590,000 tokens.
> - The NER annotation uses the NoSta-D guidelines, which extend the Tübingen Treebank guidelines, using four main NER categories with sub-structure, and annotating embeddings among NEs such as [ORG FC Kickers [LOC Darmstadt]].

Dataset will be downloaded from the [official GermEval 2014 website](https://sites.google.com/site/germeval2014ner/data).

## Dataset format

Here's an example of the dataset format from the original dataset:

```tsv
# http://de.wikipedia.org/wiki/Manfred_Korfmann [2009-10-17]
1 Aufgrund O O
2 seiner O O
3 Initiative O O
4 fand O O
5 2001/2002 O O
6 in O O
7 Stuttgart B-LOC O
8 , O O
9 Braunschweig B-LOC O
10 und O O
11 Bonn B-LOC O
12 eine O O
13 große O O
14 und O O
15 publizistisch O O
16 vielbeachtete O O
17 Troia-Ausstellung B-LOCpart O
18 statt O O
19 , O O
20 „ O O
21 Troia B-OTH B-LOC
22 - I-OTH O
23 Traum I-OTH O
24 und I-OTH O
25 Wirklichkeit I-OTH O
26 “ O O
27 . O O
```

The sentence is encoded as one token per line (tab separated columns.

The first column contains either a `#`, which signals the source the sentence is cited from and the date it was retrieved, or the token number within the sentence.

The second column contains the token.

Column three and four contain the named entity (in IOB2 scheme).
Outer spans are encoded in the third column, embedded/nested spans in the fourth column.

## Features

I decided to keep most information from the dataset. That means the so called "source" information (where the sentences come from + date information) is also returned for each sentence in the feature vector.

For each sentence in the dataset, one feature vector (`nlp.Features` definition) will be returned:

| Feature | Example | Description
| ---- | ---- | -----------------
| `id` | `0` | Number (id) of current sentence
| `source` | `http://de.wikipedia.org/wiki/Manfred_Korfmann [2009-10-17]` | URL and retrieval date as string
| `tokens` | `["Schwartau", "sagte", ":"]` | List of tokens (strings) for a sentence
| `labels` | `["B-PER", "O", "O"]` | List of labels (outer span)
| `nested-labels` | `["O", "O", "O"]` | List of labels for nested span

## Example

The following command downloads the dataset from the official GermEval 2014 page and pre-processed it:

```bash
python nlp-cli test datasets/germeval_14 --all_configs
```

It then outputs the number for training, development and testset. The training set consists of 24,000 sentences, the development set of 2,200 and the test of 5,100 sentences.

Now it can be imported and used with `nlp`:

```python
import nlp

germeval = nlp.load_dataset("./datasets/germeval_14/germeval_14.py")
assert len(germeval["train"]) == 24000

# Show first sentence of training set:
germeval["train"][0]
```

Comments: Had really fun playing around with this new library :heart: 

That's awesome - thanks @stefan-it :-) 

Could you maybe rebase to master and check if all dummy data tests are fine. I should have included the local tests directly in the test suite so that all PRs are fully checked: #140 - sorry :D 

@patrickvonplaten Rebased it 😅

How can it test 🤔 I used:

```bash
RUN_SLOW=1 RUN_LOCAL=1 pytest tests/test_dataset_common.py::DatasetTest::test_load_real_dataset_local_germeval_14
# and
RUN_SLOW=1 RUN_LOCAL=1 pytest tests/test_dataset_common.py::DatasetTest::test_load_dataset_all_configs_local_germeval_14
```

and the tests still pass :)

Perfect, if these tests pass that's great - I'll merge the PR then :-) Was it very difficult to create the dummy data structure?