我有两个网站,我手中有数据,现在我想用该数据进行分析
我有两个产品名称(品牌+产品名称)我想只提取品牌名称
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
答案 0 :(得分:3)
您尝试获取的信息实际上并不存在。
如果你带两个字符串,两个字符串可能有任意数量的空格,并用空格将它们连接在一起,就不能再明确地告诉哪个空格正在连接这两个字符串,以及哪个空格是部分字符串。
所以,你有几个选择:
首先,每个产品中都没有 许多空格,因此您可以尝试所有可能性:品牌Brave
和产品Soul Men's Swansea Jeans - Denim
,然后品牌Brave Soul
和产品Men's Swansea Jeans - Denim
,然后是品牌Brave Soul Men's
和产品Swansea Jeans - Denim
,依此类推其他3种可能性。
其次,如果您可以从其他地方抓取所有品牌名称的列表并将其存储在set
(或数据库表或其他任何内容)中,您可以预先过滤这些可能性,然后再对其进行全部尝试。对亚马逊的网络请求缓慢。例如,如果您有所有品牌的列表,只需检查Brave
,Brave Soul
,Brave Soul Men's
,Brave Soul Men's Swansea
等中的哪些是实际品牌,并且只测试那些。
与此同时,这仍然不会是完美的,因为几乎可以肯定有些模糊不清的案例。例如,有一个品牌Apple
,还有一个品牌Apple Records
,那么当您尝试拆分Apple Records Master Collection
时会发生什么?你有两种有效的可能性,而不仅仅是一种。您所能做的就是设计代码以某种方式处理(以及您正确执行的单元测试)。
答案 1 :(得分:0)
我不会在这里尝试提出具体的算法,但我想指出,即使在无监督的情况下,拥有足够大的此类字符串数据库,也可以发现某些模式(即信息实际存在)。首先,品牌名称将以多个字符串重复,并且始终是字符串的前缀。这个假设将在分离的位置上提供强有力的先验。其次,可以通过学习潜在品牌假设和产品名称之间的关联来攻击模糊案例(苹果记录)(例如,只要苹果不产生记录,并且有一个强有力的假设,即苹果记录是一个品牌,因为它重复多次,这种歧义可以成功解决)。