我正在尝试使用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文件中读取关键字词典。
答案 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步骤。