Алгоритм подобия текста Javascript

Я создаю веб-сайт, который должен собирать различные новостные ленты и хотел бы, чтобы тексты сравнивались на предмет сходства. Что мне нужно, так это какой-то алгоритм подобия текста новостей. Я знаю, что в php есть функция Similar_text, и я не уверен, насколько она хороша + она мне нужна для javascript. Так что, если бы кто-нибудь мог указать мне пример или плагин или любую инструкцию о том, как это возможно, или, по крайней мере, где искать и начинать расследование.


person Karington    schedule 18.02.2011    source источник
comment
Зачем вам это конкретно нужно в JS? Вы понимаете, что это должно произойти, когда пользователи посетят сайт, это не будет чем-то, что вы обязательно могли бы запустить задание cron и сохранить на сервере (ну, не так просто, как язык на стороне сервера)   -  person Loktar    schedule 18.02.2011
comment
@Loktar - на сервере тоже есть javascript. :) И, конечно же, это можно сделать и в (клиентском) Javascript, просто извлекая каналы и объединяя их на клиенте. Это сэкономит вам сервер, который поддерживает сценарии на стороне сервера.   -  person GolezTrol    schedule 18.02.2011
comment
Да, но что-то подобное традиционно делается на сервере, и это было бы намного быстрее... плюс вы могли бы сделать это один раз, кэшировать результаты и показывать их новым пользователям. Я сомневаюсь, что ОП имел в виду что-то вроде NodeJS: P   -  person Loktar    schedule 18.02.2011
comment
Дело в том, что есть админка, где админы группируют похожие новости. У меня есть довольно много вариантов, чтобы облегчить им задачу, но мне нужно, чтобы когда они выбирают заголовок, он сравнивает его текст со всеми другими текстами новостей и выделяет наиболее похожие.   -  person Karington    schedule 18.02.2011


Ответы (2)


Существует реализация JavaScript метрики расстояния Левенштейна, которая часто используется для сравнения текстов. Если вы хотите сравнить целые статьи или заголовки, возможно, вам лучше смотреть на пересечения между наборами слов, составляющих текст (и частоты этих слов), а не просто измерять схожесть строк.

person Flexo    schedule 18.02.2011

Вопрос о том, похожи ли два текста, является философским, пока вы не указываете, что именно это должно означать. Рассмотрим строки «дом» и «мышь». На семантическом уровне они не очень похожи, но они очень очень похожи в отношении своего «внешнего вида», потому что отличается только одна буква (и в этом случае вы могли бы использовать расстояние Левенштейна).

Чтобы принять решение о сходстве, вам необходимо соответствующее текстовое представление. Вы можете, например, извлечь и подсчитать все n-граммы и сравнить две полученные частоты. -векторы, использующие меру подобия, например косинусное сходство. Или вы можете преобразовать слова в их корневую форму, удалив все стоп-слова, суммируйте их встречаемость и используйте это в качестве входных данных для измерения сходства.

Есть много подходов и статей по этой теме, например. это одно о коротких текстах. В любом случае: чем выше уровень абстракции, на котором вы хотите решить, похожи ли два текста, тем сложнее это будет. Я думаю, что ваш вопрос нетривиальный (и, следовательно, мой ответ довольно абстрактный) ... ;-)

person philonous    schedule 18.02.2011