【问题标题】:How to extract features from plain text?如何从纯文本中提取特征?
【发布时间】:2016-09-12 01:26:40
【问题描述】:

我正在编写一个文本解析器,它应该从产品描述中提取特征。

例如:

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
....

我这样做的方法是使用结构化数据训练系统并提出可以将术语映射到特征的倒排索引。这工作得很好。

当文本包含50ml2kg 之类的度量时,反向索引将显示2kg -> Size50ml -> Size 例如。

这里的问题是,当我得到一个我以前没有见过的值时,比如13ml,它不会被处理。但是由于模式匹配一​​个大小,我们可以将其标记为大小。

我正在考虑通过预处理我从文本中获得的标记并寻找我知道的模式来解决这个问题。因此,当识别出新模式时,必须将其添加到预处理中。

我想知道,这是解决此问题的最佳方法吗?或者有更好的方法吗?

【问题讨论】:

    标签: algorithm machine-learning nlp


    【解决方案1】:

    未见病例的古老问题。您可以训练您的刮板抓取某些后缀(ml、kg 等)之前的任何类似数字的字符并将其视为大小。这样做的问题是拼写错误和其他格式不正确的文本可能会输入到您的结构数据中。对于如何处理您以前从未见过的值,没有正确的答案——您要么必须单独对它们进行 QC,要么围绕它们制定规则。这取决于您的数据集。

    就识别模式而言,您要么必须手动输入它们,要么手动对大量记录进行分类并让算法学习它们。不确定这是否很有帮助,但其中很大程度上取决于您的数据。

    【讨论】:

    • 谢谢。我也是这么想的。
    【解决方案2】:

    如果你有这样的训练数据:

    word label
    10ml size-valume
    20kg size-weight
    etc...
    

    您可以训练基于字符 n-gram 的分类器,即使它看到 11-ml 或 ml11 等,它也会检测到 ml 是大小体积。您还应该将数字转换为单个数字(例如 0)这样 11-ml 在特征提取之前被视为 0-ml。

    为此,您需要一个预处理模块和一个大型训练样本。对于特征提取,您可以使用 scikit-learn 的字符 n-gram 以及 SVM。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 2019-03-24
      • 2012-06-20
      • 2019-07-09
      • 2019-04-09
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      相关资源
      最近更新 更多