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);