使用PySpark代码在文档分类中包含关键字词典

时间:2017-10-26 15:30:30

标签: apache-spark pyspark apache-spark-mllib

我正在尝试使用PySpark执行文档分类。

我正在使用以下步骤:

   
# Tokenizer

tokenizer = Tokenizer().setInputCol("text").setOutputCol("words")

# Stop Word removal

    updated_stopwords_list = list(set(StopWordsRemover().getStopWords() + 
    custom_stopword_list))

remover_custom = StopWordsRemover(inputCol="words", outputCol="filtered", 
stopWords=updated_stopwords_list)

# HashingTF

hashingTF = HashingTF().setNumFeatures(1000).setInputCol("filtered").setOutputCol("rawFeatures")

# IDF

idf = 
IDF().setInputCol("rawFeatures").setOutputCol("features").setMinDocFreq(0)
pipeline=Pipeline(stages=[tokenizer,remover_custom,hashingTF,idf])

我正在使用它。

现在,在删除停用词之后,我想要包含一个关键字词典(数据字典),以便它将从数组中选择单词(输出的停用词移除器是一个单词数组),它存在于那本字典。

任何人都可以指导我如何做到这一点?我正在从CSV文件中读取关键字词典。

1 个答案:

答案 0 :(得分:1)

如果您不需要使用HashingTF,可以使用CountVectorizer强制将词汇表作为关键字列表,这是一个选项:

link "Foo", to: reencode(post_path(...))

否则udf路由始终是一个选项。类似的东西:

# Prepare keyword list to go into CountVectorizer. Can also use Tokenizer if your keywords are only single words
str_to_arr_udf = udf(lambda s: [s], ArrayType(StringType()))

# Fit CountVectorizer to keywords list so vocabulary = keywords
keyword_df = spark.read.format("csv").load(csv_file)
keyword_df.withColumn("filtered", str_to_arr_udf("keyword"))
cv = CountVectorizer(inputCol="filtered", outputCol="filtered_only_keywords", binary=True)
cvm = cv.fit(keyword_df)

# Transform the actual dataframe
cv.transform(df_output_from_stopwords)

假设此关键字列表不包含StopWordsRemover列表中的任何单词,则实际上不需要StopWordsRemover步骤。