Python:使用Spacy等将其他名词短语(例如介词)分成

问题描述:

由于我被告知Spacy是一个用于自然语音处理的如此强大的Python模块,我现在正在拼命寻找一种将单词分组到一起以超过名词短语,最重要的是介词短语。 我怀疑这是一个Spacy函数,但这将是我猜测的最简单的方法(SpacySpaCy导入已经在我的项目中实现)。尽管如此,我对任何可能的短语识别/组块都是开放的。Python:使用Spacy等将其他名词短语(例如介词)分成

+0

你能不能给你想要什么具体的例子吗?也许就像一个例子输入与所需的输出相对应。 – Harrison

+1

当然。作为德语输入的翻译,请写下如下句子:“我需要多长时间才能开车去大学?” (德语“Wie lange brauche ich bis zur Uni?”)。我希望“通过远程了解介词短语是由什么组成,或者通过陈述确切的规则(PP-> PREP + NP)就像在其他语言中使用的那样,将[DETEP]作为介词阶段分成[DET] python模块。 由于SpaCy用于我的程序中的标记,似乎只支持名词块,我想有一个支持模块或只是一个函数内部识别额外的块。 –

以下是获取PP的解决方案。一般而言,您可以使用subtree获得短语。

def get_pps(doc): 
    "Function to get PPs from a parsed document." 
    pps = [] 
    for token in doc: 
     # Try this with other parts of speech for different subtrees. 
     if token.pos_ == 'ADP': 
      pp = ' '.join([tok.orth_ for tok in token.subtree]) 
      pps.append(pp) 
    return pps 

用法:

ex = 'A short man in blue jeans is working in the kitchen.' 
doc = nlp(ex) 

get_pps(doc) 

此打印:

['in blue jeans', 'in the kitchen']