#找出语音对应的sent文件,将关键词列表中的关键词在sent文件中的时间点输出到一个文件中
#################在下面的文本中检索关键词#####################
然后 你 妹妹 怎么 打电话 呀
26.1 26.36 26.36 26.48 26.48 27 27 27.24 27.24 27.86 27.86 28.12
0.0000
只能 扣费 打电话 市话 一 毛 二 长途 两 毛 我看 有没有 别的 扣费 的 稍等
29.23 29.5 29.5 29.5 29.5 30.12 30.12 30.44 30.44 30.54 30.54 30.66 30.66 30.84 30.84 31.11 31.11 31.26 31.26 31.42 31.42 31.64 31.64 31.91 31.91 32.18 32.18 32.54 32.54 32.81 32.81 33.2
0.0030
啊
42.83 43
0.0000
只要 您 今日 取消 套餐 好
44.05 44.21 44.21 44.4 44.4 44.74 44.74 45.13 45.13 45.44 45.44 45.71
0.0100
对 呀 五 元 那 套餐 是 没有了 吧
46.76 46.92 46.92 47.16 47.16 47.62 47.62 47.77 47.77 47.93 47.93 48.28 48.28 48.38 48.38 48.81 48.81 49.06
0.0020
然后 身份证 号 身份证 号 记得 吧
54.57 54.87 54.87 55.2 55.2 55.39 55.39 55.391 55.391 55.392 55.39 55.62 55.62 55.84
0.0000
啊 行 那 祝 您 愉快
80.67 81.11 81.11 81.33 81.33 81.52 81.52 81.62 81.62 81.74 81.74 82.08
0.0000
################################################################
#!/usr/bin/perl
use Encode;
use Thread;
# use Encode;
#use threads::shared;
# $dat="测试文本";
# $str=decode("gb2312",$dat);
# print encode("gb2312",$str),"n";
if($#ARGV < 2 )
{
? ? ? ? print "usage:perl key_search.pl wavlist ?keywordlist ?thread_count ?result n";
? ? ? ? exit(2);
}
#find ./ ?-name "*.wav" > wav.lst
my($wavlist,$keywordlist,$thread_count,$keyresult)=@ARGV;
open(WAV,"<$wavlist") or die "1n";
open(KEYWORD,"<$keywordlist") or die "3n";
open(RESULT,">$keyresult") or die "4n";
my @wav = ();
my @wkeyword = ();
@wav = <WAV>;
@wkeyword = <KEYWORD>;
#print ("@wkeywordn");
$icount=0;
#foreach my $fwav (@wav) {
?#next unless defined $fwav;
? # ? chomp $fwav;
? ?# ? ? ? $threads[$tempcount]=Thread->new(&;start_thread,$fwav,@wsent,@wkeyword);
? ?# ? ? ? ?$tempcount++;
? ? # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
#foreach my $thread (@threads) {
# $thread->join();
#}
while($icount<scalar(@wav))
{ ? ?while(scalar(threads->list())<$thread_count)
? ? {
? ? ? ? ? chomp($wav[$icount]);
? ? ? ? ?threads->new(&;start_thread,$wav[$icount],@wkeyword);
? ? ? ? $icount++;
? ? }
? ? foreach $thread(threads->list(threads::all))
? ? { ? ?if($thread->is_joinable())
? ? ? ? { ? ?$thread->join();
? ? ? ? }
? ? }
}
foreach $thread(threads->list(threads::all))
{ ? ?$thread->join();
}
sub start_thread{
?local ($lwav,$nkeyword)=@_;
?local @keyword=@{$nkeyword};
# print ("paramater is @keywordn");
?#print ("paramater is $lwavn");
? local $pos=0;
? local $kresult;
? local $count=0;
? local $leap=0;
? local @posarray=();
? local @resultarray=();
? local @tmpresult=();
? local $lkeyword;
? local $find=0;
? local @findkey=();
? #$id=Thread->self->tid();
? #print (RESULT ?"in thread ?$id :n");
?# print "in thread ?$id :n";
?print (RESULT ?"$lwavn");
?$lwav=~s/.wav/_sent.txt/;
?local ?$lsent=$lwav;
# print ?" sent file is $lsentn";
? for ?$lkeyword (@keyword)
? {
? ? ?chomp($lkeyword);
? ? #print ("line keyword is $lkeywordn");
? ? @segkeyword = split( /=/,$lkeyword );
? ? ?#print "segFile is @segFilen";
? ? ?$tmpkey=$segkeyword[0];
? ? ?$dtmpkey=decode("gb2312",$tmpkey);
? ? ?open(FSENT,"<$lsent") or die "5n";
? ? ?while($flsent=<FSENT>)
? ? ?{
? ? ? ? ?chomp($flsent);
? ? ? ? ?$integrate=$flsent;
? ? ? ? ?$integrate=~s/s//g;
? ? ? ? ?$dintegrate=decode("gb2312",$integrate);
? ? ? ? ?#print ("sent line is $flsentn");
? ? ? ? ?# ?print ("sent line is $flsentn");
? ? ? ? ? ?@segsent = split( /s/,$flsent );
? ? ? ? ? ?if($flsent =~ /[x80-xFF]+?/)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? # print "flsent is $flsentn";
? ? ? ? ? ? ? ? ?$leap=0;
? ? ? ? ? ? ? ? ?$count=0;
? ? ? ? ? ? ? ? ?for my $lresult (@segsent)
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? $dresult=decode("gb2312",$lresult);
? ? ? ? ? ? ? ? ? ? if($dresult=~/$dtmpkey/)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? $find=1;
? ? ? ? ? ? ? ? ? ? ? ? push @findkey,$tmpkey;
? ? ? ? ? ? ? ? ? ? ? ? push @posarray,$count;
? ? ? ? ? ? ? ? ? ? ? ? push @resultarray,$lresult;
? ? ? ? ? ? ? ? ? ? ? ? #$pos=$count;
? ? ? ? ? ? ? ? ? ? ? ? #print(RESULT "$lresult ");
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? $count++;
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ?? ? ? ? ? if(($dintegrate=~/$dtmpkey/)&&($find==0))
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? $count=0;
? ? ? ? ? ? ? ? ? ? $len=length($dtmpkey);
? ? ? ? ? ? ? ? ? ? for ($ilen=1;$ilen<$len;$ilen++)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? $end=$len-$ilen;
? ? ? ? ? ? ? ? ? ? ? $dtmpstr=substr($dtmpkey,$end);
? ? ? ? ? ? ? ? ? ? ? #print encode("gb2312","n";
? ? ? ? ? ? ? ? ? ? ? $dstrtmp=encode("gb2312",$dtmpstr);
? ? ? ? ? ? ? ? ? ? ? print ("partstr is $dstrtmpn");
? ? ? ? ? ? ? ? ? ? ? for my $lresult (@segsent)
? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ?$dresult=decode("gb2312",$lresult);
? ? ? ? ? ? ? ? ? ? ? ? ?if($dresult=~/$dtmpstr/)
? ? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ?$find=1;
? ? ? ? ? ? ? ? ? ? ? ? ? ?push @findkey,$tmpkey;
? ? ? ? ? ? ? ? ? ? ? ? ? ?push @posarray,$count;
? ? ? ? ? ? ? ? ? ? ? ? ? ?push @resultarray,$lresult;
? ? ? ? ? ? ? ? ? ? ? ? ? ?#$pos=$count;
? ? ? ? ? ? ? ? ? ? ? ? ? ?#print(RESULT "$lresult ");
? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? $count++;
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ?if($find==1)
? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ?last; ?#already find longest substring.so break the loop
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ?}
? ? ? ? ? ??? ? ? ? ? ? ?if($leap==1)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? if($find==1)
? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?$inumber=@posarray;
? ? ? ? ? ? ? ? ? ? ?for($i=0;$i<$inumber;$i++)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ?$pos=@posarray[$i];
? ? ? ? ? ? ? ? ? ? ? ?#print(RESULT "@resultarray[$i] @segsent[$pos*2] @segsent[$pos*2+1] ");
? ? ? ? ? ? ? ? ? ? ? ?#$tmpline="@resultarray[$i] @segsent[$pos*2] @segsent[$pos*2+1]";
? ? ? ? ? ? ? ? ? ? ? ?$tmpline="@findkey[$i] @segsent[$pos*2] @segsent[$pos*2+1]";
? ? ? ? ? ? ? ? ? ? ? ?push @tmpresult,$tmpline;
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?#for my $pos (@posarray) and for my $kresult (@resultarray)?
? ? ? ? ? ? ? ? ? ? ?#{
? ? ? ? ? ? ? ? ? ? ?# ?print(RESULT "$kresult @segsent[$pos*2] @segsent[$pos*2+1] ");
? ? ? ? ? ? ? ? ? ? ?#}
? ? ? ? ? ? ? ? ? ? ?#print(RESULT "n");
? ? ? ? ? ? ? ? ? ? ?$find=0;
? ? ? ? ? ? ? ? ? ? ?@findkey=();
? ? ? ? ? ? ? ? ? ? ?@posarray=();
? ? ? ? ? ? ? ? ? ? ?@resultarray=();
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ?}
? ? ? ? ? ? ?if($leap==2)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?$inumber1=@tmpresult;
? ? ? ? ? ? ? ? ? ?for($j=0;$j<$inumber1;$j++)
? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? $tmp=@tmpresult[$j];
? ? ? ? ? ? ? ? ? ? ? ?print(RESULT ?"$tmp $flsentn");
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ?@tmpresult=();
? ? ? ? ? ? ? ? ? ? next;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? $leap++;
? ? ? ? ? }
? ? ? ? ? close(FSENT);
? ? ?}
? }
close(WAV);
close(KEYWORD); close(RESULT); ? ? ? ? ? ? ? ? ? ?