首页 文章

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

提问于
浏览
0

在使用以下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 回答

  • 1

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

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

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

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

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

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

相关问题