mirror of
				https://github.com/pragma-/pbot.git
				synced 2025-11-04 08:37:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			844 B
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			844 B
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/perl
 | 
						|
 | 
						|
use warnings;
 | 
						|
use strict;
 | 
						|
 | 
						|
use Storable;
 | 
						|
use Text::Levenshtein::XS 'distance';
 | 
						|
 | 
						|
die "usage: $0 <wordlist file>\n" unless @ARGV == 1;
 | 
						|
 | 
						|
#thanks to Limbic~Region, http://perlmonks.org/index.pl?node_id=180961
 | 
						|
open (my $wordlist, '<', $ARGV[0]) or die "Unable to open `$ARGV[0]` for reading: $!\n";
 | 
						|
my ($db, %data);
 | 
						|
 | 
						|
while (<$wordlist>) {
 | 
						|
    chomp;
 | 
						|
    next if $_ !~ /^[a-z]{3,7}$/;
 | 
						|
    push @{$data{length()}}, $_;
 | 
						|
}
 | 
						|
 | 
						|
for my $len (keys %data) {
 | 
						|
    my $end = $#{$data{$len}};
 | 
						|
    for my $i (0 .. $end - 1) {
 | 
						|
        my $word = $data{$len}[$i];
 | 
						|
        for my $j ($i + 1 .. $end) {
 | 
						|
            my $test = $data{$len}[$j];
 | 
						|
            if (distance($word, $test) == 1) {
 | 
						|
                push @{$db->{$len}{$word}}, $test;
 | 
						|
                push @{$db->{$len}{$test}}, $word;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
store $db, 'wordmorph.db';
 |