请参阅这段perl代码:
#!/usr/bin/perl -w -CS
use feature 'unicode_strings';
open IN, "<", "wiki.txt";
open OUT, ">", "wikicorpus.txt";
binmode( IN, ':utf8' );
binmode( OUT, ':utf8' );
## Condition plain text English sentences or word lists into a form suitable for constructing a vocabulary and language model
while (<IN>) {
# Remove starting and trailing tags (e.g. <s>)
# s/\<[a-z\/]+\>//g;
# Remove ellipses
s/\.\.\./ /g;
# Remove unicode 2500 (hex E2 94 80) used as something like an m-dash between words
# Unicode 2026 (horizontal ellipsis)
# Unicode 2013 and 2014 (m- and n-dash)
s/[\x{2500}\x{2026}\x{2013}\x{2014}]/ /g;
# Remove dashes surrounded by spaces (e.g. phrase - phrase)
s/\s-+\s/ /g;
# Remove dashes between words with no spaces (e.g. word--word)
s/([A-Za-z0-9])\-\-([A-Za-z0-9])/$1 $2/g;
# Remove dash at a word end (e.g. three- to five-year)
s/(\w)-\s/$1 /g;
# Remove some punctuation
s/([\"\?,;:%???!()\[\]{}<>_\.])/ /g;
# Remove quotes
s/[\p{Initial_Punctuation}\p{Final_Punctuation}]/ /g;
# Remove trailing space
s/ $//;
# Remove double single-quotes
s/'' / /g;
s/ ''/ /g;
# Replace accented e with normal e for consistency with the CMU pronunciation dictionary
s/?/e/g;
# Remove single quotes used as quotation marks (e.g. some 'phrase in quotes')
s/\s'([\w\s]+[\w])'\s/ $1 /g;
# Remove double spaces
s/\s+/ /g;
# Remove leading space
s/^\s+//;
chomp($_);
print OUT uc($_) . "\n";
# print uc($_) . " ";
} print OUT "\n";
似乎第49行有一个非英语字符,即行s/?/e/g;
。
因此,当我执行此操作时,警告出现Quantifier follows nothing in regex;
。
我该如何处理这个问题?如何让perl识别出这个角色?我必须使用perl 5.10运行此代码。
另一个小问题是第一行中“-CS”的含义是什么。
感谢所有人。
答案 0 :(得分:1)
我认为你的问题是你的编辑器没有处理unicode字符,所以程序在它变成perl之前就被删除了,因为这显然不是你的程序,它可能在它到达你之前被删除了。
在整个工具链正确处理unicode之前,必须小心地以保留它们的方式编码非ascii字符。这是一种痛苦,并不存在简单的解决方案。有关如何安全地嵌入unicode字符,请参阅perl手册。
答案 1 :(得分:1)
根据错误行之前的注释行,要替换的字符是重音“e”;大概是指具有强烈口音的e:“é”。假设您的输入是Unicode,它可以在Perl中表示为\x{00E9}
。另请参阅http://www.fileformat.info/info/unicode/char/e9/index.htm
我猜您从服务器上的网页复制/粘贴此脚本,该服务器未正确配置以显示所需的字符编码。另请参见http://en.wikipedia.org/wiki/Mojibake