<commit_before># API

## Base url

Alle Abfragen werden via `GET` an den host `http://classifier.leimstaedtner.it/ajax.php` gesendet. Das Attribut `key` unterscheidet dann die gewünschte Grundmenge, `filter` dient zur Verfeinerung der Resultate.

**Beispiel-Url:**
`http://classifier.leimstaedtner.it/ajax.php?key=api:all&filter=Y2xhc3M9REVWfEhXLHN0YXJzPjM=`

## Key Attribute

### api:all

Gibt ungefiltert alle Datensätze aus.

### api:old

Gibt ungefiltert alle **alten** Datensätze aus, d.h. jene mit beschränkt vielen Features.

## api:unlabeled

Shortcut für api:class mit `class` = UNLABELED

### api:single

Gibt einen zufälligen klassifizierten Datensatz zurück.

### api:single-unlabeled
### api:single-unclassified

Gibt den nächsten unklassifizierten Datensatz zurück.

### api:to-reclassify

Gibt einen Datensatz zurück, der in der alten Datenmenge vorhanden ist, aber noch nicht in der neuen.

### api:equal

Gibt je Klasse gleich viele Datensätze zurück.

### api:count

Liefert die Anzahl der betroffenen Datensätzen.

### api:class

Ein Shortcut for api:all mit entsprechenden Class Filter. Anwendung:
`/?key=api:class&name=CLASSNAME`

### api:class-count

Kombination der obigen. Liefert die Anzahl der Samples pro Klasse zurück.

### api:tagger-class-count

Liefert die Anzahl der Samples pro Klasse zurück, beschränkt auf einen angegebenen `tagger`.

### api:generate_sample_url

Gibt die API-Url eines **zufälligen** Github repositorys  zurück.

`client_id` und `client_secret` können übergeben werden, ansonsten werden gespeicherte credentials verwendet.

### api:generate_sample

Diese Funktion ist vom Parameter `api-url` abhängig. Für das angegebene repository wird damit ein ungelabelter Datenbankeitnrag bzw. Klassifikationsvektor generiert und im JSON Format ausgegeben. Ist `api-url` leer oder nicht gesetzt, wird ein zufälliges sample generiert. Wird ein zweiter, auch optionaler, Paramter `class` übergeben, wird das sample direkt klassifiziert, ansonsten erhält es die Klasse `UNLABELED`.

`client_id` und `client_secret` können übergeben werden, ansonsten werden gespeicherte credentials verwendet.

## Filtern

Das `filter` Attribut kann, wenn gesetzt, mit einem **base 64 encodierten** Array der Form [attribut1=wert1,...] gefüllt werden. Neben dem Operator `=` können, wenn sinnvoll, auch die Operatoren `<, <=, >, >=` verwendet werden.
Werden verschiedene Attributfilter mit einem `,` getrennt, resultiert das in eine **AND** Verknüpfung. Will man hingegen eine **OR** Verknüfung, reicht es ein `|` Symbol anstelle des Kommas zu verwenden. (OR bindet hier stärker(!) als AND).

**Beispiel**
```javascript 
btoa("class=DEV|HW,stars>3");
```
erzeugt den Filter-Wert der obigen Beispiel-Url. Das SQL Äquivalent ist:

```sql<commit_msg>Update API.md<commit_after># API

## Base url

Alle Abfragen werden via `GET` an den host `http://classifier.leimstaedtner.it/ajax.php` gesendet. Das Attribut `key` unterscheidet dann die gewünschte Grundmenge, `filter` dient zur Verfeinerung der Resultate.

**Beispiel-Url:**
`http://classifier.leimstaedtner.it/ajax.php?key=api:all&filter=Y2xhc3M9REVWfEhXLHN0YXJzPjM=`

### ?key=api:train

Gibt alle Datensätze der Tabelle train aus.

### ?key=api:test

Gibt alle Datensätze der Tabelle test aus.

### ?key=api:unlabeled

Gibt alle Datensätze der Tabelle unlabeled aus.

### ?key=api:to_classify

Gibt alle Datensätze der Tabelle train aus.

## Weitere Funktionen

_Für viele der folgenden Funktionen kann ein Attribut `table` {train, test, unlabeled, to_classify} bzw. das unten erläuterte `filter` Attribut gesetzt werden.

### ?key=api:single

Gibt einen zufälligen klassifizierten Datensatz zurück. (Attribute: `table`)

### ?key=api:equal

Gibt je Klasse gleich viele Datensätze zurück. (Attribute: `table`)

### ?key=api:class

Ein Shortcut for api:all mit entsprechenden Class Filter. (Attribute: `table`, `name`). Anwendung:
`/?key=api:class&name=CLASSNAME`

### ?key=api:count

Liefert die Anzahl der betroffenen Datensätzen.(Attribute: `table`, `filter`)

### ?key=api:class-count

Kombination der obigen. Liefert die Anzahl der Samples pro Klasse zurück.(Attribute: `table`, `filter`)

### ?key=api:tagger-class-count

Liefert die Anzahl der Samples pro Klasse zurück, beschränkt auf einen angegebenen `tagger`. (Attribute: `table`, `tagger`)

### ?key=api:generate_sample_url

Gibt die API-Url eines **zufälligen** Github repositorys  zurück.

`client_id` und `client_secret` können übergeben werden, ansonsten werden gespeicherte credentials verwendet.

### ?key=api:generate_sample

Diese Funktion ist vom Parameter `api-url` abhängig. Für das angegebene repository wird damit ein ungelabelter Datenbankeitnrag bzw. Klassifikationsvektor generiert und im JSON Format ausgegeben. Ist `api-url` leer oder nicht gesetzt, wird ein zufälliges sample generiert. Wird ein zweiter, auch optionaler, Paramter `class` übergeben, wird das sample direkt klassifiziert, ansonsten erhält es die Klasse `UNLABELED`.

`client_id` und `client_secret` können übergeben werden, ansonsten werden gespeicherte credentials verwendet.

## Deprecated

### ?key=api:old

Gibt alle **alten** Datensätze aus, d.h. jene mit beschränkt vielen Features.

### ?key=api:to-reclassify

Gibt einen Datensatz zurück, der in der alten Datenmenge vorhanden ist, aber noch nicht in der neuen.


## Filtern

Das `filter` Attribut kann, wenn gesetzt, mit einem **base 64 encodierten** Array der Form [attribut1=wert1,...] gefüllt werden. Neben dem Operator `=` können, wenn sinnvoll, auch die Operatoren `<, <=, >, >=` verwendet werden.
Werden verschiedene Attributfilter mit einem `,` getrennt, resultiert das in eine **AND** Verknüpfung. Will man hingegen eine **OR** Verknüfung, reicht es ein `|` Symbol anstelle des Kommas zu verwenden. (OR bindet hier stärker(!) als AND).

**Beispiel**
```javascript 
btoa("class=DEV|HW,stars>3");
```
erzeugt den Filter-Wert der obigen Beispiel-Url. Das SQL Äquivalent ist:

```sql
{'fraction_non_alphanumeric': 0.10358699296010727, 'fraction_numerical': 0.0030170968823332216, 'mean_word_length': 5.57883131201764, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1959335', 'n_tokens_mistral': 2068, 'n_tokens_neox': 2122, 'n_words': 656}