Python NLP:使用 TextBlob、StanfordNLP 或 Google Cloud 识别句子的时态

val*_*val 1 python nlp part-of-speech stanford-nlp google-cloud-platform

(注意:我知道之前有关于这个问题的帖子(例如这里这里,但它们已经很老了,我认为过去几年 NLP 取得了相当大的进展。)

我正在尝试使用 Python 中的自然语言处理来确定句子的时态。

是否有易于使用的软件包?如果没有,我需要如何在 TextBlob、StanfordNLP 或 Google Cloud Natural Language API 中实施解决方案?

TextBlob 似乎最容易使用,我设法列出了 POS 标签,但我不确定如何将输出转换为“时态预测值”或只是对时态的最佳猜测。此外,我的文本是西班牙语,所以我更喜欢使用支持西班牙语的 GoogleCloud 或 StanfordNLP(或任何其他易于使用的解决方案)。

我还没有设法使用 StanfordNLP 的 Python 接口。

谷歌云自然语言 API 似乎提供了我所需要的(见这里,但我还没有设法找出如何获得这个输出。我已经使用谷歌云 NLP 进行其他分析(例如实体情感分析),它有工作,所以我相信如果我找到正确的使用示例,我可以设置它。

文本块示例:

from textblob import TextBlob
from textblob.taggers import NLTKTagger
nltk_tagger = NLTKTagger()
blob = TextBlob("I am curious to see whether NLP is able to predict the tense of this sentence., pos_tagger=nltk_tagger)
print(blob.pos_tags)
Run Code Online (Sandbox Code Playgroud)

-> 这会打印 pos 标签,我如何将它们转换为对这句话时态的预测?

Google Cloud NLP 示例(设置凭据后):

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
text = "I am curious to see how this works"
client = language.LanguageServiceClient()
document = types.Document(
    content=text,
    type=enums.Document.Type.PLAIN_TEXT)

tense = (WHAT NEEDS TO COME HERE?)
print(tense)
Run Code Online (Sandbox Code Playgroud)

-> 我不确定需要输入的代码来预测时态(代码中有说明)

我是 Python 的新手,因此非常感谢有关此主题的任何帮助!谢谢!

Jin*_*ich 6

我认为任何 NLP 工具包都没有立即检测过去时的功能。但是您可以简单地从依赖解析和 POS 标记中获取它。

做句子的依存分析,看看作为句子的主谓词的词根及其词性标签。如果是VBD(动词是过去式),它肯定是过去时。如果是VB(基本形式)或VBG(动名词),则需要检查其依赖子项并检查是否存在aux具有VBD标记的助动词( deprel is )。

如果您还需要涵盖现在/过去完美或过去的模型表达式(我必须拥有...),您可以扩展条件。

spacy(我最喜欢的 Python NLP 工具包)中,你可以这样写(假设你的输入是一个句子):

import spacy
nlp = spacy.load('en_core_web_sm')

def detect_past_sentece(sentence):
    sent = list(nlp(sentence).sents)[0]
    return (
        sent.root.tag_ == "VBD" or
        any(w.dep_ == "aux" and w.tag_ == "VBD" for w in sent.root.children))
Run Code Online (Sandbox Code Playgroud)

使用 Google Cloud API 或 StanfordNLP,基本上是一样的,只是我对 API 不太熟悉。