Clojure-Code von Map-Invert angepasst

  • Ich wollte Folgendes tun:

    • Zählen Sie die Häufigkeit der Wörter in einem Text (über 5 Buchstaben)
    • Invertieren Sie die Karte der Wörter in Frequenzen, gruppieren Sie jedoch Wörter, die bei der Umkehrung die gleiche Häufigkeit haben.
    • Sortieren Sie die invertierte Karte nach absteigender Reihenfolge der Schlüssel und nehmen Sie die top 25.

    Hier ist der Code, den ich gefunden habe. Habe ich das Rad mit map-invert-preserve-dups neu erfunden? Gibt es eine knappere Möglichkeit, etwas zu tun, was ich getan habe? Mache ich etwas unnötig (d. H. (~k)?

     (defn map-invert-preserve-dups
      [m]
      (reduce
        (fn [m [k v]]
          (if (contains? m v)
            (assoc m v (cons k (get m v)))
            (assoc m v `(~k))))
        {}
        m))
    
    (->> "http://www.weeklyscript.com/Pulp%20Fiction.txt"
      (slurp)
      (re-seq #"\w{5,}")
      (frequencies)
      (map-invert-preserve-dups)
      (sort)
      (reverse)
      (take 25))
     
    25 March 2016
    Jamal
0 answers