【问题标题】:Python: Chunking others than noun phrases (e.g. prepositional) using Spacy, etcPython:使用 Spacy 等将名词短语以外的其他词(例如介词)分块
【发布时间】:2016-12-30 06:02:13
【问题描述】:

自从有人告诉我 Spacy 是一个用于自然语音处理的强大 Python 模块后,我现在正在拼命寻找一种方法,将单词组合成多个名词短语,最重要的是介词短语。 我怀疑有一个 Spacy 函数,但我猜这将是最简单的方法(SpacySpaCy 导入已经在我的项目中实现)。 尽管如此,我对任何短语识别/分块的可能性持开放态度。

【问题讨论】:

  • 你能举一个你具体想要什么的例子吗?也许就像一个示例输入,所需的输出与之对应。
  • 当然。作为德语输入的翻译,请使用“我开车去大学需要多长时间?”这样的句子。 (德语“Wie lange brauche ich bis zur Uni?”)。我希望通过远程知道介词短语的组成或通过陈述确切的规则(PP -> PREP + NP),就像在其他蟒蛇模块。由于 SpaCy 用于在我的程序中进行标记,并且似乎只支持名词分块,因此我希望有一个支持模块或只是其中的一个函数来识别其他块。

标签: python nlp chunking phrases spacy


【解决方案1】:

这是获得 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

用法:

import spacy

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

print(get_pps(doc))

打印出来:

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

【讨论】:

  • nlp() 函数来自哪里?
  • 我已经更新了答案。 nlp 指的是加载的 SpaCy 实例(遵循 SpaCy 文档中的约定:spacy.io/usage)。
  • 谢谢,我遇到了 spacy.load('en') 的另一个问题,已通过将其替换为 spacy.load('en_core_web_sm') 来解决,解决方案来自 spaCy 的 GitHub 问题跟踪器讨论 github.com/explosion/spaCy/issues/1721#issuecomment-373241198
  • 嘿,我想知道是否有人知道如何将其应用于 df?
  • 一般来说,您可以使用apply 方法根据另一列的值创建一个新列。例如:df['b'] = df['a'].apply(len) 将使用内置的len 函数根据标签为'a' 的列中的值创建一个新列(标签为'b')。换句话说:第二列将保存'a' 列中项目的长度。您可以使用任何您喜欢的功能,包括答案中的功能。但是如果该列包含字符串,那么您确实需要先处理字符串。
猜你喜欢
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2019-01-12
相关资源
最近更新 更多