POS在spaCy中标记单个单词

时间:2019-08-05 14:33:11

标签: nlp spacy pos-tagger

spaCy POS标记器通常用于整个句子。有没有一种方法可以有效地将unigram POS标签应用于单个单词(或单个单词列表)?

类似这样的东西:

words = ["apple", "eat", good"]
tags = get_tags(words) 
print(tags)
> ["NNP", "VB", "JJ"]

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

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

word_list = ["apple", "eat", "good"]
for word in word_list:
   doc = nlp(word)
   print(doc[0].text, doc[0].pos_)

或者,您可以

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

doc = spacy.tokens.doc.Doc(nlp.vocab, words=word_list)

for name, proc in nlp.pipeline:
    doc = proc(doc)

pos_tags = [x.pos_ for x in doc]

答案 1 :(得分:2)

英语字母组合通常很难很好地标记,因此请考虑为什么要这样做以及期望输出是什么。 (为什么您的示例apple中的NNP的POS?can的POS是什么?)

spacy并非真正适用于此类任务,但是,如果您想使用spacy,一种有效的方法是:

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

# disable everything except the tagger
other_pipes = [pipe for pipe in nlp.pipe_names if pipe != "tagger"]
nlp.disable_pipes(*other_pipes)

# use nlp.pipe() instead of nlp() to process multiple texts more efficiently
for doc in nlp.pipe(words):
    if len(doc) > 0:
        print(doc[0].text, doc[0].tag_)

请参阅nlp.pipe()的文档:https://spacy.io/api/language#pipe