在pyspark中编写自定义NER和POS标记器,以在管道方法中用于文本输入的特征提取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在pyspark中编写自定义NER和POS标记器,以在管道方法中用于文本输入的特征提取相关的知识,希望对你有一定的参考价值。

我正在做一个文本分类项目,我正在使用mllib中的管道方法来链接特征提取阶段。我的数据集由英语句子组成。我有来自mllib的Tokenizer和TFIDF Vectorizer库,我可以在管道中直接使用它们。

但作为特征提取过程的一部分,我还需要提取POS标签和NER标签。 Pyspark没有它的库,我不知道如何为NER和POS标记编写自定义变换器。我是Spark和Python的新手。我使用的是Spark 1.6和Python 2.7。

答案

你可以试试这个:

class POSWordTagger(Transformer, HasInputCol, HasOutputCol):

    @keyword_only
    def __init__(self, inputCol=None, outputCol=None, stopwords=None):
        super(POSWordTagger, self).__init__()
        self.stopwords = Param(self, "stopwords", "")
        self._setDefault(stopwords=set())
        kwargs = self.__init__._input_kwargs
        self.setParams(**kwargs)


    @keyword_only
    def setParams(self, inputCol=None, outputCol=None, stopwords=None):
        kwargs = self.setParams._input_kwargs
        return self._set(**kwargs)


    def setStopwords(self, value):
        self._paramMap[self.stopwords] = value
        return self

    def getStopwords(self):
        return self.getOrDefault(self.stopwords)

    def _transform(self, dataset):

        def f(s):
        tokens = nltk.tokenize.wordpunct_tokenize(s)
        pos_tags = nltk.pos_tag(tokens)
        return pos_tags

        t = ArrayType(StringType())
        out_col = self.getOutputCol()
        in_col = dataset[self.getInputCol()]
        return dataset.withColumn(out_col, udf(f, t)(in_col))

以上是关于在pyspark中编写自定义NER和POS标记器,以在管道方法中用于文本输入的特征提取的主要内容,如果未能解决你的问题,请参考以下文章

在简历 (NER) 中标记自定义实体

如何在 PySpark ML 中创建自定义标记器

spaCy 2.0:保存并加载自定义NER模型

如何在 Apache Spark (pyspark) 中使用自定义类?

如何为 sklearn 的 CountVectorizer 编写自定义标记器以将所有 XML 标记以及打开和关闭标记之间的所有文本视为标记

在 pyspark 中编写自定义 UDAF