Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Matching wirth ordered array

by choroba (Cardinal)
on Mar 18, 2019 at 22:52 UTC ( [id://1231410]=note: print w/replies, xml ) Need Help??


in reply to Matching wirth ordered array

Sorting by the length starting from the longest is a common way. Instead of looping over the dictionary, you can build a regex from all the terms, and return the translation based on the matching part. Also, storing the dictionary in a hash makes retrieving the translation easier and faster. Something like the following:
#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; use utf8; use open 'OUT', ':encoding(UTF-8)', ':std'; my %dictionary = ( 'animal source food' => 'aliment d’origine animale', 'balanced diet' => 'régime alimentaire équilibré', 'food' => 'aliment', 'nutrition' => 'nutrition', 'nutrition assessment' => 'évaluation de l’état nutritionnel' ); my $text = 'nutrition and animal source food or nutrition assessment'; my $regex = join '|', map quotemeta, sort { length $b <=> length $a } keys %dictionary; while ($text =~ /($regex)/g) { say $dictionary{$1}; }

Output:

nutrition aliment d’origine animale évaluation de l’état nutritionnel

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (5)
As of 2024-04-24 02:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found