也许这与数学有关。但是我害怕,我会得到一个我不理解的公式作为答案。
我们的数据库中有产品,另一个表中有来自不同供应商的产品。
我想要的是配对,如果可能的话,这些供应商的产品与我们的产品相匹配,或者至少给我看一个匹配度高的列表。
我确实遍历了所有供应商的产品,并按空格展开产品名称,并将其存储在一个表中,以及出现次数。
表是这样的
+--------+-------------+---------------+-------+
| 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。
假设出现次数最多的是USB,出现次数为6160,那么我认为它的权重应该是0.01或类似的值。
获得所有单词权重的最佳方法是什么?
有其他供应商的其他表格,所以离散度总是变化的。
这让我想起了朴素贝叶斯文本分类,所以为了确定它应该属于哪个产品,你可以计算所有单词的tf-idf。
然后,如果你想从另一个产品名称配对它,你可以将其分解为单词,并根据最高的词值选择产品id,但是也许你应该为此指定一些阈值,因为在某些情况下,它不会那么清楚。
tf-idf =("产品名称中的单词匹配数"/"产品名称的单词计数")* 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/