2011-01-17 2 views
5

많은 문장이 포함 된 목록이 있습니다. 당신이 할 수Python의 문자열에서 모든 기사, 커넥터 단어 등을 제거하십시오.

def removearticles(text): 


articles = {'a': '', 'an':'', 'and':'', 'the':''} 
for i, j in articles.iteritems(): 
    text = text.replace(i, j) 
return text 

: 내가 좋아하는 모든 문장의 단어에서 제거 목록을 반복 할 "와", "은", "A", "이다"등

나는이 시도 그러나 아마도 단어 중간에 "a"와 "an"이 제거 될 것입니다. 공백으로 구분할 때 단어의 인스턴스 만 제거해야하며 단어 내에있을 때는 제거하지 않아야합니다. 이것에 대해 가장 효율적인 방법은 무엇입니까?

답변

6

내가 정규식 갈 것, 무엇인가 :

def removearticles(text): 
    re.sub('\s+(a|an|and|the)(\s+)', '\2', text) 
+0

Brilliant! 누군가가 솔루션으로 정규 표현식을 제출할 것이라는 것을 알고있었습니다. 나는 아마추어 다. 좋은 정규식 튜토리얼/참조를 알고 있습니까? – Parseltongue

+1

튜토리얼 [here] (http://www.regular-expressions.info/tutorialcnt.html)이 있습니다. 모든 작업을 수행하지는 않았으므로 얼마나 좋은지 잘 모르겠습니다. 내가 정규 표현식을 디자인 할 때 사용하는 주요 도구는 [My Regex Tester] (http://www.myregextester.com)로 어디서 왜 일치하는지 쉽게 알 수 있습니다. – Nemo157

+0

Mastering Regular Expressions (Friedl, O'reilly pub)는 소유 가치가 있습니다. http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124/ –

1

articles = ['and', 'a'] 
newText = '' 
for word in text.split(' '): 
    if word not in articles: 
     newText += word+' ' 
return newText[:-1] 
의 라인을 따라 뭔가를보십시오 : 당신은뿐만 아니라 최고의 공백을 제거 할

def removearticles(text): 
    re.sub('(\s+)(a|an|and|the)(\s+)', '\1\3', text) 

경우 또는

+0

내가 정규식에 익숙하지 않다는 것을 감안할 때, 나는 같은 방식으로 문제를 해결하려고 생각하고 있었다! 고맙습니다. – Parseltongue

+0

문제 없음, :). – erbridge

0

regex을 사용하여 수행 할 수 있습니다. Iterator는 문자열을 통해 또는 (''.join 목록을 문자열로 보내) 다음 정규식에. 빠른 목록보다 더 DICT 실행의

>>> import re 
>>> rx = re.compile(r'\ban\b|\bthe\b|\band\b|\ba\b') 
>>> rx.sub(' ','a line with lots of an the and a baad') 
' line with lots of   baad' 
1
def removearticles(text): 


articles = {'a': '', 'an':'', 'and':'', 'the':''} 
rest = [] 
for word in text.split(): 
    if word not in articles: 
     rest.append(word) 
return ' '.join(rest) 

in 연산자.

+0

이것은 정규식보다 빠르게 실행됩니까? – Parseltongue

+0

@ParseItongue 방금 Senthil Kumaran이 제공 한 방법과 정규식 솔루션을 테스트합니다. Timer 모듈을 사용하면 118kb 인 Python2.6이 설치된 NEWS.txt를 처리합니다. 두 가지 방법 모두 1000 번 실행됩니다. 내 방식은 내 PC에서 정규식보다 약 2 초 빠릅니다. 두 가지 방법 모두 충분하다. – xiaowl

3

이것은 직선 정규식으로하는 것보다 NLP 작업과 비슷합니다. 나는 NLTK (http://www.nltk.org/) IIRC를 조사 할 것입니다. IIRC에는 당신이 제거하려고하는 것과 같은 필러 단어로 가득 찬 코퍼스가 함께 제공됩니다.

관련 문제