Пожалуйста, я немного новичок в этой области, поэтому извините меня, если вопрос звучит тривиально или просто.
У меня есть группа наборов данных (точнее, сумка слов), и мне нужно сгенерировать матрицу близости, используя их расстояние редактирования друг от друга, чтобы найти и сгенерировать матрицу близости.
Однако я совершенно не понимаю, как Я буду отслеживать свои данные / строки в матрице. Мне нужна матрица близости для целей кластеризации.
Или Как вообще вы подходите к такого рода проблемам в полевых условиях. Для реализации этого я использую perl и R.
Вот типичный код на perl, который я написал, который читает из текстового файла, содержащего мой пакет слов
use strict ;
use warnings ;
use Text::Levenshtein qw(distance) ;
main(@ARGV);
sub main
{
my @TokenDistances ;
my $Tokenfile = 'TokenDistinct.txt';
my @Token ;
my $AppendingCount = 0 ;
my @Tokencompare ;
my %Levcount = ();
open (FH ,"< $Tokenfile" ) or die ("Error opening file . $!");
while(<FH>)
{
chomp $_;
$_ =~ s/^(\s+)$//g;
push (@Token , $_ );
}
close(FH);
@Tokencompare = @Token ;
foreach my $tokenWord(@Tokencompare)
{
my $lengthoffile = scalar @Tokencompare;
my $i = 0 ;
chomp $tokenWord ;
#@TokenDistances = levDistance($tokenWord , \@Tokencompare );
for($i = 0 ; $i < $lengthoffile ;$i++)
{
if(scalar @TokenDistances == scalar @Tokencompare)
{
print "Yipeeeeeeeeeeeeeeeeeeeee\n";
}
chomp $tokenWord ;
chomp $Tokencompare[$i];
#print $tokenWord. " {$Tokencompare[$i]} " . " $TokenDistances[$i] " . "\n";
#$Levcount{$tokenWord}{$Tokencompare[$i]} = $TokenDistances[$i];
$Levcount{$tokenWord}{$Tokencompare[$i]} = levDistance($tokenWord , $Tokencompare[$i] );
}
StoreSortedValues ( \%Levcount ,\$tokenWord , \$AppendingCount);
$AppendingCount++;
%Levcount = () ;
}
# %Levcount = ();
}
sub levDistance
{
my $string1 = shift ;
#my @StringList = @{(shift)};
my $string2 = shift ;
return distance($string1 , $string2);
}
sub StoreSortedValues {
my $Levcount = shift;
my $tokenWordTopMost = ${(shift)} ;
my $j = ${(shift)};
my @ListToken;
my $Tokenfile = 'LevResult.txt';
if($j == 0 )
{
open (FH ,"> $Tokenfile" ) or die ("Error opening file . $!");
}
else
{
open (FH ,">> $Tokenfile" ) or die ("Error opening file . $!");
}
print $tokenWordTopMost;
my %tokenWordMaster = %{$Levcount->{$tokenWordTopMost}};
@ListToken = sort { $tokenWordMaster{$a} cmp $tokenWordMaster{$b} } keys %tokenWordMaster;
#@ListToken = keys %tokenWordMaster;
print FH "-------------------------- " . $tokenWordTopMost . "-------------------------------------\n";
#print FH map {"$_ \t=> $tokenWordMaster{$_} \n "} @ListToken;
foreach my $tokey (@ListToken)
{
print FH "$tokey=>\t" . $tokenWordMaster{$tokey} . "\n"
}
close(FH) or die ("Error Closing File. $!");
}
, проблема в том, как я могу представить матрицу близости из этого и по-прежнему иметь возможность отслеживать, какие сравнения представляют в моей матрице.