使用以下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语句它应该能够工作。
答案 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
在这种情况下的含义。