У меня есть файл содержать, например, этот текст:косинуса сходства между строками PERL
perl java python php scala
java pascal perl ruby ada
ASP awk php java perl
C# ada python java scala
я нашел модуль, который вычисляет косинус similaity, http://search.cpan.org/~wollmers/Bag-Similarity-0.019/lib/Bag/Similarity/Cosine.pm
Я сделал простой тест в bignning,
my $cosine = Bag::Similarity::Cosine->new;
my $similarity = $cosine->similarity(['perl','java','python','php','scala'],['java','pascal','perl','ruby','ada']);
print $similarity;
rusult было 0,4;
Проблема, когда я прочитал из файла и вычислить косинус между каждой строкой, результаты разные, это код:
open(F,"/home/ahmed/FILE.txt") or die " Pb pour ouvrir";
my @data; # containt each line of the FILE in each case
while(<F>) {
chomp;
push @data, $_;
}
#print join " ", @data;
my $cosine = Bag::Similarity::Cosine->new;
for my $i (0 .. $#data-1) {
for my $j ($i + 1 .. $#data) {
my $similarity = $cosine->similarity($data[$i],$data[$j]);
print "line $i a une similarite de $similarity avec line $j\n";
$i + 1,
$j + 1;
}
}
результаты:
line 0 has a similarity of 0.933424735647156 with line 1
line 0 has a similarity of 0.953945734121021 with line 2
line 0 has a similarity of 0.939759036144578 with line 3
line 1 has a similarity of 0.917585834612093 with line 2
line 1 has a similarity of 0.945092544842746 with line 3
line 2 has a similarity of 0.908826679128811 with line 3
сходство должно 0,4 между линиями 1 и 2;
Я изменил ФАЙЛ так:
['perl','java','python','php','scala']
['java','pascal','perl','ruby','ada']
['ASP','awk','php','java','perl']
['C#','ada','python','java','scala']
, но тот же результат, Спасибо.
Это очень странное изменение, чтобы внести в свой входной файл. Вы сделали его похожим на строковое представление ссылки на массив. Откуда у вас эта идея? –
Я знаю, что это странно, я попробовал все решения, прежде чем я разместил этот вопрос, это мои первые шаги с perl, без ошибок, мы не можем учиться :) – Ahmed