从消费者产品手册中提取品牌和产品类别

时间:2014-10-13 08:52:14

标签: python nlp nltk named-entity-recognition

我列出了从网上报废的消费者产品手册(大约100,000个.pdf文件)。现在我想按制造商/品牌和它所属的类别对文件进行分类 例如:

  

三星 - >监视器 - > [文件列表]
  三星 - >手机 - > [文件列表]
  等...

到目前为止我做了什么:

  • 建立了一个品牌/制造商列表和一个类别列表。
  • 使用pyPdf
  • 从pdf文件中提取所有数据作为文本
  • 使用NLTK对文字数据中的字词进行标记化
    • 看起来像这样: ... ('3Com', 'CD') ('Corporation', 'NNP') ('reserves', 'NNS') ('the', 'DT') ('right', 'NN') ('to', 'TO') ('revise', 'VB') ('this', 'DT') ('documentation', 'NN') ('and', 'CC') ('to', 'TO') ('make', 'VB') ('changes', 'NNS') ('in', 'IN') ('content', 'NN') ('from', 'IN') ...

我现在面临的问题:

如何根据我的品牌/类别列表匹配令牌?
我之前从未有机会与NLP合作过,而且我仍然试图将自己的大脑包裹起来。

2 个答案:

答案 0 :(得分:0)

我不确定这是一个NLP问题。我将如何做到这一点:

brand_names = ['Samsung', 'Lenovo', ...]
category_names = ['Monitors', 'Mobile Phones', ...]

pdf_string = read_my_pdf('theproduct.pdf')
pdf_string_lowered = pdf_string.lower()

brand_names_in_pdf = [brand.lower() in pdf_string_lowered for brand in brand_names] #Everything is lowered to account for case difference
category_names_in_pdf = [category.lower() in pdf_string_lowered for category in category_names]

import itertools
tags = itertools.product(brand_names_in_pdf, category_names_in_pdf)  #Get the tuples of brands and categories

这看起来很简单,但我认为它会比你使用的任何NLP工具更好(你怎么知道特定的型号是手机的型号,还是某些与手机相关的词会是包含在PDF中的其他内容)。我认为详尽的搜索更加强大。

此方法的唯一真正缺点与您要查找的单词的变化有关。我认为解决这个问题的方法是使用正则表达式而不是令牌。例如,您可以接受“移动电话”或“移动电话”,并将其分类为“移动电话”。

答案 1 :(得分:0)

我建议采用混合方法。使用POS标记器查找NNP专有名词,然后在公司名称词典中查找。

这可以帮助您避免查找确定者和其他不太可能的单词。这个应该通过减少误报来提高精确度,例如有人可能会使用公司名称作为动词(xerox,google)。在不利方面,它可能会通过增加漏报来减少召回,因为公司名称会被标记错过并且从未在您的字典中查找过。