다음 텍스트가 있습니다.
[]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
대체합니다 .)a
z
좀 더 구체적으로 설명해야 합니다. 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ë
$