Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Concatenating strings with different length

by choroba (Cardinal)
on Nov 30, 2012 at 10:42 UTC ( [id://1006453]=note: print w/replies, xml ) Need Help??


in reply to Re: Concatenating strings with different length
in thread Concatenating strings with different length

Or even:
#!/usr/bin/perl use warnings; use strict; #use Data::Dumper; my %fragments; while ( my $line = <DATA> ) { chomp $line; my @words = split / /, $line; for my $i (0 .. $#words - 1) { push @{ $fragments{$words[$i]} }, join ' ', @words[0 .. $i-1, $i+1 .. $#words]; } } for my $term ( keys %fragments ) { print "There are $term " . ( join ' and ', @{ $fragments{$term} } +) . ".\n"; } __DATA__ big businesses fast red cars big smart companies fast light planes fast animals big bad wolves small bad girls bad growling bears
Output:
There are small bad girls. There are light fast planes. There are growling bad bears. There are bad big wolves and small girls and growling bears. There are big businesses and smart companies and bad wolves. There are smart big companies. There are red fast cars. There are fast red cars and light planes and animals.
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Replies are listed 'Best First'.
Re^3: Concatenating strings with different length
by Kenosis (Priest) on Nov 30, 2012 at 18:55 UTC

    Excellent, choroba!

    Building on your and GrandFather's suggestions, there's the following:

    #!/usr/bin/perl use warnings; use strict; use Lingua::EN::Tagger; my %fragments; my $p = new Lingua::EN::Tagger; my @adjectives = qw/nervous nutty obnoxious outrageous panicky repulsive scary selfish sore tense terrible testy thoughtless tired troubled upset uptight weary wicked worried/; my @stems = ( "It's been said that there were many", 'Goldfish spoke with', 'There were three', 'People used to see 42', 'There were quietly-roaming groups of' ); while ( my $line = <DATA> ) { chomp $line; my $adjective = $adjectives[ int rand $#adjectives + 1 ]; $line = $p->add_tags($line) =~ s/<nns>/$adjective /gr =~ s/<.+?>// +gr; my @words = split / /, $line; for my $i ( 0 .. $#words - 1 ) { push @{ $fragments{ $words[$i] } }, join ' ', @words[ 0 .. $i - 1, $i + 1 .. $#words ]; } } print "Once upon a time...\n\n"; my @sentences; for my $term ( keys %fragments ) { my $stem = $stems[ int rand $#stems + 1 ]; push @sentences, "$stem $term " . ( join ' and ', @{ $fragments{$term} } ) . '.'; } print join ' ', @sentences; print "\n\nThe times have certainly changed.\n\nThe end."; __DATA__ big businesses fast red cars big smart companies fast light planes fast animals big bad wolves small bad girls bad growling bears

    Sample output:

    Once upon a time...

    People used to see 42 small bad outrageous girls. There were three outrageous fast red cars and small bad girls. Goldfish spoke with light fast scary planes. There were three growling bad nervous bears. There were quietly-roaming groups of nervous big bad wolves and bad growling bears. There were three scary fast light planes. There were quietly-roaming groups of tense fast animals. Goldfish spoke with bad big nervous wolves and small outrageous girls and growling nervous bears. People used to see 42 big wicked businesses and smart selfish companies and bad nervous wolves. Goldfish spoke with smart big selfish companies. Goldfish spoke with red fast outrageous cars. Goldfish spoke with wicked big businesses. It's been said that there were many fast red outrageous cars and light scary planes and tense animals. There were quietly-roaming groups of selfish big smart companies.

    The times have certainly changed.

    The end.

    An emerging Perl storyteller...

Re^3: Concatenating strings with different length
by Anonymous Monk on Nov 30, 2012 at 19:41 UTC
    Well this works if you know the common word is the first word. IF not, then this never works. In the cases such as "modern game" and "classic game" it will not work.
      I know. I work with Treex.
      لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1006453]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2024-04-19 07:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found