2017-05-14 2 views
1

문장을 파이썬으로 구분해야합니다.문장이 구두점으로 끝나는 경우 공백 토큰을 삽입하지 않고 구두점으로 분할하는 효율적인 방법

이 명령은 거의 잘 작동 :

re.split('\W+', line.lower().strip(), flags=re.UNICODE) 

문제는 문장의 마지막 문자가 구두점 경우, 마지막 토큰이 무효 토큰 점이다.

어떻게 피할 수 있습니까?

무효화 토큰을 삽입 할 수없는 솔루션이 필요합니다. 나는 그것을 후에 취소 할 여유가 없다 : 필자는 텍스트의 매우 큰 코퍼에서이 명령을 실행할 필요가 있기 때문에 효율이 문제가된다.

>>> line = 'Hello world!' 
>>> re.findall(r'\w+', line.lower(), flags=re.UNICODE) 
['hello', 'world'] 
# `.strip()` was remove because `\w+` does not match whitespaces. 

사이드 참고 :

답변

3

대신 비 단어 분할 (\W+) 문자를 시도하고, 당신이 re.findall\w+로 사용할 수 있습니다 당신은 더 나은 거라고 백 슬래시를 피하기 위해 r'raw string literals'을 사용하는 탈출로 사용할 시퀀스.


대안은 다음 re.split 비 단어 chracters 후행하지 않고 문자열을 전달합니다

>>> re.split(r'\W+', re.sub(r'\W+$', '', line.lower().strip()), flags=re.UNICODE) 
['hello', 'world'] 

참고 : 또한 주요 단어가 아닌 문자를 제거 할 수 있습니다. 양면을 처리하려면 ^\W+|\W+$ 패턴을 사용하십시오.

+0

위대한 작품! 고맙습니다 – user3623123