提问者:小点点

提取多组非结构化文本以用于以后的自然语言处理?


我是数据挖掘/文本挖掘的新手,所以我不确定我是否使用了正确的术语。我正试图提出一个提取相关内容组的过程,以便稍后应用NLP和其他技术从中提取有意义的数据。我有一个看起来像这样的起始数据:

Product Name - $-25- 15
Product Name - $3

Product Bundle $100
-Product 1
-Product 2 Condition
-Product 3 Condition

Product - Version - Condition $100

Product
Extras
Extras

More Info
$20 

Product
Extras
Condition
$15

Product (Condition) 50
Product (Condition) 25
Product (Condition) 10

目标是获得这样一个列表,每个“列表”都有一个唯一的条目,并与相关的元数据分组:

[Product Name - $-25- 15], [Product Name - $3], [Product Bundle $100 -Product 1 -Product 2 Condition -Product 3 Condition], [Product - Version - Condition $100] 

全文是由许多不同的作者编写的,并且经常在一篇文章中切换格式,所以我无法检测它是什么格式并处理整个文档。所有格式的一个共同点是它们有新的换行符,而不是密集的文本段落。因此,我对如何处理它有一些想法:

备选方案1:初步方案

  1. 通过新行(\n)将文档拆分为数组
  2. 如果条目之间有额外的空格,则将之前的条目分组
  3. 如果没有多余的空间,检测是否有价格,如果有就考虑自己组

这个选项非常简单,可以在双倍间距的情况下工作。然而,它失败了,因为使用数字作为启发式来确定它是否是一个新的组,因为产品名称、附加项和条件可能在单间距时包含数字。

选项2:NLP

此选项将尝试将文档中的每个单词分类为“产品名称”、“条件”、“属性”和“价格”。然后再次处理文档以对文本进行分组,使其具有名称和价格,以及可选的条件和额外的元数据。

这种方法的问题是,附加和捆绑包也是产品,因此对它们进行分类将确定它们是具有元数据的唯一条目,因为它们在文档中的间隔方式决定了它们属于“父”产品。

选项3:其他东西?

我的第一个想法是先将文档处理成多个组,这样当NLP知道这个组中的所有单词都与同一产品相关时。我有一个所有产品名称的列表,还有一个很好的所有条件列表。附加内容、版本和其他文本是唯一的,因此在试图确定如何分组时可能会导致一些问题。

似乎可能需要将两者混合在一起,因为作者如何将它们分开最终就是所有内容的捆绑方式。然而,如果没有其他过程,我们无法立即知道下一组内容是否与第一个或新列表相关。

输入

Mario Party - $10

Party Games Bundle $100
-Super Mario Bros
-Mario World - NEW

Donkey Kong - 2017 Version - Used $10

Wii Sports
Includes Controllers

Also includes memory card
$10 

Grand Theft Auto
San Andreas
Includes poster
Used
$10

Zelda (Unopened box) 10

输出(JSON)

{ listings: [
    { name: 'Mario Party', condition: null, version: null, currency: '$', price: 10, includes: null },
    { name: 'Party Games Bundle', condition: null, version: null, currency: '$', price: 100, includes: ['Super Mario Bros', 'Mario World - NEW'] },
    { name: 'Donkey Kong', condition: 'Used', version: '2017 Version', currency: '$', price: 10, includes: null },
    { name: 'Wii Sports', condition: null, version: null, currency: '$', price: 10, includes: ['Includes Controllers', 'Also includes memory card'] },
    { name: 'Grand Theft Auto', condition: 'Used', version: 'San Andreas', currency: '$', price: 10, includes: 'Includes poster' },
    { name: 'Zelda', condition: 'Unopened box', version: null, currency: '$', price: 10, includes: null }
] }

共1个答案

匿名用户

如果一个人愿意训练模型并在一段时间内提高准确性,那么这里的一篇文章将有助于做到这一点。