用于检查字符串与字符串列表的相似性的函数

时间:2015-12-18 06:20:00

标签: word similarity

我在一个存储桶中有一组类似的字符串,并且有多个这样的存储桶。我应该在字符串上使用什么样的函数来比较随机字符串和存储桶以找出它属于哪个存储桶?

为了澄清存储桶中的每个实体,它是一个可以包含多个单词的句子。

一个例子:

考虑桶中的字符串列表:
 1.圆领黑色T恤
 2.印花T恤衫  3.棕色polo T恤

如果我们输入“蓝色高领T恤”,我们想检查是否可以将其添加到同一个桶中。这可能是一个更简单的例子,但考虑这样做可以说100个字符串。

对文章或论文的任何引用都会非常有用。

1 个答案:

答案 0 :(得分:1)

首先,我在思考两种相似之处:句法和语义。

1)语法

  • Levenstein distance可用于测量两个序列(字符)之间的距离
  • Stemming可用于增加匹配概率。有各种实现(例如here)。你得到随机字符串的词干(或根)字,并与你的桶的词干进行比较。当然,铲斗杆应该预先计算以提高效率。

2)语义

  • 有关一般信息,请阅读article from Wikipedia
  • 对于实际实现,您可以从CodeProject中阅读this article。它基于WordNet,这是一个伟大的英语本体,可以将概念存储在同义词中,并提供这些同义词之间的各种关系。

要了解更多详情,您应该告诉我们您需要什么样的相似性。

<强> [编辑]

根据提供的信息,我认为您可以这样做:

1)将所有字符串拆分为单词=&gt;随机字符串将命名为Array1和当前存储桶Array2

2)计算相似度为number_of_common_words(Array1,Array2)/ count(Array2)

3)选择最大相似度

通过在位置匹配中添加点,也可以提高特异性:Array1 [i] = Array2 [i]

为了获得更好的性能,我会将存储桶存储为哈希表,字典等,以便在O(1)中完成存在检查。