Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr 有效地为字符串簇选择标题(簇的中心)_Solr_Cluster Analysis_Similarity_Phrase_Carrot - Fatal编程技术网

Solr 有效地为字符串簇选择标题(簇的中心)

Solr 有效地为字符串簇选择标题(簇的中心),solr,cluster-analysis,similarity,phrase,carrot,Solr,Cluster Analysis,Similarity,Phrase,Carrot,我有一个(不完全)集群字符串数据,其中一个集群中的项目可能如下所示: [ Yellow ripe banana very tasty, Yellow ripe banana with little dots, Green apple with little dots, Green ripe banana - from the market, Yellow ripe banana, Nice yellow ripe banana, Cool yellow ripe

我有一个(不完全)集群字符串数据,其中一个集群中的项目可能如下所示:

[ 
  Yellow ripe banana very tasty,
  Yellow ripe banana with little dots,
  Green apple with little dots,
  Green ripe banana - from the market, 
  Yellow ripe banana,
  Nice yellow ripe banana,
  Cool yellow ripe banana - my favourite,
  Yellow ripe,
  Yellow ripe
],
最佳标题是“黄色成熟香蕉”

目前,我在SQL GROUP BY的帮助下使用简单的启发式方法—选择最常用的名称,或者选择最短的名称(如果是tie)。我的数据包含大量这样的簇,它们经常变化,并且每次向簇中添加或从簇中删除新的水果时,都必须重新计算簇的标题

我想改进两件事:

(1) 效率-例如,仅将新水果名称与集群的标题进行比较,避免每次对所有水果标题进行分组/短语聚类

(2) 精确性-我想提取最常见的短语,而不是寻找最常见的全名。当前算法将选择“黄色成熟”,重复2次,是最常见的完整短语;然而,正如短语“黄熟香蕉”在给定的集合中最为常见

我正在考虑使用Solr+Carrot2(没有第二个的经验)。此时,我不需要对文档进行集群—它们已经基于其他参数进行了集群—我只需要选择中心短语作为集群的中心/标题


非常感谢您的任何意见,谢谢

Solr提供了一个名为ShingleFilter的分析组件,您可以使用该组件从相邻单词组中创建标记。如果您将其放在分析链中(即在索引传入文档时应用它),然后使用仅限于“水果簇”的查询计算结果字段的方面,您将能够获得所有不同的木瓦及其出现频率的列表-我认为您甚至可以检索按频率排序的木瓦-您可以很容易地使用它,我认为可以获得您想要的标题。然后,当您添加一个新的水果时,它的木瓦将自动包含在下一次的镶嵌面计算中

这项提议的具体版本如下:

创建两个字段:fruit_shingle和cluster_id

使用ShingleFilter和您可能需要的任何其他处理(例如,在使用ShingleFilter之前,使用StandardTokenizer在单词边界处进行标记化)配置fruit_shingle

使用用于标识集群的任何数据,将集群id配置为唯一id

对于每个新水果,将其文本存储在水果瓦中,将其id存储在集群id中


然后检索用于查询的facet:“cluster_id:”,您将得到一个单词、单词对、单词三元组等(木瓦)的列表。我相信,您可以将ShingleFilter配置为具有最大长度。根据您认为合适的长度和/或频率组合对面进行排序,并将其用作水果簇的“标题”。

Solr提供了一个名为“木瓦过滤器”的分析组件,您可以使用该组件从相邻单词组中创建标记。如果您将其放在分析链中(即在索引传入文档时应用它),然后使用仅限于“水果簇”的查询计算结果字段的方面,您将能够获得所有不同的木瓦及其出现频率的列表-我认为您甚至可以检索按频率排序的木瓦-您可以很容易地使用它,我认为可以获得您想要的标题。然后,当您添加一个新的水果时,它的木瓦将自动包含在下一次的镶嵌面计算中

这项提议的具体版本如下:

创建两个字段:fruit_shingle和cluster_id

使用ShingleFilter和您可能需要的任何其他处理(例如,在使用ShingleFilter之前,使用StandardTokenizer在单词边界处进行标记化)配置fruit_shingle

使用用于标识集群的任何数据,将集群id配置为唯一id

对于每个新水果,将其文本存储在水果瓦中,将其id存储在集群id中


然后检索用于查询的facet:“cluster_id:”,您将得到一个单词、单词对、单词三元组等(木瓦)的列表。我相信,您可以将ShingleFilter配置为具有最大长度。根据您认为合适的长度和/或频率组合对切面进行排序,并将其用作水果簇的“标题”。

您有已知水果的列表吗?还是你不知怎么发现的?因为有些琴弦实际上没有水果。你有已知水果的清单吗?还是你不知怎么发现的?因为有些琴弦里面实际上没有水果。