如何从产品名称中提取品牌

How to extract brand from product name

我有两个网站,我手上有数据,现在我想用这些数据做分析

我有两个产品名称(品牌+产品名称)我只想提取品牌名称

http://www.thehut.com/jeans-clothing/men/clothing/brave-soul-men-s-cardiff-jeans-denim/10741907.html

在上面的网站中产品名称是

Brave Soul Men's Swansea Jeans - Denim

品牌名称是

Brave Soul

所以我只想要

Brave Soul

亚马逊网站链接

http://www.amazon.in/gp/product/B00L8WT2UI

同样在上面的网站中产品名称是

Apple iPhone 5c (White, 8GB)

品牌名称是

Apple

所以我想要像

这样的输出
Brave Soul
Apple

您要获取的信息实际上并不存在。

如果你取两个字符串,这两个字符串都可能有任意数量的 space,然后用 space 将它们连接在一起,就不再可能明确地分辨出哪个 space 连接两个字符串,其中 space 是字符串的一部分。

所以,你有几个选择:

首先,每个产品中没有 那么 多个 space,因此您可以尝试所有可能性:品牌 Brave 和产品Soul Men's Swansea Jeans - Denim,然后是品牌 Brave Soul 和产品 Men's Swansea Jeans - Denim,然后是品牌 Brave Soul Men's 和产品 Swansea Jeans - Denim,以此类推其他 3 种可能性。

其次,如果您可以从其他地方抓取所有品牌名称的列表并将它们存储在 set(或数据库 table 或其他任何数据库)中,您可以预先过滤可能性在向亚马逊发出相对较慢的 Web 请求中尝试所有这些之前。例如,如果您有所有品牌的列表,只需检查 BraveBrave SoulBrave Soul Men'sBrave Soul Men's Swansea 等中的哪些是实际品牌,并且只测试那些。

同时,这仍然不是完美的,因为几乎可以肯定存在模棱两可的情况。例如,有一个品牌 Apple,还有一个品牌 Apple Records,那么当您尝试拆分 Apple Records Master Collection 时会发生什么?你有两种有效的可能性,而不仅仅是一种。您所能做的就是设计您的代码以某种方式处理该问题(以及您正确执行的单元测试)。

我不会在这里尝试建议具体的算法,但我只想指出,即使在无人监督的情况下,拥有足够大的此类字符串数据库,也可以发现某些模式(即信息实际上在那里).首先,品牌名称会在多个字符串中重复出现,并且始终是字符串的前缀。该假设将为分离的位置提供强有力的先验知识。其次,可以通过学习潜在品牌假设和产品名称之间的关联来攻击模棱两可的案例(苹果唱片)(例如,只要苹果不生产唱片,并且有一个强有力的假设苹果唱片是一个品牌,因为它重复了多次,这个歧义可以成功解决)。