我正在使用 Text::Document 来计算两个文档之间的余弦相似度。当我尝试打印保存所得余弦相似度得分 ($sim) 的变量时,我收到一条错误消息:“在连接 (.) 或字符串中使用统一值 $sim...”。据我所知,我在打印命令上方立即初始化了这个变量。诚然,这是我第一次涉足 Text::Document 模块,我在这里的对象构造可能是错误/丑陋/潜在问题的。你知道变量初始化有什么问题吗?
use strict ;
use warnings ;
use autodie ;
use Text::Document ;
### BEGIN BY READING IN EACH FILE ONE BY ONE. ###
################## LOOP BEGIN ##################
# Process every file with a `txt` file type
my $parent = "D:/Cleaned 10Ks" ;
my ($par_dir, $sub_dir);
opendir($par_dir, $parent);
while (my $sub_folders = readdir($par_dir)) {
next if ($sub_folders =~ /^..?$/); # skip . and ..
my $path = $parent . '/' . $sub_folders;
next unless (-d $path); # skip anything that isn't a directory
chdir($path) or die "Cant chdir to $path $!";
for my $filename ( grep -f, glob('*') ) {
open my ($fh), '<', $filename;
my $data1 = do {local $/; <$fh> } ;
my $data2 = Text::Document->new(file=>'$data1') ;
my $data3 = $data2->WriteToString() ;
my $data4 = Text::Document::NewFromString($data3) ;
my ($comp_id, $year, $rest) = split '-', $filename, 3;
my $prev_year = ($year ne '00') ? $year - 1 : 99;
my $prev_year_base = join '-', $comp_id, $year ;
my ($prev_year_file) = glob "$prev_year_base*" ;
open my ($fh_prior), '<', $prev_year_file ;
my $data1_prior = do {local $/; <$fh_prior> } ;
my $data2_prior = Text::Document->new(file=>'$data1_prior') ;
my $data3_prior = $data2->WriteToString() ;
my $data4_prior = Text::Document::NewFromString($data3_prior) ;
my $sim = $data4->CosineSimilarity( $data4_prior ) ;
print "The cosine similarity score is $sim\n" ;
}
}
最佳答案
您有几个问题..
my $data2 = Text::Document->new(file=>'$data1') ;
在这里,您似乎想象 $data2
将使用 $data1
的内容进行初始化。
事实上,file
关键字在这里没有执行任何操作,该行相当于
my $data2 = Text::Document->new() ;
您已成功初始化 Text::Document
对象,但它没有数据。
您对前一个对象执行相同的操作,因此您最终会在没有比较项的情况下比较两个对象。 $sim
为空。
修复方法是向新对象添加一些内容:
my $data2 = Text::Document->new() ;
$data2->AddContent($data1);
...对于前一个对象也是如此。
此外,您可以删除这些行:
my $data3 = $data2->WriteToString() ;
my $data4 = Text::Document::NewFromString($data3) ;
它们是多余的。您只是重新创建相同的(空)对象。
关于perl - 用于测量 Text::Document 中 CosineSimilarity 的变量未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39047635/