Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hello! I'm trying to run the TreeTagger from a perl script on a Windows machine, but I'm really not that happy with the way I've implemented it. I'm calling the following in a loop, providing a sentence to the TreeTagger evry time in order to let it find the part of speech contained in the sentence:

sub POS_treetagger { if ($language_corpus =~ /English/) { system ('TreeTagger/bin/tree-tagger.exe' , 'TreeTagger/lib/english.par +' , '-token' , '-lemma' , '-sgml', '-no-unknown', "token.txt" , "corp +us_POS.txt" ); } }
This is working fine. Sentence is provided in file "token.txt", my tagged sentence is get in "corpus_POS.txt". What I'd like to avoid, is to use text files all the time. This is slowing down the process a lot (I've to process thousands of sentences). My sentences are stored in variables I AM putting in the file "token.txt" each time just because I can't figure out how to pass a variable and get the result in another variable. I know that I can not use perl variables in a SYSTEM call... but may someone can show me the right direction... Thank you.

Replies are listed 'Best First'.
Re: TreeTagger Run System Variables
by toolic (Bishop) on May 06, 2014 at 12:36 UTC
    I know that I can not use perl variables in a SYSTEM call
    system shows you how:
    system(@args)
Re: TreeTagger Run System Variables
by Anonymous Monk on May 06, 2014 at 13:18 UTC

    Are you talking about this software: http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/ ? If so, a quick look at that page seems to show that you can give it input via STDIN. A module such as IPC::Run, IPC::Run3, or Capture::Tiny may be able to help you. However make sure to read their documentation, as they might not actually be more efficient than the way you are doing it, for example, IPC::Run3 uses temporary files internally in several cases. It's just easier to use than doing all the temp file stuff yourself.

    Have you tried out the Perl interface Lingua::TreeTagger? It looks like the install may be a bit tricky, but if you install its prerequisites manually you may have success.