【问题标题】:Perl Script to Remove All English from Large Unicode Text File从大型 Unicode 文本文件中删除所有英文的 Perl 脚本
【发布时间】:2011-08-23 19:01:00
【问题描述】:

我对 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
ទាត់១

谢谢, 内森

【问题讨论】:

    标签: perl bash unicode


    【解决方案1】:
    perl -CS -Mutf8 -lpe's/[^ក-៝៰-៹]//g' < mixed.UTF-8.txt > khmer-only-no-digits.UTF-8.txt
    

    这是一个否定字符类。

    【讨论】:

      【解决方案2】:

      sed 的某些版本可能支持非 ASCII、多字节编码,但我只会使用 Perl,因为 Unicode 支持可能更可靠(甚至可读:您可以使用块名称并引用 out特殊字符,而不必按字面意思使用它们)。

      保留 CR、LF、零宽度非连接符以及高棉和高棉符号块中的所有字符:

      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}。

      【讨论】:

      • 这个脚本运行良好 - 严肃的道具!我从来没有找到与 Khmer 一起工作的东西——perl 是关键!只是一个补充说明,以防有人看到这个想要将它用于高棉 - 如果你想保持零宽度空间(U + 200B),只需将它添加到阵容 \x{200C}\x{200B} 和它完美运行。再次感谢克里斯!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 2014-08-10
      • 2023-03-23
      • 1970-01-01
      • 2014-05-02
      • 2011-12-07
      相关资源
      最近更新 更多