Учитывая коллекцию документов в Text::DocumentCollection
в Perl, я хочу вычислить косинусное сходство между любыми двумя документами в коллекции, используя Text::Document
.
Я думаю, что это, вероятно, можно сделать с помощью EnumerateV
и обратных вызовов, но у меня возникают проблемы с выяснением специфики.( Этот вопрос SO полезен, но я все еще застрял.)
Если говорить точнее, предположим, что коллекция хранится в test.db
следующим образом:
#!/usr/bin/perl -w
use Text::DocumentCollection;
use Text::Document;
$c = Text::DocumentCollection->new( file => 'test.db' );
my $text = 'Stack Overflow is a programming | Q & A site that’s free. Free to ask | questions, free to answer questions|, free to read, free to index';
my @strings = split /\|/, $text;
my $i=0;
foreach (@strings) {
my $doc = Text::Document->new();
$doc->AddContent($_);
$c->Add(++$i,$doc);
}
Теперь предположим, что мне нужно прочитать в test.db
и вычислить косинусное сходство для всех комбинаций документов.(У меня нет доступа к документам, созданным в коде выше, кроме как через сохраненный файл базы данных.)
Я думаю, что ответ заключается в создании подпрограммы, доступ к которой осуществляется с помощью обратного вызова в EnumerateV
,и я предполагаю, что подпрограмма также вызывает EnumerateV
, но я не смог понять это.