예제 #1
0
파일: harvest.py 프로젝트: santoshpy/manabi
def harvest_tweets(fact, tweets_per_fact=10):
    if settings.TWITTER_APP_KEY is None:
        return

    if not fact.expression:
        return

    for expression in search_expressions(fact):
        SEARCH_COUNT = 100
        tweets = _search_tweets(expression, SEARCH_COUNT)
        tweets = _cull_spammy_tweets(tweets, SEARCH_COUNT)

        tweets_with_frequencies = []
        for tweet in tweets:
            frequencies = word_frequencies(tweet['text'])
            try:
                average = sum(frequencies) / float(len(frequencies))
            except ZeroDivisionError:
                average = 0
            tweets_with_frequencies.append((average, tweet))

        sorted_tweets = sorted_by_usefulness_estimate(tweets_with_frequencies)

        top_tweets = sorted_tweets[:tweets_per_fact]

        for average_word_frequency, tweet in top_tweets:
            try:
                ExpressionTweet.objects.create(
                    search_expression=expression,
                    tweet=tweet,
                    tweet_id=tweet['id_str'],
                    average_word_frequency=average_word_frequency,
                )
            except IntegrityError:
                continue
예제 #2
0
파일: api_views.py 프로젝트: aehlke/manabi
    def get_queryset(self):
        fact = get_object_or_404(Fact, id=self.kwargs["fact_id"])

        # TODO: Use DRF permissions.
        if fact.deck.owner_id != self.request.user.id:
            raise PermissionDenied("You do not own this fact.")

        tweets = ExpressionTweet.objects.filter(search_expression__in=search_expressions(fact))
        tweets = tweets.order_by("-average_word_frequency")
        return tweets[: self.MAX_COUNT]
예제 #3
0
    def get_queryset(self):
        fact = get_object_or_404(Fact.objects.select_related('deck'),
                                 id=self.kwargs['fact_id'])

        # TODO: Use DRF permissions.
        if fact.deck.owner_id != self.request.user.id:
            raise PermissionDenied('You do not own this fact.')

        tweets = ExpressionTweet.objects.filter(
            search_expression__in=search_expressions(fact), )
        tweets = tweets.order_by('-average_word_frequency')
        return tweets[:self.MAX_COUNT]
예제 #4
0
def harvest_tweets(fact, tweets_per_fact=10):
    if settings.TWITTER_APP_KEY is None:
        return

    if not fact.expression:
        return

    for expression in search_expressions(fact):
        SEARCH_COUNT = 100
        tweets = _search_tweets(expression, SEARCH_COUNT)
        tweets = _cull_spammy_tweets(tweets, SEARCH_COUNT)

        tweets_with_frequencies = []
        for tweet in tweets:
            frequencies = word_frequencies(tweet['text'])
            try:
                average = sum(frequencies) / float(len(frequencies))
            except ZeroDivisionError:
                average = 0
            tweets_with_frequencies.append((average, tweet))

        sorted_tweets = sorted_by_usefulness_estimate(
            tweets_with_frequencies)

        top_tweets = sorted_tweets[:tweets_per_fact]

        for average_word_frequency, tweet in top_tweets:
            try:
                ExpressionTweet.objects.create(
                    search_expression=expression,
                    tweet=tweet,
                    tweet_id=tweet['id_str'],
                    average_word_frequency=average_word_frequency,
                )
            except IntegrityError:
                continue