作业要求: 用前向最大匹配算法实现中文切分。
当时没有用decode来进行编码,而为了避免乱码问题,程序里手动给文本中的符号弄成了两个字节的,就是给每个符号后面加个空格。很麻烦。后来知道decode这个东西后,才知道原来可以那么简单的。这里就懒的改了,要是想知道怎么用decode的,看作业三吧。
代码里面的路径是相对路径。在读入词表的那一段代码,由于我的词表里的格式是每个词前都有个编号,所以作了一点处理。
#!/usr/bin/perl
use strict;
use warnings;
my %hash;
my @vocabulary;
my $s1;
my $s2;
my $w;
my $one;
my $maxlen=8; #前向最大匹配的最大长度
my $filename;
my $dir="text";
open FILE1,"vocabulary.dic" || die "Cannot open file: $!"; #将文件打开
while (<FILE1>) { #将词表读入哈希
chomp;
@vocabulary=split / /; #因为我的词表中每个词前面都有个编号,所以要作这样的处理
$hash{$vocabulary[1]}='1';
}
opendir(DH,"$dir") || die "Cannot open $dir: $!"; #开启文件目录操作
foreach $filename (grep(/\.txt$/i,readdir DH)) { #依次读入文件目录中每个文件的内容
open FILE2,"<","$dir\\$filename" || die "Cannot open this file: $!"; #打开待切分的文本
open FILE3,">","out\\$filename" || die "Cannot open this file: $!"; #新建或打开作为输出结果的文本
while (<FILE2>) { #开始前向最大匹配
chomp($_);
$s1=$_;
$s1=~s/([\s\w\[\]\(\)\{\}\<\>\,\.\?\\\/\
|
阅读(1492) | 评论(0) | 转发(0) |