2016-10-04 4 views
0

NLTK를 사용하여 NLP에 들어가려고하고 있는데, 아래의 코드 대부분을 이해하지만 무엇이 x.sub("", word)if not new_word in ""인지 이해하지 못합니다. 나는 혼란스러워.파이썬에서의 문자열 연산

text = ["It is a pleasant evening.", "Guests, who came from the US arrived at the venue.", "Food was tasty."] 

tokenized_docs = [word_tokenize(doc) for doc in text] 
print(tokenized_docs) 

x = re.compile("[%s]" % re.escape(string.punctuation)) 
token_nop = [] 
for sentence in tokenized_docs: 
    new_sent = [] 
    for word in sentence: 
     new_word = x.sub('', word) 
     if not new_word in '': 
      sentence.append(new_word) 
    token_nop.append(sentence) 
+0

이 코드 조각에서 무엇을 기대합니까? 당신이 기대하는대로하지 않습니까? – lenz

답변

0

이와 같은 단순한 상황에서 파이썬은 실제로 자체적으로 문서화합니다. 당신은 항상 파이썬 인터프리터를 해고하고 무엇을 볼 수있는 기능에 __doc__ 함수를 호출 할 수 있습니다 :

>>> import re 
>>> print(re.compile(".*").sub.__doc__) 
sub(repl, string[, count = 0]) --> newstring 
    Return the string obtained by replacing the leftmost non-overlapping 
    occurrences of pattern in string by the replacement repl. 

그래서, 우리가 볼, sub 단순히 주어진 정규 표현식 패턴에 대체를 수행하는 작업입니다. (파이썬의 정규 표현식에 익숙하지 않다면, check this out). 따라서, 예를 들어 : new_word가 빈 문자열 인 경우 in에 관해서는

>>> import re 
>>> s = "Hello world" 
>>> p = re.compile("[Hh]ello") 
>>> p.sub("Goodbye", s) 
'Goodbye world' 

, 그건 그냥 확인합니다.

+0

오, 내가 오해 한 것뿐입니다. re.sub에서 첫 번째 매개 변수는 대체 될 것으로 생각했지만 실제로 대체 할 매개 변수입니다. 그래서 regex.sub ("", string)는 문자열에서 정규 표현식의 첫 번째 발생을 ""으로 바꿉니 까? –

+0

@SavonBrown 그래, 정확히. 예를 들어 답을 편집했습니다. –