2012-01-26 4 views
6

Пример: у меня есть миллиарды коротких фраз, и я хочу, чтобы их кластеры были похожи.как найти похожие предложения/фразы в R?

> strings.to.cluster <- c("Best Toyota dealer in bay area. Drive out with a new car today", 
         "Largest Selection of Furniture. Stock updated everyday" , 
         " Unique selection of Handcrafted Jewelry", 
         "Free Shipping for orders above $60. Offer Expires soon", 
         "XXXX is where smart men buy anniversary gifts", 
         "2012 Camrys on Sale. 0% APR for select customers", 
         "Closing Sale on office desks. All Items must go" 
         ) 

Предположим, что этот вектор представляет собой сотни тысяч строк. Есть ли в R пакет для группировки этих фраз по смыслу? или кто-то может предложить способ ранжировать «похожие» фразы по смыслу данной фразе.

+0

Как вы предлагаете определить «смысл»? Какие из ваших примерных фраз следует группировать вместе? – tripleee

ответ

7

Вы можете просмотреть свои фразы как «мешки слов», т. Е. Построить матрицу (матрица «термин-документ»), с одной строкой на фразу, по одному столбцу на слово, с 1, если слово встречается в фразы и 0 в противном случае. (Вы можете заменить 1 на некоторый вес, который учитывал бы длину фразы и частоту слова). Затем вы можете применить любой алгоритм кластеризации. Пакет tm может помочь вам построить эту матрицу.

library(tm) 
library(Matrix) 
x <- TermDocumentMatrix(Corpus(VectorSource(strings.to.cluster))) 
y <- sparseMatrix(i=x$i, j=x$j, x=x$v, dimnames = dimnames(x)) 
plot(hclust(dist(t(y)))) 
+0

Исходя из предложения Винсента, существует множество различий в пакете tm, в котором принимают многочисленные дистанционные аргументы, включая «pearson». Вы можете использовать какой-то уровень сходства/dissimilaerty и выбирать только предложения, которые соответствуют заданным критериям. –

+0

@TylerRinker, спасибо за ваш вопрос. Я имею в виду в основном фразы, связанные по смыслу. В моем примере «закрытие продажи на офисных столах ..» и «Самый большой выбор мебели ...» объединяются вместе (возможно, другие) –

+0

Если этот подход не работает (вам понадобится, например, много предложений так как слова «стол» и «мебель» автоматически идентифицируют их как связанные), вы можете либо добавить некоторые знания о значении слов (есть пакет 'wordnet', который знает, что стол - это часть мебель) или вручную помечать некоторые из предложений (помещать их в разные классы, например, «автомобили», «мебель», «путешествия», «еда» и т. д.) и использовать их в качестве набора для автоматической маркировки остальных данных. –

1

Возможно, при взгляде на этот документ: http://www.inside-r.org/howto/mining-twitter-airline-consumer-sentiment может помочь, он использует R и смотрит на настроения рынка для авиакомпаний, использующих твиттер.

+0

- это интересный подход, но он более подходит для классификации (например, good/bad, + ve/-ve), а не для метрики сходства на основе кластеров/значений, которая меня интересует. –

+0

@sgtpepper Возможно, пакет tm может быть хорошим местом, чтобы начать искать. – aatrujillob

Смежные вопросы