2017-03-28 10 views
-2

我在做一個文本分類項目,並使用mllib中的管道方法來鏈接特徵提取階段。我的數據集由英語句子組成。我可以直接在管道中使用來自mllib的Tokenizer和TFIDF Vectorizer庫。在pyspark中編寫自定義的NER和POS標記器以用於流水線方法以用於文本輸入的特徵提取

但是作爲特徵提取過程的一部分,我還需要提取POS標籤和NER標籤。 Pyspark沒有一個庫,我不知道如何爲NER和POS標籤寫一個定製變壓器。我對Spark和Python非常陌生。我正在使用Spark 1.6和Python 2.7。

回答

0

你可以試試這個:

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)) 
+0

工作完美的罰款。我也知道如何繼續做NER。非常感謝! – Aishwarya

相關問題