일부 유니코드 문자를 무시하고 문자가 아닌 문자를 제거합니다.

일부 유니코드 문자를 무시하고 문자가 아닌 문자를 제거합니다.

다음 텍스트가 있습니다.

[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]

텍스트에는 U400 - U4FF 범위의 키릴 문자가 포함되어 있습니다.

나는 알파가 아닌 것을 제거하고 싶습니다. 예를 들면 다음과 같습니다: []"<> 그러나 Matt Mahoney의 스크립트를 사용하여 Perl에서 이 작업을 수행할 때:http://mattmahoney.net/dc/textdata.html또한 다음 Perl 라인도 적용됩니다.

tr/a-z/ /cs;

그러면 ë와 같은 위의 키릴 문자도 제거됩니다.

위에서 언급한 범위에 속하는 특정 유니코드 문자를 무시하면서 문자가 아닌 문자를 제거하는 Perl의 방법이 있습니까?

답변1

tr/a-z/ /cs;세트에 없는 모든 문자를 공백으로 바꿔야 합니다 a-z. (후행은 세트를 보완하기 위한 것입니다. 그렇지 않으면 에서 까지의 모든 문자를 c대체합니다 .)az

좀 더 구체적으로 설명해야 합니다. s/[[:punct:]]+/ /g모든 구두점 문자 시퀀스를 단일 공백으로 바꾸고 s/[^[:alpha:]]+/ /g모든 알파벳이 아닌 문자 시퀀스를 단일 공백으로 바꿉니다.

적어도 이것은 로케일별로 다르므로 Perl에 UTF-8 등을 [:alpha:]사용하도록 지시해야 합니다 . -C또한 [^[:alpha:]]숫자와 후행 줄 바꿈도 제거됩니다. en_US.UTF-8데비안의 로케일 은 다음과 같습니다 :

$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[^[:alpha:]]+/ /g'
 përgjithshme është kilometra katrorë $ 

$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[[:punct:]]+/ /g'
 përgjithshme   është   28 748   kilometra katrorë 
$ 

관련 정보