2016-09-23 34 views
0

也许这与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.

比方说,最常发生的是USB 6160发生,所以它的重量应该是0.01或类似的东西,我想。

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

其他供应商还有其他表格,因此分散度总是在变化。

回答

2

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

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

TF-IDF = *日志(/“中包含单词产品编号”,“产品编号”)

(/“产品名称的字数统计”“字的数量在产品名称是否一致”)你可以看到它是如何的例子一样,在这里(在你的情况下,文件将是产品全名):在Java中https://en.wikipedia.org/wiki/Tf–idf#Example_of_tf.E2.80.93idf

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

+0

是的,我认为这将是我的朋友。谢谢,现在我不需要重新发明轮子。 – vaso123

+0

我刚刚读过tf-idf维基,我认为它对我们来说已经足够了,所以如果我把你的公式翻译回来,那就意味着,''字数统计'* log(“文档数包含单词”/ number文件)'对吗? – vaso123

+0

实际上idf是其他方式,对不起,我会更新它,它应该是日志(“文档数量”/“包含单词的文档数量”) –