如何在Python中使用NLP使用NLTK树提取问题的“主题”

2024-05-16 10:07:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图弄明白如何理解Python中的一个问题。其目的是将其用于信息检索聊天机器人-即用户将询问有关某事物的信息,然后聊天机器人将访问知识库以返回有关该事物的信息

示例用户输入可以是:

“向我显示有关WW1的信息。”-应提取[WW1]的位置

“我想知道普通流感的症状。”-应该从哪里提取[普通流感的症状]

我首先研究了spacy和nltk,特别是nltk树,它们最终看起来像这样:

    Show            
  ___|________       
 |   |   information
 |   |        |      
 |   |      about   
 |   |        |      
 me  .       WW1



        want                             
  _______|________                        
 |   |           know                    
 |   |    ________|______                 
 |   |   |            symptoms           
 |   |   |     __________|______          
 |   |   |    |                 of       
 |   |   |    |                 |         
 |   |   |    |                flu       
 |   |   |    |           ______|____     
 I   .   to  the        the        common

从这里开始,我不确定如何提取如上所示的正确子树,我不想假设它总是最右边的树

我也不知道这是不是解决这个问题的最好办法

一旦我有了用户想要了解的字符串值,我就可以用它来查找信息,我只需要先得到这个值


Tags: the用户目的症状信息示例知识库spacy
2条回答

SpaCy是解决这类问题的一个很好的库。这段代码与nltk树类似,但信息量更大,因为它包括定向依赖类型和词性标记

import spacy
from spacy import displacy

nlp = spacy.load('en_core_web_lg')

doc = nlp('I want to know the symptoms of the common flu.')

# retokenize noun chunk spans
spans = spacy.util.filter_spans(doc.noun_chunks)
with doc.retokenize() as retokenizer:
    [retokenizer.merge(span, attrs={"tag": span.root.tag, "dep": span.root.dep})for span in spans]


options = {"compact": True, "font": "Source Sans Pro"}
displacy.serve(doc, style="dep", options=options) # see on http://localhost:5000/

enter image description here

试试斯坦福的依赖性解析器。它分析句子的语法结构,并提供诸如词性标记依赖关系之类的信息,从中可以轻松识别给定句子中的主语和宾语。查看网站https://nlp.stanford.edu/software/nndep.html

相关问题 更多 >