小编vnd*_*hol的帖子

使用PySpark进行高效的文本预处理(清除,标记化,停用词,词干,过滤器)

最近,我开始在《学习火花》一书中学习火花。从理论上讲,一切都是清楚的,在实践中,我面对的事实是,我首先需要对文本进行预处理,但是没有关于此主题的实际提示。

我考虑到的第一件事是,现在最好使用数据框而不是RDD,因此我对数据框进行了预处理。

所需的操作:

  1. 清除标点符号中的文本(regexp_replace)
  2. 令牌化(令牌生成器)
  3. 删除停用词(StopWordsRemover)
  4. 灭菌(SnowballStemmer)
  5. 过滤短词(udf)

我的代码是:

from pyspark.sql import SparkSession
from pyspark.sql.functions import udf, col, lower, regexp_replace
from pyspark.ml.feature import Tokenizer, StopWordsRemover
from nltk.stem.snowball import SnowballStemmer

spark = SparkSession.builder \
    .config("spark.executor.memory", "3g") \
    .config("spark.driver.cores", "4") \
    .getOrCreate()
df = spark.read.json('datasets/entitiesFull/full').select('id', 'text')

# Clean text
df_clean = df.select('id', (lower(regexp_replace('text', "[^a-zA-Z\\s]", "")).alias('text')))

# Tokenize text
tokenizer = Tokenizer(inputCol='text', outputCol='words_token')
df_words_token = tokenizer.transform(df_clean).select('id', 'words_token')

# Remove stop words
remover = StopWordsRemover(inputCol='words_token', outputCol='words_clean')
df_words_no_stopw = remover.transform(df_words_token).select('id', 'words_clean')

# Stem text
stemmer …
Run Code Online (Sandbox Code Playgroud)

python text-processing apache-spark apache-spark-sql pyspark

7
推荐指数
1
解决办法
1966
查看次数