Natural Language Processing with FreeLing

I have not been able to find any ready-made interfaces/libraries for doing Natural Language Processing (NLP) with Tcl.

Luckily, FreeLing is a pretty complete NLP pipeline and comes with a binary executable for interfacing with the library that makes writing a simple Tcl interface very easy:

This requires tcllib for the json module.

package require json

proc freeling_analyze {text} {
    set fl_fh [open "|fl_analyze -f /usr/share/freeling/config/en.cfg --output json --outlv dep" r+]
    try {
        puts $fl_fh $text
        chan close $fl_fh write
        return [json::json2dict [read $fl_fh]]
    } finally {
        chan close $fl_fh
    }
}

Set your desired options within the open command. Your freeling binary maybe named analyze rather than fl_analyze.

Sample usage:

set dep [freeling_analyze "The quick brown fox jumps over the lazy dog"]

puts $dep ;# dump dict of json output