2013-04-16 2 views
2

텍스트에서 고유 단어를 집계하고 싶지만 특수 문자가 나오는 단어가 다르게 취급되지 않으며 평가에서 대소 문자를 구분하지 않도록하고 싶습니다.고유 단어 수 계산하기

결과는 16이 될 것이다이 예

text = "There is one handsome boy. The boy has now grown up. He is no longer a boy now." 
print len(set(w.lower() for w in text.split())) 

을 가지고,하지만 난 그게 문제가있다 (14)를 반환하는 기대 '소년.' 및 '소년'은 구두점 때문에 다르게 평가됩니다.

+1

을 유지

은'세 번 boy'하고, 단어'is' 및'두 번 now'. – eandersson

답변

1

여기 regex를 사용할 수 있습니다

In [65]: text = "There is one handsome boy. The boy has now grown up. He is no longer a boy now." 

In [66]: import re 

In [68]: set(m.group(0).lower() for m in re.finditer(r"\w+",text)) 

Out[68]: 
set(['grown', 
    'boy', 
    'he', 
    'now', 
    'longer', 
    'no', 
    'is', 
    'there', 
    'up', 
    'one', 
    'a', 
    'the', 
    'has', 
    'handsome']) 
2
import re 
print len(re.findall('\w+', text)) 

regular expression이 매우 간단하게 사용. 명심해야 할 것은 모든 문자가 lowercase에 있는지 확인하고 중복 된 항목이 없도록 set을 사용하여 결과를 결합하는 것입니다.

print len(set(re.findall('\w+', text.lower()))) 
0

먼저 단어 목록을 가져와야합니다. eandersson 제안대로 정규식을 사용할 수 있습니다

import re 
words = re.findall('\w+', text) 

지금, 당신은 고유의 항목 수를 싶어. 이 작업에는 몇 가지 방법이 있습니다. 한 가지 방법은 단어를 통해 목록을 반복하고 당신이 단어를 본 횟수를 추적하기 위해 사전을 사용하는 것입니다 :

이제
cwords = {} 
for word in words: 
    try: 
     cwords[word] += 1 
    except KeyError: 
     cwords[word] = 1 

가, 마지막으로, 당신은

에 의해 독특한 단어의 수를 얻을 수 있습니다
len(cwords) 
+0

dict와 함께 try/except 대신'collections.Counter()'의'collections.defaultdict (int)'를 사용할 수 있습니다. 사실이 경우 고유 단어의 수를 원한다는 것을 알기 때문에 필요한 것은'set()'뿐입니다. –

0

저는 파이썬 내장 세트 유형을 사용하는 것이 적절하다고 생각합니다. 먼저 '.'을 제거하면 해결할 수 있다고 생각합니다. 다음과 같이 교체하면됩니다.

text = "There is one handsome boy. The boy has now grown up. He is no longer a boy now." 
punc_char= ",.?!'" 
for letter in text: 
    if letter == '"' or letter in punc_char: 
     text= text.replace(letter, '') 
text= set(text.split()) 
len(text) 

이 작업을 수행하면됩니다. 그리고 다른 기호 나 구두점이 필요한 경우 쉽게 을 punc_char에 추가하면 필터링 할 수 있습니다. 아브라함 J. 당신이 단어를 가지고 있기 때문에 실제 숫자는 14이 될 것이라는 점을 염두에

+0

문자열에',',''','?','!'또는 다른 문자가 있으면 어떨까요? 그 사람들을위한 수표를 하드 코딩해야할까요? 질문의 텍스트는 분명히 예일뿐입니다. – eandersson

+0

그는 다음과 같은 것을 사용할 수 있습니다 : punc_char = '.,!?' 그런 다음 "하드 코드"대신 사용하십시오. " 그래서 그는 punc_char의 문자와 같은 것을 말할 것입니다 : – user2288672

관련 문제