JSON Tagger

Med detta API kan du hitta ordklass (substantiv, verb, adjektiv, ...) och grundform (programmet -> program) för ord i svensk text.

Skriv in en svensk mening:

Läs mer om API:et

Om API:et

API:et bygger på UDPipe, ett projekt vid Charles University i Tjeckien. UDPipe gör allt grovarbete:

JSON Tagger (detta projekt) lägger till:

Vem ligger bakom detta?

Vill du använda API:et?

Göra anrop

API:et kräver att du skickar en POST-request över HTTP. Det går att göra i alla plattformar och programmeringsspråk, men här är några av de vanligaste:

cURL

cURL finns förinstallerat på alla Mac och Linux-datorer. Starta en terminal och kör:

curl https://json-tagger.com/tag -d "Fördomen har alltid sin rot i vardagslivet - Olof Palme"

Python 3

Installera först requests genom att skriva "pip install requests".

import requests
r = requests.post("https://json-tagger.com/tag", data="Fördomen har alltid sin rot i vardagslivet - Olof Palme".encode("utf-8"))
print(r.json())

Python 2

Installera först requests genom att skriva "pip install requests".

# -*- coding: utf-8 -*-
import requests
r = requests.post("https://json-tagger.com/tag", data=u"Fördomen har alltid sin rot i vardagslivet - Olof Palme".encode("utf-8"))
print r.json()

Ruby

Installera först http.rb genom att skriva "gem install http".

require 'http'
r = HTTP.post("https://json-tagger.com/tag", :body => "Fördomen har alltid sin rot i vardagslivet - Olof Palme")
puts r.to_s

Node.js

Installera först request genom att skriva "npm install -g request".

var request = require('request');
request.post({url: 'https://json-tagger.com/tag', body: "Fördomen har alltid sin rot i vardagslivet - Olof Palme"}, function (error, response, body) {
    console.log(body)
})

Java

Spara koden nedan i en fil som heter JsonTagger.java, och kompilera den med "javac JsonTagger.java". Sen kan du köra den med "java JsonTagger".

import java.net.*;
import java.io.*;

public class JsonTagger {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://json-tagger.com/tag");
        String text = "Fördomen har alltid sin rot i vardagslivet - Olof Palme";

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);

        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
        wr.write(text.getBytes());

        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String output;
        while ((output = reader.readLine()) != null) {
            System.out.println(output);
        }
    }
}

Svaret från API:et

API:et returnerar JSON, ett format som det finns bibliotek för att läsa i alla programmeringsspråk.

