Perl脚本从大型Unicode文本文件中删除所有英语

时间:2011-05-12 03:00:48

标签: perl bash unicode

我还是像bash和perl这样的新手,需要一些任务帮助。我正在准备(添加和编辑)一个大型高棉语Unicode语料库,用于ICU高棉语破解的补丁。

到目前为止,我一直无法找到一个稳定的解决方案来自动删除所有英文字母和标点符号(只留下高棉语)。

我被告知Perl可能是要走的路,但我不知道从哪里开始(我不是真正的程序员)。

我过去使用过bash脚本,但结果并不完美(最后我必须手动检查列表并删除非高棉字符)。

以上是我过去的一些建议:

LC_ALL=POSIX sort khmerdict.txt | sed '/[[:punct:]]/d' > khmer-sorted.txt

哪个应该删除标点符号...但由于某种原因它删除了我文件中的很多行,所以它没用。

而且:

sed -e 's/[a-zA-Z]//g' -e 's/​/ /g' -e 's/\t/ /g' -e 's/[«|»|:|;|.|,|(|)|-|?|។|”|“]//g' -e 's/[0-9]//g' -e 's/ /\n/g' -e 's/០//g' -e 's/១//g' -e 's/២//g' -e 's/៣//g' -e 's/៤//g' -e 's/៥//g' -e 's/៦//g' -e 's/៧//g' -e 's/៨//g' -e 's/៩//g' dictionary.txt | \

这是另一种尝试删除英文字母,标点符号以及所有高棉编号......但就像我说的那样,它没有完美准确地工作。

有没有人知道一个稳定的解决方案,适合高棉Unicode?也许有一种方法可以使用一系列Unicode字符(Khmer Unicode Mapping PDF)删除所有内容?

如果您想在字典上尝试一些内容,可以在此处下载测试版本:http://www.sbbic.org/Khmer-Unicode-Wordlist.zip

以下是一个简短的列表:

កំណត់
--
ស្រូវ
ទម្លាប់
}
é
"សំយុង
"លើក"
"ព"
"ផ"
ទស្សន--
–សម្ភាស
ចម្ងាយahead
ទាត់១

谢谢, 森

2 个答案:

答案 0 :(得分:5)

某些版本的 sed 可能支持非ASCII,多字节编码,但我只使用Perl,其中Unicode支持可能更可靠(甚至可读:您可以使用块名称和引用特殊字符,而不必逐字逐句地使用它们。)

保持CR,LF,ZERO WIDTH NON-JOINER以及高棉和高棉符号块中的所有角色:

perl -CIO -pe '
    s/[^\r\n\x{200C}\p{Khmer}\p{KhmerSymbols}]+//g;   # characters to keep
' <input >output

与上述相同,但也剥离高棉数字(U + 17E0-U + 17E9):

perl -CIO -pe '
    s/[^\r\n\x{200C}\p{Khmer}\p{KhmerSymbols}]+//g;   # characters to keep
    s/[\x{17E0}-\x{17E9}]+//g;                        # more characters to drop
' <input >output

我使用Perl 5.8.9,Perl 5.10.0和Perl 5.12.1进行了测试。

如果您不想保留高棉符号块中的字符,请删除\p{KhmerSymbols}

输入应为UTF-8(您的压缩测试文件是)。输出将是UTF-8。

以下是Khmer-Unicode-Wordlist.txt(CRLF换行符)的部分行统计信息:

  • 总共28378行(最后一行缺少CR + LF)
  • 28052行只有“高棉字符”(来自高棉(U + 1780-U + 17FF)或高棉符号(U + 19E0-U + 19FF)块)
  • 308行混合字符(“高棉字符”和其他字符)
  • 没有任何“高棉人物”的18行
  • 51行ZERO WIDTH NON-JOINER(U + 200C)
    所有这些都发生在一系列高棉/高棉符号字符的中间 它们对您的目的可能重要也可能不重要 如果您不想保留这些ZWNJ,请从上述程序中删除\x{200C}

答案 1 :(得分:1)

perl -CS -Mutf8 -lpe's/[^ក-៝៰-៹]//g' < mixed.UTF-8.txt > khmer-only-no-digits.UTF-8.txt

这是一个否定的角色类。