2017-11-13 4 views
2

에 freqDist에서 튜플의 목록을 얻으려면 어떻게 두 개의 열 idtext 나는 단어가 행마다 텍스트에 대한 계산이 포함 된 새 열을 추가 할는 NLTK

와 dataframe 있습니다.

나는 내가 word_count를 호출 단어와 그 주파수와 튜플의 목록을 얻을 수 있도록 노력하겠습니다 토크 나이 후 내가 nltk

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_tokenizerfreqDict을 구현하는 userdefinedFunction을 만듭니다. 대신에 이것을 얻으려면

[[Ljava.lang.Object;@9b4c4d5, [Ljava.lang.Object;@6a5d7d39, ... 
+0

에 UDF 변경 행당. 'word_count' udf 내에서'nltk.word_tokenize'를 시도해보십시오. 단어 수는 텍스트를 입력으로 사용하고, 토큰 화하고 가장 일반적인 단어를 반환합니까? – mkaran

답변

1

UDF의 반환 유형을 지정해야합니다. 당신은 전체 열을 사용하고 있기 때문에 , 아니이

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

같은 스키마를 정의하고 내가`의 사용이 nltk.word_tokenize` 여기에 문제가 생각

f.udf(word_count, schema)