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 的新手,因此非常感谢有关此主题的任何帮助!谢谢!
我认为任何 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 不太熟悉。