2016-11-27 5 views
1

사용자가 입력 한 특정 텍스트의 작성자가 melville, shakespeare 또는 둘 다인지 결정해야합니다. 나는 멜빌과 세익스피어의 세 가지 텍스트에 대해 상위 50 단어와 그 발생 비율을 찾아 두 개의 개별 목록으로 변환하는 것으로 시작했습니다. 그런 다음 알 수없는 텍스트로 동일한 작업을 수행했습니다. 나는 미지의 텍스트 목록을 멜빌과 셰익스피어의 상위 50 단어 목록과 그 발생 비율과 비교하기를 원합니다. 알려지지 않은 텍스트의 단어가 멜빌과 셰익스피어에 모두있는 경우 멜빌과 셰익스피어 사이의 단어 발생 빈도를 비교하고 싶습니다. 어느 것이 가장 높은 발생률을 가지는지, 우리는 텍스트에서 추정 한 것입니다. 가급적 더 정확한 결정을 내리려면 50 단어를 모두 읽는 것이 좋습니다. 이것은 지금까지 내 코드입니다 :특정 텍스트의 작성자 결정

def identifyAuthor(textFile): 
    counts = {} 
    A = [] 
    B = [] 
    C = [] 

    B = melville() 
    C = shakespeare() 

    for words in [textFile]: 
     text = open(words, 'r').read() 
     test = text.lower() 

    for ch in '!"$%&()*+,-./:;<=>[email protected][\\]^_`{|}~': 
     text = text.replace(ch, ' ') 
     words = text.split() 

    for w in words: 
     counts[w] = counts.get(w, 0) + 1 

    items = list(counts.items()) 
    items.sort() 
    items.sort(key=byFreq, reverse = True) 

    for i in range(50): 
     word, count = items[i] 
     count = count/float(len(counts)) 
     A += [[word, count]] 

    for i in range(50): 
     part1 = filter(lambda x: i in x, A) 
     part2 = reduce(lambda x, y: x + y, part1) 
    return part2[1] 

내가 오류가 점점 오전되는 데 문제 :

TypeError: reduce() of empty sequence with no initial value 나는 필터가 변수를 검색 할 수 없습니다 때문입니다 가정하고 검색하는 오전 'the'와 같은 실제 문자열? 그래서 저는 변수로 어떻게 작동시킬 수 있을지 궁금해했습니다. 아니면 대안이 될 수 없는지 궁금합니다. 어떤 도움을 많이 주시면 감사하겠습니다.

+0

'part1' 변수의 표현을 보여줄 수 있습니까? 'Bool'의 배열 인 것 같아서'reduce '의'lambda' 함수에 전달할 수 없습니다. –

+0

'i'는 0에서 49 사이의 정수이고, 각각의 count는 0에서 1까지의 비율을 볼 수 있습니다. 그러면 어떻게'i in x'가 사실일까요? –

+0

@CarlesMitjans part1은 내가 어디에 있는지를 반환하는 것으로 가정합니다. 그러나 변수가 아니기 때문에 그럴 수 있다고 생각하지 않습니다. 'the'와 같은 단어가 아닙니다. 내가 'the'로 i를 대치하면, 그것은 [[ 'the', 0.6925910972039971]]을 돌려 준다. –

답변

0

정말 답가이 의도하지 않지만, 댓글을 작성하는 것은 지저분한 것 :

a = [] 
a += [['yo',3.24]] 
a += [['ere',1]] 
for i in range(2): 
    part1 = filter(lambda x: i in x, a) 
    try: 
     part2 = reduce(lambda x, y: x + y, part1) 
    except TypeError: 
     pass 
print(part2[1]) 

가 인쇄됩니다

1 

예외 조항은 당신이 원하는 것을 제공 하는가 ?

filter이 일치하는 항목을 찾지 못하면 reduce 빈 목록에서 작업하려고합니다.이 경우 정수 i과 일치하는 항목을 찾을 때 발생합니다. 목록의 두 번째 요소 A