#!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); use Text::Levenshtein::XS qw(distance); my $dtresh = 3; my $ikfile = "medbest.txt"; my $idfile = "medrank.txt"; my $ofile = "med_rules_l.txt"; my $obfile = "med_norules_l.txt"; my @medkw; open IDF, "<$ikfile" or die "No such file\n"; while () { chomp; push @medkw, $_; } close IDF; my @medw; open IDF, "<$idfile" or die "No such file\n"; while () { chomp; (my $mname) = /^(\w*)\s+\d+$/; push @medw, $mname; } close IDF; my %medgroups; my @alonemeds; foreach my $medword (@medw){ my $mindist = 1000; my $keyguide = ""; foreach my $medkey (@medkw){ my $dist = distance($medword, $medkey, $dtresh); if ((defined $dist) && ($dist < $mindist)) { $mindist = $dist; $keyguide = $medkey; } } if ($keyguide) { push @{$medgroups{$keyguide}}, $medword; print "$medword --> $keyguide\n"; }else{ push @alonemeds, $medword; print "$medword --> no rules!\n"; } } open ODF, ">$ofile" or die "Could not create file\n"; foreach my $mgroup (sort keys %medgroups){ print ODF "$mgroup: ",join("|", sort @{$medgroups{$mgroup}}), "\n"; } close ODF; open ODF, ">$obfile" or die "Could not create file\n"; foreach my $med (@alonemeds){ print ODF "$med\n"; } close ODF;