spaCy POS标记器通常用于整个句子。有没有一种方法可以有效地将unigram POS标签应用于单个单词(或单个单词列表)?
类似这样的东西:
words = ["apple", "eat", good"]
tags = get_tags(words)
print(tags)
> ["NNP", "VB", "JJ"]
谢谢。
答案 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