{
    "sentences": [
        [
            {
                "word_form": "Fördomen",
                "lemma": "Fördom",
                "ud_tags": {
                    "pos_tag": "NOUN",
                    "features": {
                        "Case": "Nom",
                        "Definite": "Def",
                        "Gender": "Com",
                        "Number": "Sing"
                    }
                },
                "sentence_id": 0,
                "word_id": 0
            },
            {
                "word_form": "har",
                "lemma": "ha",
                "ud_tags": {
                    "pos_tag": "VERB",
                    "features": {
                        "Mood": "Ind",
                        "Tense": "Pres",
                        "VerbForm": "Fin",
                        "Voice": "Act"
                    }
                },
                "sentence_id": 0,
                "word_id": 1
            },
            {
                "word_form": "alltid",
                "lemma": "alltid",
                "ud_tags": {
                    "pos_tag": "ADV",
                    "features": null
                },
                "sentence_id": 0,
                "word_id": 2
            },
            {
                "word_form": "sin",
                "lemma": "sig",
                "ud_tags": {
                    "pos_tag": "DET",
                    "features": {
                        "Definite": "Def",
                        "Gender": "Com",
                        "Number": "Sing",
                        "Poss": "Yes",
                        "PronType": "Prs"
                    }
                },
                "sentence_id": 0,
                "word_id": 3
            },
            {
                "word_form": "rot",
                "lemma": "rot",
                "ud_tags": {
                    "pos_tag": "NOUN",
                    "features": {
                        "Case": "Nom",
                        "Definite": "Ind",
                        "Gender": "Com",
                        "Number": "Sing"
                    }
                },
                "sentence_id": 0,
                "word_id": 4
            },
            {
                "word_form": "i",
                "lemma": "i",
                "ud_tags": {
                    "pos_tag": "ADP",
                    "features": null
                },
                "sentence_id": 0,
                "word_id": 5
            },
            {
                "word_form": "vardagslivet",
                "lemma": "vardagsliv",
                "ud_tags": {
                    "pos_tag": "NOUN",
                    "features": {
                        "Case": "Nom",
                        "Definite": "Def",
                        "Gender": "Neut",
                        "Number": "Sing"
                    }
                },
                "sentence_id": 0,
                "word_id": 6
            },
            {
                "word_form": "-",
                "lemma": "-",
                "ud_tags": {
                    "pos_tag": "PUNCT",
                    "features": null
                },
                "sentence_id": 0,
                "word_id": 7
            },
            {
                "word_form": "Olof",
                "lemma": "Olof",
                "ud_tags": {
                    "pos_tag": "PROPN",
                    "features": {
                        "Case": "Nom"
                    }
                },
                "sentence_id": 0,
                "word_id": 8
            },
            {
                "word_form": "Palme",
                "lemma": "Palme",
                "ud_tags": {
                    "pos_tag": "PROPN",
                    "features": {
                        "Case": "Nom"
                    }
                },
                "sentence_id": 0,
                "word_id": 9
            }
        ]
    ]
}

Förklaring av svarsformatet

sentences
En lista med meningar, som i sin tur består av ord. Varje ord har följande egenskaper:
word_form
Ordet som det skickades in till API:et, oförändrat.
Exempel: "Fördomen"
lemma
Grundformen för detta ord.
Exempel: "fördom"
ud_tags
Här finns ordklasstaggar för detta ord i Universal Dependency (UD)-format. Detta format fungerar för fler språk än svenska så det kan vara användbart om du ska skicka vidare resultatet till ett annat system.
pos_tag
Ordklassen för detta ord, som förkortningar med tre eller fyra bokstäver.
Exempel: "NOUN"
features
Mer detaljerade egenskaper för just den här ordklassen, i form av nyckel/värde-par. Om det finns flera värden skiljs dom med ett ","-tecken.
Exempel: {
    "Case": "Nom",
    "Definite": "Def",
    "Gender": "Com",
    "Number": "Sing"
}
sentence_id
Ett ID som beskriver i vilken mening i originaltexten som detta ord hittades. Första meningen är noll.
Exempel: 0
word_id
Ett ID som beskriver var i meningen detta ord hittades. Första ordet är noll.
Exempel: 0

Förklaring av UD-ordklasstaggarna

Förkortningarna i pos_tag motsvarar alltså ordklasser. Ordklasserna (både dessa och de mer specifika nedan) kommer från ett projekt som heter Universal Dependencies. Taggarna är speciellt framtagna för att fungera på flera olika språk.

Kod Ordklass Exempel
ADJAdjektivglad
ADPAdpositionhos
ADVAdverbinte
AUXHjälpverbskulle
CCONJSamordnande konjunktionoch
DETDeterminativa pronomenden
INTJInterjektionusch!
NOUNSubstantivpudding
NUMRäkneord123
PARTPartikelju
PRONPronomenvem
PROPNEgennamnCarl
PUNCTSkiljetecken. (punkt)
SCONJSubjunktionatt
SYMSymbol
VERBVerbkasta
XÖvrigt

Ordklasserna ovan är relativt grovkorniga. För att gå mer på djupet finns även specifika böjningsformer i features. Dessa finns dokumenterade på engelska på Universial Dependencies feature-referens.

Källkod