通过出现获得单词的重量

时间:2016-09-23 10:16:54

标签: math

也许这与math.stacexhange有关,但我很害怕,我会得到一个公式来回答我不会想到的内容。

我的数据库中有产品,我在另一个表中有来自不同供应商的产品。

我想要的是将这些供应产品配对我们的产品(如果可能的话),或者为我展示至少给我一个列表,其中匹配度很高。

我确实迭代了所有供应商的产品,并按空格展开产品名称,并将其存储在表格中,并计算出现的数量。

表格看起来像这样。

+--------+-------------+---------------+-------+
|   id   |    word     | originalWord  | count |
+--------+-------------+---------------+-------+
| 220950 | Tracer      | Tracer        |   493 |
| 220951 | Destroyer   | Destroyer     |     3 |
| 220952 | Avago5050   | Avago5050     |     4 |
| 220953 | mouse       | mouse         |  2535 |
| 220954 | TRAMYS44916 | /TRAMYS44916/ |     2 |
| 220955 | GameZone    | GameZone      |    16 |
| 220956 | Enduro      | Enduro        |     3 |
| 220957 | AVAGO       | AVAGO         |    10 |
| 220958 | 5050        | 5050          |     4 |
| 220959 | optical     | optical       |  2370 |
| 220960 | USB         | USB           |  6160 |
+--------+-------------+---------------+-------+

等等。当然,在我存储的另一个表中,每个单词的产品ID是什么。

所以我想要的是通过出现确定一个单词的重量。

如您所见,单词TRAMYS44916仅出现两次,几乎可以肯定是一个部分号,所以这是最重的单词。它的重量应为1。

假设发生率最高的是发生6160的USB,所以它的重量应该是0.01或类似的东西,我认为。

获得所有单词权重的最佳方法是什么?

其他供应商还有其他表格,因此分散总会发生变化。

1 个答案:

答案 0 :(得分:2)

这让我想起Naive Bayes的文本分类,所以要确定它应该属于哪个产品,你可以计算所有单词的tf-idf。

然后,如果你想从另一个产品名称配对它,你可以再次将它分解为单词并根据最高项值选择产品ID,但是也许你应该为此指定一些阈值,因为在某些情况下它会不那么清楚。

tf-idf =("产品名称中的字匹配数" /"产品名称和#34的字数;)* log("产品数量" / "包含单词")的产品数量

您可以在此示例中看到它是如何完成的(在您的情况下,文档将是产品全名):https://en.wikipedia.org/wiki/Tf–idf#Example_of_tf.E2.80.93idf

Java中的示例实现:https://guendouz.wordpress.com/2015/02/17/implementation-of-tf-idf-in-java/