我需要从汽车销售短语的NLP字符串中获取数据,并获取一个包含两个元素字典的数组,其类型为:
[
{vehiculo:'Car', Cantidad: 1},
{vehiculo:'Motorbike', Cantidad: 1}
]
除了从 Regex Parser 语法中提取标签这一最简单的事情之外,我几乎完成了所有工作。
目前我有以下内容:输入短语:“我卖了一辆汽车和一辆摩托车”
1.- 分割短语并获得:
['\nI sold a car and a motorbike']
2.- 代币化:
['I', 'sold', 'a', 'car', 'and', 'a', 'motorbike']
3.- Post Tagger 形态分析:
[('I', 'PRP'), ('sold', 'VBD'), ('a', 'DT'), ('car', 'NN'), ('and', 'CC'), ('a', 'DT'), ('motorbike', 'NN')]
4.- 具有以下语法的 RegexpParser:
grammar = r'''
Vehiculo: {<CD>*<NN>+}
{<JJ>*<NN>+}
{<CD>*<NN><IN>*<NN>+}
Cantidad: {<JJ>}
{<CD>}
{<DT>}
'''
我得到:
Parsed Sentence = (S
I/PRP
sold/VBD
(Cantidad a/DT)
(Vehiculo car/NN)
and/CC
(Cantidad a/DT)
(Vehiculo motorbike/NN))
我的问题是如何通过从前面的语句中提取标签和数据来获取这种类型的字典,使用一些命令,而无需手动搜索字符串中的文本:
[
{vehiculo:'Car', Cantidad: 1},
{vehiculo:'Motorbike', Cantidad: 1}
]
谢谢和问候,
RegexParser 的结果是 a
Tree
,因此它具有循环遍历它、展平它并对其执行大量操作的方法。如果不确切知道所有示例句子可以具有什么结构,或者句子是否可以包含不同数量的a
等,就不可能给出一个通用的解决方案。在任何情况下,我都会向您展示一个适用于这种情况的代码示例,您现在可以根据自己的需要对其进行调整。首先,为了让每个人都能重现代码,我展示
import
了分析的所有必要步骤和之前的步骤:如果您尝试仅打印该结果,您会得到它作为字符串的表示形式:
但它
resultado
实际上是 typeTree
。这使我们至少能够迭代其元素并进行相应操作。例如,如果元素是“叶子”(终端节点),它将是一个元组,其元素 [0] 是单词,元素 [1] 是词性。另一方面,如果它不是一个叶子,它将是一个带有新分支的中间节点(就像在 Quantity 和 Vehicle 案例中发生的那样)。在这种情况下,节点有一个.label()
会给我们“数量”或“车辆”的值,以及它自己的子节点,这些子节点已经是叶子。有了这些信息,我们可以设置如下循环:
最后,
data
它将包含:当然,正如我所说,这不是很笼统。每次出现车辆时,我都会计算它并输入数量=1。我不知道您是否应该能够支持诸如“我卖了两辆汽车和三辆摩托车”之类的短语,这会使事情变得相当复杂,或者您是否可以拥有具有更高嵌套级别的结构。无论如何,您已经有了一些拍摄地点的线索。另请参阅树文档。
最后我这样解决了,我想会有更简单的方法和更好的结果,但我当时的知识就是这样,希望对你有帮助: