确定某个文字的作者

时间:2016-11-27 20:55:10

标签: python python-2.7 list nested-lists

我必须确定用户输入的某个文本的作者是melville,莎士比亚还是两者都不是。我开始时找到前50个单词及其三个melvilles和莎士比亚文本的出现率,并将其变成两个单独的列表。然后,我对未知文本做了同样的事情。我想比较未知文本列表与melville和莎士比亚的前50个单词列表及其出现率。如果未知文本中的单词同时出现在melville和莎士比亚中,那么我想比较melville和莎士比亚之间出现的单词的比例。哪一个发生率最高,我们将从文本中假设它。优选地,通过所有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 '!"$%&()*+,-./:;<=>?@[\\]^_`{|}~':
        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'这样的实际字符串?所以我想知道如何让它与变量一起工作,或者如果我不能那么什么是另类?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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

异常条款是否符合您的要求?

reduce无法找到匹配的内容时,您收到的错误消息来自filter尝试处理空列表,如果您尝试匹配整数,则会发生这种情况i 1}}在这种情况下,比率将是A

中列表的第二个元素