【问题标题】:How to get a list of tuple from freqDist in nltk如何从 nltk 中的 freqDist 获取元组列表
【发布时间】:2017-11-13 17:52:27
【问题描述】:

我有一个包含两列 idtext 的数据框

我想添加一个新列,其中包含每行文本的字数。

我创建了一个 userdefinedFunction,在其中我从 nltk 实现 word_tokenizerfreqDict

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_count udf 中的nltk.word_tokenize,以便字数统计将文本作为输入,对其进行标记并返回最常用的单词?

标签: python dataframe pyspark nltk word-count


【解决方案1】:

您需要指定 UDF 的返回类型。 定义这样的架构

schema = ArrayType(StructType([StructField("word",StringType(), True), StructField("freq",LongType(), True)]))

并将 udf 更改为

f.udf(word_count, schema)

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多