Tools for Downloading

This page contains links to some of the tools created in the various projects within the Human Language Technology Group at KTH CSC. There is an article describing many of these resources.

All tools distributed with sourcecode are distributed under the GNU General Public Licence. More information on the GNU project is available here. The code comes with no warranty. Use at own risk.

Tools have moved

The collection of tools has moved to a new location.

The old tools list

Stava: A Spell Checker and Morphological Analyzer for Swedish

See the new Stava info at the new tools page.

Stava is a fast and robust spell checker and spelling corrector for Swedish. It can also analyze compounds, lemmatize and POS tag words without context. Stava has no explicit word list, instead it uses a probabilistic method based on a Bloom filter. For more information, we refer to the articles at the bottom of the Stava manual page. Note: All documentation is in Swedish.

The sourcecode for Stava is available here (last published July 25, 2016). Lexicon Bloom filters and some useful lists of common names etc. are available here.

If you have any questions, please contact Viggo Kann (

JavaSDM: A Java Package for Random Indexing

See the new JavaSDM info at the new tools page.

JavaSDM is a package for Random Indexing, a distributional model of lexical semantics, written in Java. It also contains an implementation of the Porter stemming algorithm and classes for handling connections with our Granska, Decompounder and StatServ servers.

The sourcecode for JavaSDM is available here and on-line documentation is available as JavaDoc. Additional information on how to run the random indexing package is available in a Readme file. Furthermore a Readmemore file explains how to use several of the classes in the JavaSDM package stand-alone; for example for decompounding, lemmatizing, tagging or for looking up term and/or document frequencies calculated over large Swedish corpora. A Java package containing a large number of Vector/Matrix similarity measures is available here, together with on-line documentation, also in JavaDoc.

If you have any questions, please contact Martin Hassel (

Stomp: A Part-of-Speech Tagger with a Different View

See the new Stomp info at the new tools page.

Stomp is a relatively language independent tagger which does not rely on n-grams of tags. Instead it tags a word by matching the longest sequence of words in training data and assigns the tag in the training data to the word. The different perspective of Stomp makes it useful in an ensemble of taggers.

The sourcecode for Stomp is available here (last published November 22, 2005). For more information, see this article. Note: In this implementation the handling of numerical values is very bad (all numerical values are expected by Stomp to have been replaced with the string "4711"). It should be quite straightforward to improve this handling, though.

If you have any questions, please contact Jonas Sjöbergh (

Compound Splitter:

See the new Compound Splitter info at the new tools page.

Compound Splitter is a tool for splitting compound words in Swedish.

The sourcecode for a server implementation of Compound Splitter is available here (Last published March 11, 2009). For more information, see this article. Compound Splitter is also a part of Stava, see above.

If you have any questions, please contact Jonas Sjöbergh (

Granska Tagger: A Part-of-Speech Tagger for Swedish

See the new Granska tagger info at the new tools page.

Granska Tagger is an efficient Hidden Markov Model part-of-speech tagger for Swedish. This is the same tagger used internally by the grammar checker Granska. It has a compound word analysis component for use on unknown words. It can also produce lemma information for the words that are tagged.

The sourcecode for Granska Tagger is available here (last published March 10, 2009) and a version for amd64 (last published November 5, 2010, thanks to Robert Östling). For more information, see the following article. To be useful Granska Tagger requires various lexicon files which are available here.

Granska: A grammar checker for Swedish

See the new Granska info at the new tools page.

Granska is an efficient rule based grammar checker for Swedish, see the Granska web page.

The sourcecode for Granska is available in the Git repository under the branch willes. It can be compiled both under Solaris and Linux.

Description of Granska's rule language (in Swedish).

If you have any questions, please contact Viggo Kann (

Inflector: A Simple Word Inflector for Swedish

See the new Inflector info at the new tools page.

Inflector performs inflection of Swedish words. It needs Granska Tagger to compile properly. This version is very simple and works only in interactive mode. It should, however, be quite straightforward to adapt it to your own needs.

The sourcecode for Inflector is available here (Last published December 30, 2005). To be useful Inflector requires the same lexicon files as Granska Tagger.

Unfortunately we will not be able to answer any questions regarding this tool.

AutoEval and Missplel: Two Generic Tools for Automatic Evaluation

See the new AutoEval info and the new Missplel infoat the new tools page.

AutoEval is a tool that greatly simplifies the construction of (NLP system) evaluations. Missplel is a tool that introduces human-like spelling errors into text. For a discussion, we refer to an article on AutoEval and Missplel.

The source code for AutoEval and Missplel (last published November 22, 2005). The code may not be used for commercial purposes. The source code is best compiled with gcc/g++ 3.4.4 and requires Xerces, Boost and zlib. There is also a graphical user interface available that requires QT. Also, you should take a look at the lexicon files (e.g. the file cwtl) used by Granska Tagger if you don't have access to your own tagged corpus (this will only be useful for producing spelling errors in Swedish, however).

If you have any questions, please contact Johnny Bigert (

Infomat - A Vector Space Exploration Tool

See the new Infomat info at the new tools page.

Infomat is available here. Infomat is a Vector Space Visualization Tool. With it you can browse huge matrixes, such as those often used in Information Retrieval.

If you have any questions, please contact Magnus Rosell (

Server Tools

Many of the tools are vailable online, running on a server at KTH. There are several ways to access the tools, including a RESTful interface called Granska API and connecting to the servers directly unsing sockets.

Server tools (only described in Swedish)

Det finns tre grupper av servrar: servrar baserade på Granska, servrar för uppdelning av sammansatta ord och servrar för att hitta grammatiska fel med hjälp av maskininlärning (SnålGranska).

Denna text ger både intern information om servrarna och information om hur dom anropas utifrån. Teckenkoden för servrarna är ISO-8859-1 (Latin 1). Använd alltså inte UTF-8.

Samtliga servrar går på datorn


Det finns i huvudsak två typer av servrar baserade på Granska, en server för chunking (shallow parsing, frastaggning) och en för grammatikgranskning. Granska kan också ordklasstagga (POS-tagga, part-of-speech-tagga) text och generera böjningsformer för ord. Granskas servrar kraschar av oklara anledningar lite då och då. För att se till att Granska finns tillgänglig även efter sådana problem finns ett script som startar om Granska om det upptäcker att Granska har kraschat eller hängt sig.

Granska lyssnar för närvarande på portarna 6123 (grammatikgranskning), 6127 (chunking) och 6128 (grammatikgranskning).

För att anropa en Granskaserver skickar man text till på den port servern lyssnar på. Det vanligaste anropet är nyckelordet "TEXT", följt av mellanslag, följt av den text man vill ha granskad (chunkad) på en enda lång rad, följt av en ny rad med nyckelordet "ENDQ" följt av ett nyradstecken. Servern skickar tillbaka XML med resultatet av anropet.

telnet 6123
TEXT En liten bil åker där borta.

Man kan även skicka kommandot "INFLECT", följt av mellanslag, följt av ett ord, följt av en ny rad med nyckelordet "ENDQ". Då får man tillbaka det ordets möjliga böjningsformer.

Granskaserverna tar för närvarande inte emot texter längre än 10000 tecken (kan ställas om vid kompilering).

Uppdelning av sammansättningar

(För närvarande inte i drift. Ladda ner Stava istället.) Det finns två varianter av server för sammansättningar, en som ger samtliga möjliga uppdelningar och en som ger den mest troliga uppdelningen.

För närvarande finns en server på port 6140 som ger det troligaste förslaget och en server på port 6150 som ger samtliga möjliga förslag.

Servern anropas genom att skriva ord med mellanslag eller nyrad emellan dem (att klistra in vanlig löptext som denna fil fungerar också i allmänhet bra) och avsluta med nyckelordet "ENDQ" på en egen rad (följt av radmatning). De analyserade orden kommer tillbaka ett ord per rad med eventuella uppdelningsförslag på samma rad, separerade med TAB-tecken.


Det finns tre Snålgranskaservrar, en för kongruensfel, en för felaktigt särskrivna sammansättningar och en för ordföljdsfel.

För närvarande finns en server för felaktiga särskrivningar på port 6133, ordföljdsfel på port 6134 och kongruensfel på port 6135.

Servrarna anropas på följande sätt:

Text skickas till lämplig port, ett ord per rad med nyckelordet "ENDQ" ensamt på en rad på slutet.

Varje ord behöver dessutom annotation, varje kolumn (ord, och annotationskolumner) separeras med space.

För särskrivningar och ordföljdsfel skickas ordet självt och dess POS-tagg (med Granskas tagg-set).

För kongruensfel skickas ordet, taggen som den är minus information om genus, bestämd/obestämd form, singular/plural, och sedan kolumner med genus, singular/plural, bestämd form eller ej. Taggar där denna information inte finns eller är applicerbar har "-" i de fälten. Se filen /opt/snaalgranska/fejkgranska/web-interface/ för en mappning från Granska-tagg till den information servern vill ha.

För att använda servrarna behöver man alltså först POS-tagga texten med hjälp av Granska (eller någon annan tagger som använder samma tagg-set).

^ to Human Language Technology group.

Responsible for this page: Viggo Kann <>