【问题标题】:how to find similar sentences / phrases in R?如何在 R 中找到相似的句子/短语?
【发布时间】:2012-02-19 07:43:24
【问题描述】:

例如,我有数十亿个短语,我想将它们相似的聚类。

> 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中是否有一个包可以按含义对这些短语进行聚类? 或者有人可以建议一种按给定短语的含义对“相似”短语进行排名的方法。

【问题讨论】:

  • 你建议如何定义“意义”?您的哪些示例短语应该聚集在一起?

标签: r statistics nlp


【解决方案1】:

也许在看这个文件: http://www.inside-r.org/howto/mining-twitter-airline-consumer-sentiment 可能会有所帮助,它使用 R 并使用推特查看航空公司的市场情绪。

【讨论】:

  • 这是一种有趣的方法,但似乎更适合分类(例如,好/坏,+ve/-ve),而不是我感兴趣的聚类/基于含义的相似性度量。
  • @sgtpepper 也许包 tm 可能是一个开始寻找的好地方。
【解决方案2】:

您可以将您的短语视为“词袋”,即构建一个矩阵(“术语-文档”矩阵),每个短语一行,每个单词一列,如果单词出现在短语中,则为 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))) )

【讨论】:

  • 与 Vincent 的建议不同,tm 包中有一个不同的统计数据,它需要许多距离参数,包括“pearson”。您可以使用某种程度的相似性/差异性,并仅选择符合设定标准的句子。
  • @TylerRinker,感谢您的提问。我想的主要是与意义相关的短语。在我的示例中,“关闭办公桌销售......”和“最大的家具选择......”将聚集在一起(可能还有其他人)
  • 如果这种方法不起作用(例如,您需要许多带有“desk”和“furniture”词的句子来自动识别它们是相关的),您可以添加一些知识关于单词的含义(有一个wordnet 包,它知道桌子是一件家具)或手动标记一些句子(将它们放在不同的类别中,例如“汽车”、“家具” 、“旅行”、“食物”等)并将它们作为训练集自动标记其余数据。
  • 在 SE link 上的类似讨论,但不一定在 R 中
  • @Vincent,您最终为此使用了哪种聚类算法?我也有同样的问题。
猜你喜欢
  • 2021-05-07
  • 2015-01-23
  • 1970-01-01
  • 2010-11-22
  • 2016-12-14
  • 1970-01-01
  • 2020-12-22
  • 2020-06-29
  • 2019-11-27
相关资源
最近更新 更多