我正在编写一个文本解析器,它应该从产品描述中提取功能。
例如:
text = "Canon EOS 7D Mark II Digital SLR Camera with 18-135mm IS STM Lens"
features = extract(text)
print features
Brand: Canon
Model: EOS 7D
....
我这样做的方法是使用结构化数据训练系统,并提出一个倒置索引,可以将术语映射到一个特征。这很有效。
当文字包含50ml
或2kg
等测量值时,反向索引会为{例} 2kg -> Size
和50ml -> Size
说明。
这里的问题是,当我得到一个我以前看不到的值,比如13ml
时,它就不会得到处理。但由于模式匹配大小,我们可以将其标记为大小。
我正在考虑通过预处理从文本中获取的标记并查找我知道的模式来解决此问题。因此,当识别出新模式时,必须将其添加到预处理中。
我很想知道,这是最好的解决方法吗?或者有更好的方法吗?
答案 0 :(得分:1)
看不见病例的古老问题。您可以训练您的刮刀抓住某些后缀(ml,kg等)之前的任何数字字符,并将其视为大小。这个问题是拼写错误和其他格式不正确的文本可能会输入您的结构数据。对于如何处理之前没有见过的值,没有正确的答案 - 你要么必须单独对它们进行QC,要么对它们有规则。这取决于您的数据集。
就识别模式而言,您必须手动输入它们,或手动分类大量记录并让算法学习它们。不确定这是非常有用的,但很多都非常依赖于您的数据。
答案 1 :(得分:0)
如果你有这样的训练数据:
word label
10ml size-valume
20kg size-weight
etc...
你可以训练一个基于字符n-gram的分类器,即使它看到11毫升或ml11等也能检测到毫升是大小 - 你也应该将数字转换为单个数字(例如0)因此,在特征提取前,11毫升被视为0毫升。
为此,您需要一个预处理模块和一个大型培训样本。对于特征提取,您可以使用scikit-learn的字符n-gram以及SVM。