Sam, I'm not an expert, but I think making `co-occurrences` recursive is slightly simpler. Something like:
(defn co-occurrences [db ht depth tags] (if (zero? depth) > tags > (recur db ht (dec depth) (co-ocs db ht tags)))) You'll note that I'm not reducing into tags on the last line. My version of `co-ocs` returns all of the tags you care about, which also helps simplify `co-occurrences`. I also formatted the `co-ocs` function with a thread-last macro to make it easier to read and manipulate. I had to add a filter step to `co-ocs` in order for this to work the way you describe; otherwise, it just returns all of the hashtags I've ever used. Let me know if you'd like to see that code. Chris On Wed, Dec 3, 2014 at 9:49 PM, Sam Raker <sam.ra...@gmail.com> wrote: > EDIT > > On Wednesday, December 3, 2014 10:45:33 PM UTC-5, Sam Raker wrote: >> >> I've got a decent-sized corpus of tweets, organized by hashtag, in a >> CouchDB db. I'm doing some initial explorations of my data, and was curious >> about which hashtags show up together in tweets. I want to do a NSA-style >> "hops" kind of algorithm--get all the hashtags that show up in the same >> tweets as hashtags that show up in the same tweets as hashtags that show up >> in the same tweets as my "target hashtag", to an arbitrary depth. I wrote >> this: >> >> (defn co-ocs [db ht & [s]] >> (reduce into (or s #{}) >> (map #(map :text %) >> (map #(get-in % [:entities >> :hashtags]) >> (:tweets (clutch/get-document db ht)))))) >> >> (defn co-occurrences [db ht depth] >> (loop [tags (co-ocs db ht) i 1] >> (if (<= i depth) (recur >> (reduce into tags >> (map (partial co-ocs db) tags)) >> (inc i)) >> tags))) >> >> It works, but loop + incrementing a counter seems profoundly un-clojuric. >> I suppose I could use `dotimes` + an atom, but that doesn't seem much >> better. Any suggestions? >> > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.