python-3.x - 为什么 token.pos_ 不工作而其他 token.lemma_ 等工作?
问题描述
我试图从一个包含名词和动词的文本文件中分离句子。但是 token.pos_ 不工作,而 token.lemma_、token.shape_ 等工作。希望能在这方面得到一些帮助。下面是部分代码。先感谢您。
from spacy.lang.en import English
nlp = spacy.load('en_core_web_sm')
nlp = English()
sentencizer = nlp.create_pipe("sentencizer")
nlp.add_pipe(sentencizer)
doc = nlp(out_sent)
lis = []
new_lis = []
for d in doc.sents:
lis.append(d)
print(lis)
for sent in lis:
flag = 0
for token in sent:
# token.pos_ doesn't work. token.lemma_, token.shape_ etc works!
#print(token.pos_)
if(token.pos_ == 'NOUN' or token.pos_ == 'VERB'):
flag = 1
if(flag == 1):
new_lis.append(sent)
解决方案
您应该从代码片段中删除以下行:
nlp = English()
因为它覆盖了该行
nlp = spacy.load('en_core_web_sm')
后者en_core_web_sm
有一个预训练的词性标注器,但English()
只是一个“空白”模型,没有内置这样的词性标注器。该模型en_core_web_sm
还可以使用依赖解析来拆分句子,因此无需添加sentencizer
。
推荐阅读
- c# - 如何使用钛网络代理调试 ntml 身份验证
- c# - 如果变量(来自其他类)发生更改,则运行函数(C#)
- flutter - 无法在flutter项目中安装http客户端包
- c++ - 最佳 PCL 模板对齐设置
- ckeditor - 从 `window.parent.CKEDITOR.tools.callFunction(...)` 得到一个 `ResponseError`
- javascript - Angular 7是否可以使用动态复选框来过滤表中的数据?
- spring - 如何修复:在 Hibernate 验证器 cdi 中实例化错误
- regex - 匹配 /、/abc/、/abc/efg/ 等的任何组合的正则表达式语法
- string - numpy字符串文件行到浮点数组科学记数法
- cloud-foundry - Cloud Foundry 上的 Keycloak 独立集群