2011-05-12 76 views
1

我對bash和perl等東西還是一個新東西,並且需要一些任務幫助。我正在準備(添加和編輯)一個大型高棉統一資源編碼語料庫,以便與ICU高棉語單詞的補丁一起使用。Perl腳本從大的Unicode文本文件中刪除所有英文

到目前爲止,我一直無法找到一個穩定的解決方案,自動刪除所有英文字母和標點符號(只留下高棉語)。我被告知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 
ទាត់១ 

感謝, 彌敦道

回答

5

某些版本的sed可能支持非ASCII,多字節編碼,但我只是使用Perl,其中Unicode支持可能更可靠(一個d甚至可讀:您可以使用塊名稱並引用特殊字符而不必直接使用它們)。

保持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}
+0

哇,真棒 - 謝謝! – Nathan

+0

這個腳本工作的很棒 - 嚴肅的道具!我從來沒有能夠找到與高棉合作的東西--Perl是關鍵!只是一個附加說明,如果任何人看着這個想要用於高棉的人 - 如果你想保留零寬度空間(U + 200B),只需將它添加到\ x {200C} \ x {200B}這個陣容中作品完美。再次感謝克里斯! – Nathan

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

這是一個否定字符類。