2014-12-03 2 views
3

나는 구두점에 작은 문제가있다.목록에 구두점을 추가 하시겠습니까?

내 과제는 텍스트에 중복 된 단어가 있는지 확인하는 것이 었습니다. 목록에 중복 된 단어가 있다면 .upper()를 사용하여 단어를 강조 표시하는 것이 었습니다.

텍스트 예제 : 나는 사과를 좋아한다. 사과는 내가 아는 한 최고의 것이다.

그래서 원래 텍스트를 가져 와서 구두점에서 줄을 긋고 모든 단어를 소문자로 변환 한 다음 목록을 나눕니다. for-loop를 사용하여 목록의 모든 단어를 서로 비교했으며 중복 된 단어를 모두 발견했습니다.이 모든 것이 새 목록에 배치되었습니다.

예 (이후에 대한 루프 사용) : 내가 좋아하는 사과 사과하는 것은 그래서 새 목록이 이제 원래 목록과 유사하지만 큰 차이점이 하나 있습니다, 그것은 구두점을 결여이다 내가

을 알고있는 가장 좋은 방법입니다 .

새 목록에 구두점을 추가 할 수있는 방법이 있습니까 (예전의 목록 위치에서)라고 생각 했습니까? 파이썬에서이 일을 할 수있는 메서드 빌드가 있습니까? 아니면 두 개의 목록을 다른 for 루프와 비교 한 다음 구두점을 새 목록에 추가해야합니까?

는 NewList = [] # 빈 목록

for word in text: 
    if word not in NewList: 
     NewList.append(word) 
    elif word in NewList: # 
     NewList.append(word.upper()) 
List2 = ' '.join(NewList) 

위의 코드를 더 이상 텍스트 작업과 중복 단어를 강조 i에 사용 된 코드를 먹으 렴를 작성합니다. 유일한 문제는 새 파일에 문장 부호가 존재하지 않는다는 것입니다.

+1

' 사과 사과 사과가''사과를 뿌리면 사과드립니다. –

답변

4

다음은 build-in regexp 모듈의 콜백과 함께 sub 메소드를 사용하는 예입니다. 이 해결 방법은 모든 구두점을 고려합니다.

import re 

txt = "I like,, ,apples, apples! is the .best. thing *I* know!!1" 


def repl(match, stack): 
    word = match.group(0) 
    word_upper = word.upper() 
    if word_upper in stack: 
     return word_upper 
    stack.add(word_upper) 
    return word 

def highlight(s): 
    stack = set() 
    return re.sub('\\b([a-zA-Z]+)\\b', lambda match: repl(match, stack), s) 

print txt 
print highlight(txt) 
`으로 호출하지만 당신은, 원본 텍스트에 [`string.replace`] (https://docs.python.org/2/library/string.html#string.replace)를 사용할 수
+0

작동하지 않을 수 있으며 이유를 모르겠습니다. – SoIsUrFace

+0

@SoIsUrFace> 2.7을 사용하고 있습니까? 오류가 있습니까? –

+0

이상하게도 효과가 있습니다. 그러나 그것은 나를 위해 매우 진보 된 것 같습니다. 나는 간략하게 기본을 알고있다. 재수 가랑 그런 소리도 듣지 못 했어. – SoIsUrFace