语境中最常见的词语语料库在python中

时间:2013-01-24 11:57:03

标签: python nltk

使用以下def来查找语料库中最常用的10个单词(使用Python)后,我必须比较所述语料库的不同子类别中这10个单词的上下文。

def meest_freq(mycorpus):
    import string
    woorden = mycorpus.words()
    zonderhoofdletters = [word.lower() for word in woorden]
    filtered = [word for word in zonderhoofdletters if word not in stopList]
    no_punct = [s.translate(None, string.punctuation) for s in filtered]
    word_counter = {}
    D = defaultdict(int)
    for word in no_punct:
        D[word] +=1
    popular_words = sorted(D, key = D.get, reverse = True)
    woord1 = popular_words[1]
    woord2 = popular_words[2]
    woord3 = popular_words[3]
    woord4 = popular_words[4]
    woord5 = popular_words[5]
    woord6 = popular_words[6]
    woord7 = popular_words[7]
    woord8 = popular_words[8]
    woord9 = popular_words[9]
    woord10 = popular_words[10]
    print "De 10 meest frequente woorden zijn: ", woord1, ",", woord2, ',', woord3, ',', woord4, ',', woord5, ',', woord6, ',', woord7, ',', woord8, ',', woord9, "en", woord10
    return popular_words

我想使用以下代码来执行此操作:

def context(cat):
    words = popular_words[:10]
    context = words.concordance()
    print context

不幸的是我一直得到“AttributeError:'str'对象没有属性'concordance' 有谁知道为什么我不能在第二个def中使用我的第一个代码块的结果?我认为通过使用return语句它应该能够工作。

1 个答案:

答案 0 :(得分:1)

  

有谁知道为什么我不能在第二个def中使用我的第一个代码块的结果?我认为通过使用return语句它应该能够工作。

因为函数不返回变量,所以它们返回值

popular_words 中使用的context 来自meest_freq;它来自某个地方的某个全局变量。在meest_freq内,popular_words是本地的。这是因为规则:如果你在函数内部指定一个名称,那么它就是一个本地名称,除非你用global语句说明。在context中,没有popular_words的赋值,因此Python会查找具有该名称的全局。这个全局包含了你不期望它的东西,可能是因为你正在测试解释器中的函数(也许你已经考虑并修复了以前版本的函数......)。

请不要尝试为此使用全局变量。您已经正确地学习了这一课,从函数中获取信息的方法是通过返回值。与此相对应;获取信息进入函数的方法是将其作为参数传递给它。与meest_freq了解语料库的方式相同(因为您将其作为mycorpus传递),因此context应该知道流行的词语。

某处你必须拥有调用这两个函数的代码。该代码应采用从meest_freq返回的,并将其传递给context,就像它将语料库传递给meest_freq一样。

或者,如果您将语料库传递给context,那么您可以在那里进行调用。由于你的名字,很难知道组织事物的正确方法是什么;我不知道cat应该是什么意思,或context与任何内容有什么关系,或concordance在这种情况下的含义。