2011-05-12 4 views
1

저는 bash와 perl과 같은 것들에 익숙하지 않아 작업에 도움이 필요합니다. 나는 크메르어 유니 코드 코퍼스를 ICU 크메르어에 대한 패치와 함께 사용하기 위해 준비 (추가 및 편집)하는 중입니다.대용량 유니 코드 텍스트 파일에서 모든 영어를 제거하는 Perl 스크립트

지금까지 모든 영어 문자와 구두점을 자동으로 제거하는 안정적인 솔루션을 찾을 수 없었습니다 (단지 크메르어 만 남음).

필자는 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 | \ 

.

누구나 크메르어 유니 코드와 잘 작동하는 안정적인 솔루션에 대한 아이디어가 있습니까? 어쩌면 유니 코드 문자 (Khmer Unicode Mapping PDF)의 범위를 사용하여 모든 것을 제거 할 수있는 방법이 있을까요? 당신이 여기에 테스트 버전 다운로드 할 수있는 사전에 뭔가를 시도하려는 경우

: 여기에 http://www.sbbic.org/Khmer-Unicode-Wordlist.zip

과 함께 놀러 짧은 목록입니다

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

감사합니다, 나단

답변

5

일부 버전의 sed은 ASCII가 아닌 멀티 바이트 인코딩을 지원하지만 유니 코드 지원이 더 안정적인 Perl을 사용합니다. d 심지어 읽을 수도 있습니다 : 문자를 사용하지 않고 블록 이름을 사용하고 특수 문자를 참조 할 수 있습니다. 또한 제거 크메르 자리 (U + 17E0-U + 17E9) 위와 같지만 같은

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

같은 :

는 CR, LF, ZERO WIDTH NON-JOINER, 크메르 크메르 기호 블록에서 모든 문자를 유지 : 나는 펄 5.8.9, 펄 5.10.0 펄 5.12.1 테스트

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 

.

크메르어 상징 블록의 문자를 유지하지 않으려면 \p{KhmerSymbols}을 제거하십시오.

입력 내용은 UTF-8이어야합니다 (압축 된 테스트 파일이 있어야 함). 출력은 UTF-8이됩니다.전용 "크메르 문자"와

  • 28,052 라인 (마지막 하나는 CR + LF 누락)

    • 28,378 총 라인 (: 여기

      Khmer-Unicode-Wordlist.txt (CRLF의 줄 바꿈)에 대한 몇 가지 라인 통계입니다 Khmer (U + 1780-U + 17FF) 또는 Khmer 기호 (U + 19E0-U + 19FF) 블록

    • 혼합 문자 ("크메르 문자"등)가있는 308 줄
    • 18 줄 없음 "크메르 문자"
    • 51 줄에 ZERO WIDTH NON-JOINER (U + 200C)
      이 모든 것은 크메르어/크메르어 기호 문자 시퀀스 중간에 발생했습니다.
      귀하의 목적에 따라 중요 할 수도 아닐 수도 있습니다.
      이러한 ZWNJ를 유지하지 않으려면 위의 프로그램에서 \x{200C}을 제거하십시오.
  • +0

    와우, 멋진 - 감사합니다! – Nathan

    +0

    이 스크립트는 위대한 - 심각한 소품 작업 중입니다! 나는 크메르에서 일한 것을 찾을 수 없었습니다. 펄이 핵심이었습니다! 누군가 크메르를 위해 이것을 사용하고자하는 사람을 보았을 때 추가 된 메모 - 너비가 0 인 공간 (U + 200B)을 유지하려면 \ x {200C} \ x {200B}의 라인업에 추가하고 완벽하게 작동합니다. Chris에게 다시 한 번 감사드립니다! – Nathan

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

    음수 문자 클래스입니다.

    관련 문제