Подсчет предложений / слов в Perl с использованием регулярных выражений - PullRequest
2 голосов
/ 31 января 2011

Это регулярное выражение стареет. :( Еще один вопрос: Мне нужно посчитать количество слов и количество предложений в абзаце. Код, который я пытался использовать, был таким:

my $sentencecount = $file =~ s/((^|\s)\S).*?(\.|\?|\!)/$1/g;
my $count = $file =~ s/((^|\s)\S)/$2/g;
print "Input file $ARGV[1] contains $sentencecount sentences and $count words.";

Мои результаты возвращают 63 для обоих подсчетов. Я знаю, что это неправильно, по крайней мере, насколько количество слов идет. Является ли это результатом использования замены для процесса подсчета? Если да, то как мне это исправить?

Ответы [ 3 ]

2 голосов
/ 31 января 2011

Я предлагаю изучить функцию perl split, см. perlfunc(1):

           If EXPR is omitted, splits the $_ string.  If PATTERN is also
           omitted, splits on whitespace (after skipping any leading
           whitespace).  Anything matching PATTERN is taken to be a
           delimiter separating the fields.  (Note that the delimiter may
           be longer than one character.)
1 голос
/ 31 января 2011
my $wordCount = 0;
++$wordCount while $file =~ /\S+/g;

my $sentenceCount = 0;
++$sentenceCount while $file =~ /[.!?]+/g;

Выполнение //g сопоставления в скалярном контексте, поскольку мы здесь, позволяет избежать создания огромного списка всех слов или всех предложений, экономя память в случае большого файла.Код подсчета предложений будет подсчитывать любое количество разделителей в конце предложения как одно предложение (например, Hello... world! будет считаться как 2 предложения).

0 голосов
/ 27 апреля 2013

Получает количество предложений и символов из $file

$file="This is praveen worki67ng in RL websolutions";
my $count = () = $file =~ /\S+/g;
my $counter = () = $file =~ /\S/g;
...