从 Spark 中的文本数据中删除 html 代码

问题描述 投票:0回答:1

我正在处理 Stack Exchange 数据转储,我想从经常出现的代码中清理问题的主体。

我尝试使用 BeautifulSoup,但它留下了代码中出现的文本,我想删除 < pre >< code> 和 < /code > < /pre > 之间的所有内容。也许可以用正则表达式来完成?最好使用 Spark。

pyspark nlp text-processing
1个回答
0
投票

这样的东西可能有用

# re example
import re
s1 = "< pre >< code> some sample code < /code > < /pre >."
p = re.compile(r"< pre >< code>(.*?)< /code > < /pre >")
print(p.search(s1).group(1))

# convert to UDF
from pyspark.sql.functions import udf, col
from pyspark.sql.types import StringType
codeFinder = udf(lambda x: p.search(x).group(1), returnType=StringType())
df = df.withColumn('codeText', codeFinder(col('htmlCol')))

如果我误解了你的问题,而你想去掉代码块,那么这样的事情可能会奏效

# re example
import re
s2 = "a text < pre >< code> some sample code < /code > < /pre > b text"
s3 = "a text < pre >< code> some sample code < /code > < /pre > b text < pre >< code> some sample code < /code > < /pre > c text"
pattern = r"< pre >< code>(.*?)< /code > < /pre >"
print(re.sub(pattern=pattern, repl='', string=s2))  # a text  b text
print(re.sub(pattern=pattern, repl='', string=s3))  # a text  b text  c text

# UDF example
from pyspark.sql.functions import udf, col
from pyspark.sql.types import StringType
codeStripper = udf(lambda x: re.sub(pattern=pattern, repl='', string=x), returnType=StringType())

df = df.withColumn('codelessText', codeStripper(col('htmlCol')))
© www.soinside.com 2019 - 2024. All rights reserved.