ठीक है, आप नहीं कर सकते। चूंकि हैशिंग गैर-इंजेक्शन है, इसमें कोई व्यस्त कार्य नहीं है। दूसरे शब्दों में टोकन की अनंत संख्या एक बाल्टी को मैप कर सकती है, इसलिए यह कहना असंभव है कि वास्तव में कौन सा है।
यदि आप एक बड़े हैश का उपयोग कर रहे हैं और अद्वितीय टोकन की संख्या अपेक्षाकृत कम है तो आप अपने डेटासेट से बाल्टी से संभावित टोकन तक लुकअप टेबल बनाने का प्रयास कर सकते हैं। यह एक से कई मैपिंग है लेकिन यदि उपरोक्त स्थितियों को पूरा किया जाता है तो विवादों की संख्या अपेक्षाकृत कम होनी चाहिए।
यदि आपको एक परिवर्तनीय परिवर्तन की आवश्यकता है तो आप Tokenizer
और StringIndexer
गठबंधन का उपयोग कर सकते हैं और मैन्युअल रूप से एक स्पैस फीचर वेक्टर बना सकते हैं।
यह भी देखें: What hashing function does Spark use for HashingTF and how do I duplicate it?
संपादित:
स्पार्क में 1.5+ (PySpark 1.6+) आप प्रतिवर्ती परिवर्तन और दुकानों शब्दावली लागू होता है CountVectorizer
उपयोग कर सकते हैं।
पायथन:
from pyspark.ml.feature import CountVectorizer
df = sc.parallelize([
(1, ["foo", "bar"]), (2, ["foo", "foobar", "baz"])
]).toDF(["id", "tokens"])
vectorizer = CountVectorizer(inputCol="tokens", outputCol="features").fit(df)
vectorizer.vocabulary
## ('foo', 'baz', 'bar', 'foobar')
स्काला:
import org.apache.spark.ml.feature.{CountVectorizer, CountVectorizerModel}
val df = sc.parallelize(Seq(
(1, Seq("foo", "bar")), (2, Seq("foo", "foobar", "baz"))
)).toDF("id", "tokens")
val model: CountVectorizerModel = new CountVectorizer()
.setInputCol("tokens")
.setOutputCol("features")
.fit(df)
model.vocabulary
// Array[String] = Array(foo, baz, bar, foobar)
जहां 0 स्थान पर तत्व सूचकांक 1 और इतने पर करने के लिए 1 की स्थिति में सूचकांक 0, तत्व से मेल खाती है।
मैं इसे जोड़ना चाहूंगा जैसा कि आप [docs] (https://spark.apache.org/docs/1.6.0/api/python/pyspark.mllib.html) में 1.2.0 के बाद देख सकते हैं , आप indexOf (टर्म) को कॉल कर सकते हैं – Matt