Nlpt

Natural Language Processing Toolkit written in Go

View the Project on GitHub jbowles/nlpt

Natural Language Processing Toolkit

Written in Go.

Progress has been slow, but I am fully comitted to NLPT; even if there are silent spells. Some of my work on NLP and Go cannot be open-sourced for given periods of time, and now I have chance to be working in a more open-source friendly capacity!

I am a linguist by trade and so NLP is always something I want to write code for. I now have the chance to work on Go professionally in a more open-source friendly capacity and this bodes well for this project.

siw is the Simple Words project and is the place I've playing out some basic ideas in shorter form. If you don't see any progress on nlpt, you can be sure that siw has got something brewing.

exp branch is the experimental branch; this will be the default branch until more progress is made on the core architecture (tokenzier, stemmer, and tagger).

This is the tested, stable, and production ready brnach of a research project to write natural language processing tools in Go. NLPT is built up from multiple sub-packages (each separately accessible).

Get it:

Functionality is separated into sub packages, which are usable outside the scope of the main NLPT project. Naming of each subpackage will be consistent as per the first 3 letter prefix + subpackage name. For example: tokenizer = nlptokenizer, stemmer = nlpstemmer, tagger = nlptagger. Get a subpackage:

Thanks to the Go Berlin users group for letting me ripoff their gopher image!

Alt text

Branches

Development workflow == exp -> stable -> master

Criteria each sub-package:

General

NLPT broadly supports minimal functionality for the full range of 4 bit unicode code points.

Tokenizer

Run tests and benchmarks:

go test -v
go test -benchmem -bench .
Stability:  2   - Stable
Volatility: 2   - Stable
Tests:      2   - Stable

Examples:

TODO

Description

Tokenizer it leverages the Go Rune Type (int32 aliases for Unicode). Basically, you can build custom unicode alphabets that are used for pattern matching (instead of regular expressions). General goals:

  1. Broader spectrum of Unicode characaters used across ever expanding and changing media
  2. Special or nonstandard characters used in software application logs
  3. The rise of new languages on the web, and the velocity of disappearing endangered langauges

Sources

TF-IDF: Term Frequency-Inverse Document Frequency

The Tf-Idf stuff is not done, I've just been playing with different ways of doing it. There is not a full model finished yet and so the first implementation is not complete.

Stability:  0   - Not Started
Volatility: 0   - Not Started
Tests:      0   - Not Started

Examples:

Stemmer

Stability:  0   - Not Started
Volatility: 0   - Not Started
Tests:      0   - Not Started

Examples:

POS: Part of Speech Tagger

Stability:  0   - Not Started
Volatility: 0   - Not Started
Tests:      0   - Not Started

Examples:

Resources

Text Processing in Go

Tokenizer

Stemming

Part of Speech Tags

Tf-Idf

See the IDF entry in the Information Retrieval book provided by Stanford and authors for detail.

Unicode

NLP APIs for result comaprison testing

One reason for knowing about NLP services is they can be used for testing and comparing results. When more sub-packages become available tests will be written against these APIs to compare results.

Xerox

Alchemy