在使用以下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 回答
因为函数不返回变量,所以它们返回值 .
您在
context
中使用的popular_words
不是来自meest_freq
;它来自某个地方的某个全局变量 . 里面meest_freq
,popular_words
是本地的 . 这是因为规则:如果你在函数内部分配一个名字,它就是一个本地名称,除非你用global
语句说明 . 在context
中,没有对popular_words
的赋值,因此Python会查找具有该名称的全局 . 这个全局包含了你不期望它的东西,也许是因为你正在测试解释器中的函数(也许你已经考虑并修复了以前版本的函数......) .请不要尝试使用全局变量 . 您已经正确地学习了这一课,从函数中获取信息的方法是通过返回值 . 与此相对应;获取信息到函数的方法是将其作为参数传入 . 与
meest_freq
知道语料库的方式相同(因为你将其作为mycorpus
传递),因此应该让context
知道流行语 .某处你必须拥有调用这两个函数的代码 . 该代码应该采用从
meest_freq
返回的值,并将其传递给context
,就像它将语料库传递给meest_freq
一样 .或者,如果您将语料库传递给
context
,那么您可以在那里进行调用 . 由于你的名字,很难知道组织事物的正确方法是什么;我不知道cat
应该是什么意思,或context
与任何事情有什么关系,或concordance
在这种情况下的含义 .