사용자가 입력 한 특정 텍스트의 작성자가 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'와 같은 실제 문자열? 그래서 저는 변수로 어떻게 작동시킬 수 있을지 궁금해했습니다. 아니면 대안이 될 수 없는지 궁금합니다. 어떤 도움을 많이 주시면 감사하겠습니다.
'part1' 변수의 표현을 보여줄 수 있습니까? 'Bool'의 배열 인 것 같아서'reduce '의'lambda' 함수에 전달할 수 없습니다. –
'i'는 0에서 49 사이의 정수이고, 각각의 count는 0에서 1까지의 비율을 볼 수 있습니다. 그러면 어떻게'i in x'가 사실일까요? –
@CarlesMitjans part1은 내가 어디에 있는지를 반환하는 것으로 가정합니다. 그러나 변수가 아니기 때문에 그럴 수 있다고 생각하지 않습니다. 'the'와 같은 단어가 아닙니다. 내가 'the'로 i를 대치하면, 그것은 [[ 'the', 0.6925910972039971]]을 돌려 준다. –