37,741
社区成员
发帖
与我相关
我的任务
分享
#! perl -w
#一个分析TXT文件的小脚本
use strict;
use Lingua::EN::Fathom;
#打开输出文件
open OUT, '>>C:\lingua.txt' or die "Can't open Output File:$!\n";
####################################下面是打开csv输出,不要的话就全注释掉吧
open CSV, '>>C:\lingua.csv' or die "Can't open Output File:$!\n";
#输出第一行。。。这个你总看得懂的吧?
print OUT "filename Numberofwords Percentofcomplexwords Averagesyllablesperword Numberofsentences Averagewordspersentence Numberofparagraphs Fog Flesch Flesch-Kincaid \n";
####################################下面是csv输出,不要的话就全注释掉吧
print CSV "filename,Numberofwords,Percentofcomplexwords,Averagesyllablesperword,Numberofsentences,Averagewordspersentence,Numberofparagraphs,Fog,Flesch,Flesch-Kincaid\n";
our $text = new Lingua::EN::Fathom;
#提示用户输入需要进行分析的文件夹
print "Please input the full path ofthe folder:\n";
my $folder = <STDIN>;
#下面对用户的输入进行一下格式化
chomp $folder;
if ($folder !~ /[\/\\]$/)
{
$folder = $folder."\\";
}
#验证一下有效性
if (!(-d $folder))
{
die "Oooops that is not a folder!!\n";
}
#下面是对目录进行遍历
push (my @dirs,$folder);
while (@dirs) {
#$rcdir is Recent Dir
my $rcdir = shift @dirs;
opendir DIR,$rcdir or die "Cant open Dir :$!\n";
while (my $name = readdir DIR)
{
#print $filename."\n";
if ($name!~ /\.?\.$/)
{
my $filename = $rcdir.$name;
#如果是文件的话,进行分析,并且写文件
if(-f $filename)
{
#看看是不是txt文件
if($filename =~ /\.txt$/)
{
print "Now analyzing $name,";
my $linguavalue = &lingua ($filename);
my $linguacsvvalue = &linguacsv($filename);
#输出到文件
print OUT $linguavalue."\n";
print CSV $linguacsvvalue."\n";
print " Complete!\n";
}
}
#如果是文件夹,那么放入数组中等待遍历。
else
{
push (@dirs,$filename."\\");
}
}
}
}
#关闭文件
close OUT;
close CSV;
#调用lingua进行分析。返回分析结果。csv的输出也在里面。不要的话就都注释掉就好了。
sub lingua
{
my $filename = shift;
$text->analyse_file($filename);
print $filename;
my $areport = '';
$areport .= $text->{file_name}." ";
$areport .= $text->num_words." ";
$areport .= sprintf("%.2f",$text->percent_complex_words)." ";
$areport .= sprintf("%.4f",$text->syllables_per_word)." ";
$areport .= $text->num_sentences." ";
$areport .= sprintf("%.4f",$text->words_per_sentence)." ";
$areport .= $text->num_paragraphs." ";
$areport .= sprintf("%.4f",$text->fog)." ";
$areport .= sprintf("%.4f",$text->flesch)." ";
$areport .= sprintf("%.4f",$text->kincaid);
return $areport;
}
sub linguacsv
{
####################################下面是csv输出,不要的话就全注释掉吧
my $csvreport = '';
$csvreport .= $text->{file_name}.",";
$csvreport .= $text->num_words.",";
$csvreport .= sprintf("%.2f",$text->percent_complex_words).",";
$csvreport .= sprintf("%.4f",$text->syllables_per_word).",";
$csvreport .= $text->num_sentences.",";
$csvreport .= sprintf("%.4f",$text->words_per_sentence).",";
$csvreport .= $text->num_paragraphs.",";
$csvreport .= sprintf("%.4f",$text->fog).",";
$csvreport .= sprintf("%.4f",$text->flesch).",";
$csvreport .= sprintf("%.4f",$text->kincaid);
return $csvreport;
###################################################csv输出结束
}