帮助:从文本中提取数据元组...正则表达式还是机器学习?

5
我很乐意为您提供以下问题的最佳解决方案。我将使用汽车分类列表示例来说明。

问题:从给定文本中提取数据元组。

以下是数据的一些特征。

  1. 文本中的词汇(单词)仅限于特定领域。假设最多有100-200个单词。

  2. 需要解析的文本是类似于汽车广告数据的标题,因此每条记录对应一个元组(行)。

  3. 在某些情况下,某些属性可能会丢失。例如,在下面的原始数据行#5中,年份缺失。

  4. 一些单词是成对出现的(二元组)。像“低英里数”。

  5. 可用的历史数据= 10,000条记录

  6. 新数据量=每周1000-1500条记录

预期输出应为(年份,制造商,型号,功能)的形式。因此,输出应如下所示:

1 ->(2009年,福特,Fusion,SE)
2 ->(1997年,福特,塔鲁斯,旅行车)
3 ->(2000年,三菱,Mirage,DE)
4 ->(2007年,福特,Expedition,EL Limited)
5 ->( ,本田,雅阁,EX)
....
....

原始标题数据:


1 -> 2009年福特Fusion SE - $7000
2 -> 1997年福特Taurus旅行车 - $800(东圣何塞)
3 -> '00三菱Mirage DE - $2499(萨拉托加)图片
4 -> 2007年福特Expedition EL Limited - $7800 (x)
5 -> 本田雅阁ex低里程 - $2800(都柏林/普莱森顿/利弗莫尔)图片
6 -> 2004年本田Odyssey LX 68K英里 - $10800(丹维尔/圣拉蒙)
7 -> 93林肯马克 - $2000(奥克兰东部)图片
8 -> #######2006年黑色LEXUS GS 430黑色114KMI ####### - $19700(圣拉斐尔)图片
9 -> 2004奥迪A4 1.8T FWD - $8900(萨克拉门托)图片
10 -> #######2003 GMC C2500 HD EX-CAB 6.0 V8 EFI白色4X4 ####### - $10575(圣拉斐尔)图片
11 -> 1990年丰田Corolla跑得好!省油!5速手动干净!注册2011 O.B.O - $1600(海沃德/卡斯特罗谷)图片
12 -> 本田雅阁EX 2000年 - $4900(都柏林/普莱森顿/利弗莫尔)图片
13 -> 2009年雪佛兰Silverado LT Crew Cab - $23900(都柏林/普莱森顿/利弗莫尔)图片
14 -> 2010年Acura TSX - V6 - TECH - $29900(都柏林/普莱森顿/利弗莫尔)图片
15 -> 2003年日产Altima - $1830(旧金山)图片


可能的选择:

  1. 机器学习文本分类器(朴素贝叶斯等)
  2. 正则表达式

我试图弄清楚的是,对于这项工作,正则表达式是否过于复杂,而文本分类器是否过度?

如果选择使用文本分类器,那么您认为最容易实现的是什么。

提前感谢您的帮助。


1
你是否有标记数据用于训练/测试任何算法?这可能会限制您从机器学习的角度应用的方法类型(例如,语言建模需要一个足够大的语料库)。 - jeff7
是的,我有很多数据可以用于训练。 - Cyber Student
6个回答

4
这是一个被广泛研究的问题,称为信息抽取。想要实现你所需的功能并不直接,也不像你所描述的那样简单(即机器学习并非多此一举)。有几种技术可供选择,你应该阅读该研究领域的概述。

不幸的是,我必须同意这一点。如果你有大量标记的训练数据,你就有机会,但构建/配置和测试这样的系统肯定不是易事。你绝对需要某种命名实体识别(基于字典或其他方式),使用单词ngram查找常见术语是一个好主意。因为你的领域有限,我认为你有很好的机会使其工作-我认为如果你手动标记1000个例子,然后有一个不错的特征集,然后对每个标题进行分词并用MALLET运行它,那么它会起作用。 - nflacco

3

+1 我也想提一下第一个链接中提供的“替代方案”(GATE、UIMA、NLTK、Lingpipe 和 MALLET),这是其他可能性的非常好的列表。 - Stompchicken

0
你应该使用像亚马逊机械土耳其这样的工具。人类微任务。另一个选择是使用数据输入自由职业者。upWork是一个很好的地方去寻找。你可以获得优质的结果,每个人的成本非常合理。

0

如果您已经有注释数据和与每个字段相关联的单词列表,我认为ARX或Phoebus系统可能适合您的需求。他们的方法是信息提取和信息集成的混合。


0

0
作为一个寻找特定车型的用户,这项任务变得更容易了。我相信我可以使用正则表达式对大多数福特游侠进行分类。
我认为你最好为每个汽车型号编写一个类型为String -> Maybe Tuple的函数。然后在每个输入上运行所有这些函数,并丢弃那些产生零个或太多元组的输入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接