perl - 将所有文档与 Perl 的 Text::DocumentCollection 中的其他文档进行比较

标签 perl

给定 Text::DocumentCollection 中的文档集合在 Perl 中,我想计算 cosine similarity在集合中的任意两个文档之间使用 Text::Document .

我认为这可能可以使用 EnumerateV 和回调来完成,但我无法弄清楚细节。 ( This SO question 很有帮助,但我仍然卡住了。)

具体来说,假设集合存储在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 但我没有无法弄清楚。

最佳答案

你可能想从这样的事情开始:

$c->EnumerateV(sub {
    my ($c, $k1, $d1) = @_;
    $c->EnumerateV(sub {
        my ($c, $k2, $d2) = @_;
    return if exists $dist{$k1.$k2};
    $dist{$k1.$k2} = $dist{$k2.$k1}= cosine_dist($d1, $d2);
    });
});

关于perl - 将所有文档与 Perl 的 Text::DocumentCollection 中的其他文档进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438964/

相关文章:

xml - 如何将 Moose 对象序列化为 XML?

regex - 使用捕获与非捕获正则表达式检测列表上下文中的匹配差异?

perl - grep 目录中的文件名

perl - LWP UserAgent 帖子 @list

Perl Apache : Perl script displayed as plain text

perl - 在perl中对数组进行排序并在一行中返回结果

perl - 如何使用 Perl 格式以科学记数法书写?

perl - 需要在组中查找一个字符串,然后查找单个组(包含字符串)所属的所有组

arrays - 在 Perl 中将字符串拆分为数组

Perl mongodb $collecton->find::在获取时到 mongodb 的往返次数是多少?