Linux下语料加工流程

iCasino

普通会员
新年快到了,分享一下语料预处理的心得,这里只进行了句子级别的简易加工,不对之处欢迎批评指正。

Linux下语料加工流程

1。 从PDF截取txt文件,存储为chapter1(注意去掉文件内的空行)

2。 在每一行尾加一个空格并去Linux换行符,为句子分割作准备
代码:
sed 's/$/ /g' chapter1 > chapter1_
perl -pe 'chomp' chapter1_  > chapter1_chomped

3。进行句子分割
代码:
 #!/usr/bin/perl
    #filename: splitsentences.pl
    #grammar:   perl splitsentences.pl  chapter1_chomped  > chapter1_sentences
     use Lingua::EN::Sentence qw( get_sentences add_acronyms );

     add_acronyms('Principles of Marketing','gen');

     $/ = "\n";

     while(<>) {
     $sent = get_sentences($_);
        foreach $s (@$sent) {
            print "<s> $s </s>\n";
                        }
                            }

4。 将句子导入MySQL
代码:
    #!/usr/bin/perl
    #filename: perldb.pl
    #grammar: perl perldb.pl
     use DBI;
     open(FILE,"chapter1_sentences") or die("cannot open file!");
     while (<FILE>){
     s/^<s>//g; #消除Lingua::EN::sentence生成的<s></s>对
     s#'#''#g; #对单引号转义以便插入MySQL
     s#</s>$##g;#消除Lingua::EN::sentence生成的<s></s>对
     chomp;
     push @sentences,$_;
    }
    $dsn = "DBI:mysql:database=test;host=localhost";
    $dbh = DBI->connect($dsn, 'test', '') or die("mysql is not running!\n");
    foreach $sentence (@sentences){
    $content= "'" . $sentence . "'";
    $rows=$dbh->do("INSERT INTO documents(title,content) VALUES ('KOT99_1',     $content)");
    }

5。 更新Sphinx索引(如果你用了Sphinx的话)
代码:
  ./indexer --rotate --all
 
Last edited:
回复: Linux下语料加工流程

很不错,建议第3步时只用\n分行,导入MySQL之后再用sed对文本中的行加<s></s>标记
 
回复: Linux下语料加工流程

<s></s>标记 是在第三步这一行代码产生的:
代码:
   print "<s> $s </s>\n";
当初目的主要是为了方便人工校对自动句子切分的正误。如果不需 要,
可以将代码改为:
代码:
  print "$s\n";
当然,第4步相应地方就也要改了。
 
Back
顶部