我正在建立一个新网站,从一些电子商务网站导入/抓取数据。
每组项目称为产品,其名称为所有分组项目的父项。
例如:iphone 6s plus 128
和iphone 7 32
是一个项目,但iphone 6s
和iphone 7
是产品。
我面临的问题是在一个产品下统一被抓取的项目,这是一个例子:
Item 1: Fiat 128
Item 2: Iphone 6 128
两者在同一产品下统一,因为两个文本都包含“128”作为子字符串。
我想要实现的目标是将项目iphone 6 128
放在其自己的群组中,而不是与Fiat 128
位于同一群组中,以便我们更准确地对项目进行分组。
注意:它们只是相关的,因为它们都包含“128”子字符串。
任何帮助将不胜感激
答案 0 :(得分:0)
我从您的问题中了解到,您希望根据类型对项目进行聚类,并且属于同一产品的所有项目应该组合在一起。因此,您应首先定义产品列表。如果您没有产品清单,那么很难将其准确分组。
您可以考虑做的一件事是 - 根据名称对项目进行集群,但只考虑文本部分,跳过数字部分。它应该给你合理的聚类。
如果你想要超越这个,那么你可以考虑NLP技术。例如,您的所有商品'名字是名词短语,你可以使用Collins Head Finder Rule(使用Stanford CoreNLP)找到头字,然后在项目之间进行比较。
private String getMentionHeadUsingCollinsRule(String phrase) {
String mentionHead = null;
Annotation annotation = pipeline.process(phrase);
for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
Tree tree = sentence.get(TreeCoreAnnotations.TreeAnnotation.class);
ModCollinsHeadFinder headFinder = new ModCollinsHeadFinder();
mentionHead = tree.headTerminal(headFinder, tree).toString();
}
return mentionHead;
}
更高级:您可以使用依赖项解析来查找名词短语的头部,但这将是错综复杂的!