Bidirectional pipe для mystem в Perl
Когда нормализуешь слова с помощью mystem — лучше использовать bidirectional pipe, вместо того, чтобы каждый раз открывать новый процесс.
Это очень просто.
Учитывая долбанутость mystem, мы будем отбрасывать слова с цифрами и ждать подольше. На всякий там. Пробелы он превращает в _, так что триггеры обоснованы.
#!/usr/bin/perl -w
use strict;
use FileHandle;
use IPC::Open2;
use IO::Select;
my $s = IO::Select->new ();
my $pid = open2 (*Reader, *Writer, «mystem -c -n -eUTF8» );
$s->add (\*Reader);
my @words = ('слона майна виражей', 'моськи', 'мартышки','троллоло', 'слова1');
$| = 1;foreach (@words){
next if /\d/;
print Writer $_."\n";
print qq[Sent word $_\n];
while (){
chop;
next if $_ eq q[_];
next if $_ eq q[\n];
print $_."\n";
last unless $s->can_read (1,5);
}
print «-»x10;
print «\n»;
}
close (Reader);
close (Writer);