【发布时间】:2017-11-13 17:52:27
【问题描述】:
我有一个包含两列 id 和 text 的数据框
我想添加一个新列,其中包含每行文本的字数。
我创建了一个 userdefinedFunction,在其中我从 nltk 实现 word_tokenizer 和 freqDict
word = f.udf(lambda token: word_count)
def word_count(token):
freq_dict = nltk.probability.FreqDist(token)
return [(word, freq) for word, freq in freq_dict.most_common()]
df = df.withColumn('wordcount',word(nltk.word_tokenize(df['text']))
在标记器之后我调用word_count 并希望得到一个包含单词及其频率的元组列表。而是在列中得到这个
[[Ljava.lang.Object;@9b4c4d5, [Ljava.lang.Object;@6a5d7d39, ...
【问题讨论】:
-
我相信
nltk.word_tokenize的使用是这里的问题,因为您在整个列上使用它,而不是每行。您能否尝试使用word_countudf 中的nltk.word_tokenize,以便字数统计将文本作为输入,对其进行标记并返回最常用的单词?
标签: python dataframe pyspark nltk word-count