Пример #1
0
    def more_like_this(self, unit, top=5):
        """Find closely similar units."""
        if settings.MT_WEBLATE_LIMIT >= 0:
            queue = multiprocessing.Queue()
            proc = multiprocessing.Process(
                target=more_like_queue,
                args=(unit.pk, unit.source, top, queue)
            )
            proc.start()
            proc.join(settings.MT_WEBLATE_LIMIT)
            if proc.is_alive():
                proc.terminate()

            if queue.empty():
                raise Exception(
                    'Request for more like {0} timed out.'.format(unit.pk)
                )

            more_results = queue.get()
        else:
            more_results = more_like(unit.pk, unit.source, top)

        same_results = fulltext_search(
            unit.get_source_plurals()[0],
            [unit.translation.language.code],
            {'source': True}
        )

        return self.filter(
            pk__in=more_results - same_results,
            translation__language=unit.translation.language,
            translated=True
        ).exclude(
            pk=unit.id
        )
Пример #2
0
    def more_like_this(self, unit, top=5):
        """
        Finds closely similar units.
        """
        if appsettings.MT_WEBLATE_LIMIT >= 0:
            queue = multiprocessing.Queue()
            proc = multiprocessing.Process(
                target=more_like_queue,
                args=(unit.pk, unit.source, top, queue)
            )
            proc.start()
            proc.join(appsettings.MT_WEBLATE_LIMIT)
            if proc.is_alive():
                proc.terminate()

            if queue.empty():
                raise Exception('Request timed out.')

            more_results = queue.get()
        else:
            more_results = more_like(unit.pk, unit.source, top)

        same_results = fulltext_search(
            unit.get_source_plurals()[0],
            unit.translation.language.code,
            {'source': True}
        )

        return self.filter(
            pk__in=more_results - same_results,
            translation__language=unit.translation.language,
            translated=True
        ).exclude(
            pk=unit.id
        )
Пример #3
0
    def more_like_this(self, unit, top=5):
        """Find closely similar units."""
        if settings.MT_WEBLATE_LIMIT >= 0:
            queue = multiprocessing.Queue()
            proc = multiprocessing.Process(
                target=more_like_queue,
                args=(unit.pk, unit.source, top, queue)
            )
            proc.start()
            proc.join(settings.MT_WEBLATE_LIMIT)
            if proc.is_alive():
                proc.terminate()

            if queue.empty():
                raise Exception(
                    'Request for more like {0} timed out.'.format(unit.pk)
                )

            more_results = queue.get()
        else:
            more_results = more_like(unit.pk, unit.source, top)

        return self.filter(
            pk__in=more_results,
            translation__language=unit.translation.language,
            state__gte=STATE_TRANSLATED,
        )
Пример #4
0
    def more_like_this(self, unit, top=5):
        """Find closely similar units."""
        source = unit.get_source_plurals()[0]
        if settings.MT_WEBLATE_LIMIT >= 0:
            queue = multiprocessing.Queue()
            proc = multiprocessing.Process(target=more_like_queue,
                                           args=(unit.pk, unit.source, top,
                                                 queue))
            proc.start()
            proc.join(settings.MT_WEBLATE_LIMIT)
            if proc.is_alive():
                proc.terminate()

            if queue.empty():
                raise Exception('Request for more like {0} timed out.'.format(
                    unit.pk))

            more_results, scores = queue.get()
        else:
            more_results, scores = more_like(unit.pk, unit.source, top)

        result = self.filter(
            pk__in=more_results,
            translation__language=unit.translation.language,
            state__gte=STATE_TRANSLATED,
        ).exclude(
            # These are covered by same_result
            Q(source__iexact=source)
            | Q(source__istartswith=join_plural([source, ''])) | Q(pk=unit.id))
        for item in result:
            item.score = scores[item.pk]
        return result
Пример #5
0
    def more_like_this(self, unit, top=5):
        """Find closely similar units."""
        if settings.MT_WEBLATE_LIMIT >= 0:
            queue = multiprocessing.Queue()
            proc = multiprocessing.Process(target=more_like_queue,
                                           args=(unit.pk, unit.source, top,
                                                 queue))
            proc.start()
            proc.join(settings.MT_WEBLATE_LIMIT)
            if proc.is_alive():
                proc.terminate()

            if queue.empty():
                raise Exception('Request for more like {0} timed out.'.format(
                    unit.pk))

            more_results = queue.get()
        else:
            more_results = more_like(unit.pk, unit.source, top)

        return self.filter(
            pk__in=more_results,
            translation__language=unit.translation.language,
            state__gte=STATE_TRANSLATED,
        )
Пример #6
0
    def more_like_this(self, unit, top=5):
        """
        Finds closely similar units.
        """
        more_results = more_like(unit.checksum, unit.source, top)

        same_results = fulltext_search(unit.get_source_plurals()[0], unit.translation.language.code, True, False, False)

        checksums = more_results - same_results

        return self.filter(
            checksum__in=checksums, translation__language=unit.translation.language, translated=True
        ).exclude(pk=unit.id)
Пример #7
0
    def more_like_this(self, unit, top=5):
        """
        Finds closely similar units.
        """
        more_results = more_like(unit.checksum, unit.source, top)

        same_results = fulltext_search(unit.get_source_plurals()[0],
                                       unit.translation.language.code, True,
                                       False, False)

        checksums = more_results - same_results

        return self.filter(checksum__in=checksums,
                           translation__language=unit.translation.language,
                           translated=True).exclude(pk=unit.id)
Пример #8
0
def more_like_queue(pk, source, top, queue):
    """
    Multiprocess wrapper around more_like.
    """
    result = more_like(pk, source, top)
    queue.put(result)
Пример #9
0
def more_like_queue(checksum, source, top, queue):
    """
    Multiprocess wrapper around more_like.
    """
    result = more_like(checksum, source, top)
    queue.put(result)