2017-03-28 1 views
-2

Ich mache ein Textklassifikationsprojekt und verwende die Pipeline-Methode von mllib, um die Merkmalsextraktionsstufen zu verketten. Mein Datensatz besteht aus englischen Sätzen. Ich habe den Tokenizer und die TFIDF Vectorizer-Bibliotheken von mllib, die ich direkt in der Pipeline verwenden kann.Schreiben eines benutzerdefinierten NER- und POS-Taggers in pyspark zur Verwendung in der Pipeline-Methode zur Merkmalsextraktion von Texteingaben

Aber als Teil der Merkmalsextraktion muss ich auch POS-Tags und NER-Tags extrahieren. Pyspark hat keine Bibliothek dafür und ich weiß nicht, wie ich einen kundenspezifischen Transformator für NER und POS-Tagging schreiben kann. Ich bin sehr neu in Spark und Python. Ich benutze Spark 1.6 und Python 2.7.

Antwort

0

Sie können dies versuchen:

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

Arbeitete völlig in Ordnung. Ich hatte auch die Idee, wie man NER macht. Danke vielmals! – Aishwarya

Verwandte Themen