首页 > 解决方案 > 在 pyspark 数据框中添加 POS 词性列

问题描述

我正在使用 pyspark 或 nltk.pos_tag 在 pyspark 数据框中添加一列以查看单词是否为 NOUN、VERB、ADJ、ADV、ADP、PROPN

这是 pyspark 表。

------------------------
| event_dt   | words   |
------------------------
| 2020-09-02 | mifi    |
| 2020-09-02 | hotspot |
| 2020-09-03 | service |
| 2020-09-03 | word    |
| 2020-09-03 | plan    |

两列都在继续。

这是我正在寻找使用 pyspark 的结果。

-------------------------------
| event_dt   | words   | pos  |
-------------------------------
| 2020-09-02 | mifi    | ADJ  |
| 2020-09-02 | hotspot | ADJ  |
| 2020-09-03 | service | ADJ  |
| 2020-09-03 | word    | NOUN |
| 2020-09-03 | plan    | NOUN |

我不确定“单词”列中的单词在哪里进行比较以得到 ADJ、NOUN、PRONOUN 等的结果。

我在这里先向您的帮助表示感谢!

标签: pythonpysparknlpnltkpos-tagger

解决方案


处理这种情况的最好方法是使用which is nothing butwhen() otherwise()if else

一个先决条件:只需添加列表中的所有单词

在此处创建数据框

df = spark.createDataFrame([("2020-09-02","mifi"),("2020-09-02","hotspot"),("2020-09-02","service"),("2020-09-02","word"),("2020-09-02","plan")],["event_dt","word"])
df.show(truncate=False)
+----------+-------+
|event_dt  |word   |
+----------+-------+
|2020-09-02|mifi   |
|2020-09-02|hotspot|
|2020-09-02|service|
|2020-09-02|word   |
|2020-09-02|plan   |
+----------+-------+

单词列表 whihc 是形容词 & when() else() 条件

adj = ["mifi", "hotspot","service"]
df = df.withColumn("pos", F.when(F.col("word").isin(adj), F.lit("ADJ")).otherwise(F.lit("NOUN")))
df.show(truncate=False)

最终输出

+----------+-------+----+
|event_dt  |word   |pos |
+----------+-------+----+
|2020-09-02|mifi   |ADJ |
|2020-09-02|hotspot|ADJ |
|2020-09-02|service|ADJ |
|2020-09-02|word   |NOUN|
|2020-09-02|plan   |NOUN|
+----------+-------+----+

推荐阅读