从pyspark中的列中删除非英语单词

2024-07-02 12:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理pyspark数据帧,如下所示:

+-------+--------------------------------------------------+
|     id|                                             words|
+-------+--------------------------------------------------+
|1475569|[pt, m, reporting, delivery, scam, thank, 0a, 0...|
|1475568|[, , delivered, trblake, yahoo, com, received, ...|
|1475566|[,  marco, v, washin, gton, thursday, de, cembe...|
|1475565|[, marco, v, washin, gton, wednesday, de, cembe...|
|1475563|[joyce, 20, begin, forwarded, message, 20, memo...|
+-------+--------------------------------------------------+

df的数据类型:

id: 'bigint'
words: 'array<string>'

我想从“单词”列中删除非英语单词(包括数值或带数字的单词,如Bun20),我已经删除了停止词,但如何从该列中删除其他非英语单词

请帮忙


Tags: 数据ptidde单词pysparkwordsmarco
1条回答
网友
1楼 · 发布于 2024-07-02 12:34:19

您可以使用UDF检查数组中的每个单词是否在nltk语料库中:

import pyspark.sql.functions as F
import nltk
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()

nltk.download('words')
nltk.download('wordnet')

@F.udf('array<string>')
def remove_words(words):
    return [word for word in words if wnl.lemmatize(word) in nltk.corpus.words.words()]

df2 = df.withColumn('words', remove_words('words'))

相关问题 更多 >