将句子拆分为有意义的部分

数据挖掘 机器学习 nlp
2021-10-15 10:55:15

我有以下句子

query = u'tell me about people in konoha who have wind style chakra and are above jonin level'

我想把上面这句话分成以下三个部分

[
 "tell me about people in konoha",
 "who have wind style chakra",
 "and are above jonin level"
]

我已经研究了spacynltk中的已发送标记器,但它们并没有给我想要的结果。

我只是 nlp 和机器学习的初学者,到目前为止知识非常有限。如果您能指导我使用一些技术或可用的软件包,我可以通过它们实现上述结果,那就太棒了。

编辑

我会遇到类似问题的查询,例如上面的查询,我会根据一些限制询问有关该主题的详细信息

在上面的查询中,主题是木叶的人,并且约束条件是风式脉轮上忍级别以上

我想从类似的查询中提取这样的关系。

1个回答

您正在寻找创建解析树来查找多令牌子句。

下面是生成解析树的代码:

import spacy
from nltk import Tree

nlp = spacy.load('en')

def to_nltk_tree(node):
    if node.n_lefts + node.n_rights > 0:
        return Tree(node.orth_, [to_nltk_tree(child) for child in node.children])
    else:
        return node.orth_

query = u'tell me about people in konoha who have wind style chakra and are above jonin level'
doc = nlp(query)
[to_nltk_tree(sent.root).pretty_print() for sent in doc.sents]

输出:

    tell                          
  ____|______                       
 |         about                   
 |           |                      
 |         people                  
 |     ______|_____                 
 |    |           have             
 |    |       _____|____________    
 |    |      |     |     |     are 
 |    |      |     |     |      |   
 |    |      |     |   chakra above
 |    |      |     |     |      |   
 |    in     |     |   style  level
 |    |      |     |     |      |   
 me konoha  who   and   wind  jonin

然后,您可以从该解析树中选择短语。