Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Concatenating strings with different length

by Kenosis (Priest)
on Nov 30, 2012 at 03:23 UTC ( #1006397=note: print w/ replies, xml ) Need Help??


in reply to Concatenating strings with different length

What about something like the following?

use strict; use warnings; my %fragments; while ( my $line = <DATA> ) { chomp $line; my ( $term, $rest ) = split ' ', $line, 2; push @{ $fragments{$term} }, $rest; } for my $term ( keys %fragments ) { print "There are $term " . ( join ' and ', @{ $fragments{$term} } +) . ".\n"; } __DATA__ big businesses fast red cars big movie companies fast light planes fast animals big bad wolves

Output:

There are big businesses and movie companies and bad wolves. There are fast light planes and red cars and animals.


Comment on Re: Concatenating strings with different length
Select or Download Code
Re^2: Concatenating strings with different length
by choroba (Abbot) on Nov 30, 2012 at 10:42 UTC
    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.
    لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

      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...

      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
Node Status?
node history
Node Type: note [id://1006397]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (13)
As of 2014-07-24 16:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (162 votes), past polls