2009-09-21 4 views
0

У меня есть функция, которая берет две строки и выдает значение подобия косинуса, которое показывает взаимосвязь между обоими текстами.Ускорение сравнения текста (с разреженными матрицами)

Если я хочу сравнить 75 текстов друг с другом, мне нужно сделать 5 625 одиночных сравнений, чтобы иметь все тексты по сравнению друг с другом.

Есть ли способ уменьшить это количество сравнений? Например, разреженные матрицы или k-средства?

Я не хочу говорить о своей функции или о способах сравнения текстов. Просто уменьшите количество сравнений.

ответ

1

Что Бен говорит, что это правда, чтобы лучше помочь вам рассказать нам, в чем цель.

Например, одна возможная оптимизация если вы хотите, чтобы найти похожие строки хранят строковые векторы в пространственной структуре данных, такие как квадрадерево, где вы можете прямо отбрасывать векторы, которые слишком далеко друг от друга, избегая многих сравнений.

+0

Да, я хочу найти похожие строки. Более подробная информация содержится в моем комментарии к ответу Бена. Моя база данных (MySQL), похоже, имеет эти пространственные типы: http://dev.mysql.com/doc/refman/5.0/en/mysql-spatial-datatypes.html. Нет ничего о квадтрите !? – caw

+0

Многие виды пространственных индексов могут служить вам хорошо. Читайте о доступных формах MySQL. –

+0

Я уже много читал об этих пространственных функциях. Я добавил абзац об этом на мой вопрос. Можете ли вы мне помочь? – caw

1

Если ваш алгоритм является парным, то вы, вероятно, не сможете уменьшить количество сравнений по определению.

Вам нужно будет использовать другой алгоритм или, по крайней мере, предварительно обработать ваш ввод, если вы хотите уменьшить количество сравнений.

Без подробной информации о вашей функции трудно дать какую-либо конкретную помощь.

+0

Моя функция вычисляет сходство косинусов. Требуется два массива, содержащие токены/слова текстов. Я думаю, вы можете только вычислить сходство по косинусу по-парному, чтобы не уменьшать количество сравнений для сходства косинусов, правильно? – caw

+0

Да, но если вас интересуют только определенные данные, вы можете избежать некоторых сравнений, таких как Vinko, упомянутых для похожих строк. –