python - 用 spaCy 标记一个已经标记化的字符串
问题描述
为了进行可比较的研究,我正在处理已经被标记化的数据(而不是 spacy)。我需要使用这些令牌作为输入,以确保我使用相同的数据。我希望将这些令牌输入 spaCy 的标记器,但以下失败:
import spacy
nlp = spacy.load('en', disable=['tokenizer', 'parser', 'ner', 'textcat'])
sent = ['I', 'like', 'yellow', 'bananas']
doc = nlp(sent)
for i in doc:
print(i)
带有以下痕迹
Traceback (most recent call last):
File "C:/Users/bmvroy/.PyCharm2018.2/config/scratches/scratch_6.py", line 6, in <module>
doc = nlp(sent)
File "C:\Users\bmvroy\venv\lib\site-packages\spacy\language.py", line 346, in __call__
doc = self.make_doc(text)
File "C:\Users\bmvroy\venv\lib\site-packages\spacy\language.py", line 378, in make_doc
return self.tokenizer(text)
TypeError: Argument 'string' has incorrect type (expected str, got list)
首先,我不确定为什么 spaCy 尝试标记输入,因为我在load()
语句中禁用了标记器。其次,显然这不是要走的路。
我正在寻找一种向标记器提供令牌列表的方法。spaCy有可能吗?
我尝试了@aab 提供的解决方案并结合了文档中的信息,但无济于事:
from spacy.tokens import Doc
from spacy.lang.en import English
from spacy.pipeline import Tagger
nlp = English()
tagger = Tagger(nlp.vocab)
words = ['Listen', 'up', '.']
spaces = [True, False, False]
doc = Doc(nlp.vocab, words=words, spaces=spaces)
processed = tagger(doc)
print(processed)
此代码未运行,并给出以下错误:
processed = tagger(doc)
File "pipeline.pyx", line 426, in spacy.pipeline.Tagger.__call__
File "pipeline.pyx", line 438, in spacy.pipeline.Tagger.predict
AttributeError: 'bool' object has no attribute 'tok2vec'
解决方案
您需要使用直接使用Doc
类构建文档的替代方式。这是他们文档中的示例(https://spacy.io/api/doc):
from spacy.tokens import Doc
doc = Doc(nlp.vocab, words=[u'hello', u'world', u'!'], spaces=[True, False, False])
参数(每个spaces
标记是否后跟空格)是可选的。
然后你可以运行你需要的组件,所以整个事情看起来像:
import spacy
from spacy.tokens import Doc
nlp = spacy.load('en')
doc = Doc(nlp.vocab, words=[u'hello', u'world', u'!'], spaces=[True, False, False])
nlp.tagger(doc)
nlp.parser(doc)
for t in doc:
print(t.text, t.pos_, t.tag_, t.dep_, t.head)
推荐阅读
- vagrant - 创建磁盘 Hyperv Windows 10 时出现 Vagrant 错误
- syntax - 乔姆斯基层次结构和机器人框架
- youtube - 下载 youtube 数据时出现“YouTube 说:无法提取视频数据”
- javascript - 尝试将 Web 部件文档库的标题覆盖为 URL 中的值 - SharePoint 2016
- amazon-web-services - 除非在特定容量下,否则如何防止创建 DynamoDB 表
- .htaccess - 使用 HTaccess 重定向特定的用户代理
- python - 将向量的每个元素的元素与同一向量的后续元素相除
- ionic-framework - 如何将输入值显示到离子网格?
- python - 很难尝试在 python 中处理异常
- json - 在 sqlalchemy 上执行 json 发布请求时出现键错误