Chinaunix首页 | 论坛 | 博客
  • 博客访问: 257915
  • 博文数量: 54
  • 博客积分: 2915
  • 博客等级: 少校
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-21 12:20
个人简介

这个人很懒,什么都没有留下

文章分类
文章存档

2013年(1)

2012年(6)

2011年(11)

2010年(16)

2009年(20)

我的朋友

分类:

2009-05-21 15:29:11

作业要求: 用前向最大匹配算法实现中文切分。

当时没有用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\[\]\(\)\{\}\<\>\,\.\?\\\/\

阅读(1484) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~