经过一些预处理后,我有一个像这样的数据框。我想从数据框行中的每个列表创建双字母组。下面是我的尝试方式。我说
时出错lambda row: list((map(ngrams(2), row))))
TypeError: ngrams() missing 1 required positional argument: 'n'
ngrams的第一个参数应该是什么?我应该如何修改此代码?
我可能还会在每个功能上问一些问题。但是我很难理解我正在使用的lamda和map函数。请解释一下我将来应该如何在此数据帧上应用lamda和map函数?
数据框
[[ive, searching, right, word, thank, breather], [i, promise, wont, take, help, granted, fulfil, promise], [you, wonderful, blessing, time]]
[[free, entry, 2, wkly, comp, win, fa, cup, final, tkts, 21st, may, 2005], [text, fa, 87121, receive, entry, questionstd, txt, ratetcs, apply, 08452810075over18s]]
[[nah, dont, think, go, usf, life, around, though]]
[[even, brother, like, speak, me], [they, treat, like, aid, patent]]
[[i, date, sunday, will], []]
我需要什么
[(even, brother), (brother,like), (like,speak), (speak,me), (they, treat), (treat,like), (like,aid), (aid,patent)]
我尝试过的
def toBigram(fullCorpus):
bigram = fullCorpus['lemmatized'].apply(
lambda row: list((map(ngrams(2), row))))
return bigram
答案 0 :(得分:2)
调用docker container exec -it 0778c0e3ae05 ash
时,第一个参数必须是函数 name ,而不是函数 call 。 map
是一个函数调用。您不能将ngrams(2)
与ngrams
直接使用。定义一个lambda函数:
map
或使用列表理解:
lambda row: list(map(lambda x:ngrams(x,2), row))
或者使用功能lambda row: [ngrams(x,2) for x in row]
,它也是NLTK的一部分:
bigrams