Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 25th, 2012  |  syntax: None  |  size: 2.34 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How to efficiently get a number of words from a text using perl?
  2. use strict;use warnings;use utf8;
  3. binmode(STDOUT, ':utf8');
  4. my $text = <<TXT;
  5. Регулярните изрази ни позволяват да търсим шаблони в данните си.
  6. Повечето букви и символи просто ще съвпадат със самите себе си.
  7. Например, регулярният израз "test" просто и точно ще съвпада със
  8. символния низ "test". Можете да включите режим,
  9. нечувствителен към разликата между малки и големи букви, който ще
  10. позволи да съвпадне също така и с "Test" или "TEST". Има изключения от
  11. това правило, някои символи са особени и не съвпадат със
  12. самите себе си. Вместо това те сигнализират...
  13. TXT
  14.  
  15. my $c = 0;
  16. my $collected = substr($text, 0, 10);
  17. while ($text =~ /$collected/) {
  18.     $c += 10;
  19.     $collected = substr($text, 0, $c);
  20.     print $collected, $/;
  21.     #sleep 1;
  22.     my @words = split(/s+/, $collected);
  23.  
  24.     if (@words >= 49) { last; }
  25. }
  26.        
  27. #!/usr/bin/env perl
  28.  
  29. use strict;
  30. use warnings;
  31.  
  32. my $text = <<TXT;
  33. Регулярните изрази ни позволяват да търсим шаблони в данните си.
  34. Повечето букви и символи просто ще съвпадат със самите себе си.
  35. Например, регулярният израз "test" просто и точно ще съвпада със
  36. символния низ "test". Можете да включите режим,
  37. нечувствителен към разликата между малки и големи букви, който ще
  38. позволи да съвпадне също така и с "Test" или "TEST". Има изключения от
  39. това правило, някои символи са особени и не съвпадат със
  40. самите себе си. Вместо това те сигнализират...
  41. TXT
  42.  
  43. my @words = $text =~ m/ s* ( S+ ) /gmsx;
  44. $#words = 49;
  45. print "@wordsn";
  46.        
  47. $words = $1 if $text=~/^s*((?:S+(?:s+|$)){0,50})/;
  48.        
  49. my @words;
  50. push @words, $1 while @words < 50 && $text =~ /s*(S+)/g;