我想从函数返回一个从nltk生成的单词数组。为什么这个函数只返回一个单词,如果我注释返回并取消注释,则返回5个单词。
我想返回它们,并在其他功能中使用它们。
file = open('Text/Walden.txt', 'r',encoding="utf8")
walden = file.read()
walden = walden.split()
def makePairs(arr):
pairs = []
for i in range(len(arr)):
if i < len(arr)-1:
temp = (arr[i], arr[i+1])
pairs.append(temp)
return pairs
def generate(cfd, word = 'the', num = 5):
for i in range(num):
arr = [] # make an array with the words shown by proper count
for j in cfd[word]:
for k in range(cfd[word][j]):
arr.append(j)
word = arr[int((len(arr))*random.random())] # choose the word randomly from the conditional distribution
print(word, end=' ')
return(word)
#return random.choices(arr, k=num)
pairs = makePairs(walden)
cfd = nltk.ConditionalFreqDist(pairs)
generate(cfd)
输出现在是这样的:
little The print The
had
>>>
或
But girl?"— print girl?"—
cases
>>>
答案 0 :(得分:0)
您的return
语句缩进太多了。退一步:
def generate(cfd, word = 'the', num = 5):
for i in range(num):
arr = [] # make an array with the words shown by proper count
for j in cfd[word]:
for k in range(cfd[word][j]):
arr.append(j)
#print(word, end=' ')
word = arr[int((len(arr))*random.random())] # choose the word randomly from the conditional distribution
return(word)
当您注释掉return
并使用print
语句时,print
中的每次迭代都会调用for i in range(num)...
。这就是为什么你得到5个打印输出的原因。
答案 1 :(得分:0)
它只返回一个单词,因为for
语句在word
循环内。它将经历第一次迭代,随机选择random.choices
并立即将其返回。
这就是我修复它的方式 - 这也是def generate(cfd, word = 'the', num = 5):
arr = []
for j in cfd[word]: # assuming your code to parse cfd is correct
for k in range(cfd[word][j]):
arr.append(j)
return random.choices(arr, k=num)
的一个整洁的地方:
{{1}}