spacy - Spacy没有标记周期
问题描述
如果最后的“单词”是包含句点的非单词,我该如何修复/调整 spacy 不会分隔句末句点的事实?
>>> nlp = spacy.spacy.load('en_core_web_md')
>>> doc = nlp("The Eiffel Tower is located at 48.86N 2.29E.")
>>> print(doc[-1])
2.29E.
>>> print(nlp("The Eiffel Tower is very beautiful.")[-1])
.
我正在尝试提取(命名实体识别)文档中的纬度/经度引用,但无法找到一种方法来使提取的实体与"48.86N 2.29E"
没有最后句点的文本相对应。
我想保持所有其他常用(英语)标记化规则不被修改。
解决方案
您需要在标记器中注册自定义后缀。这可以按如下方式完成:
import re
import spacy
from spacy.tokenizer import Tokenizer
suffix_re = re.compile(r'''\.$''')
def custom_tokenizer(nlp):
return Tokenizer(nlp.vocab, suffix_search=suffix_re.search)
nlp = spacy.load("en_core_web_sm")
nlp.tokenizer = custom_tokenizer(nlp)
doc = nlp("The Eiffel Tower is very beautiful.")
print([t.text for t in doc])
doc2 = nlp("The Eiffel Tower is located at 48.86N 2.29E.")
print([t.text for t in doc2])
doc3 = nlp("The Eiffel Tower, Norte Dame and Champs Elysee are located at 48.86N 2.29E.")
print([t.text for t in doc3])
输出
['The', 'Eiffel', 'Tower', 'is', 'very', 'beautiful', '.']
['The', 'Eiffel', 'Tower', 'is', 'located', 'at', '48.86N', '2.29E', '.']
['The', 'Eiffel', 'Tower,', 'Norte', 'Dame', 'and', 'Champs', 'Elysee', 'are', 'located', 'at', '48.86N', '2.29E', '.']
推荐阅读
- react-native - 将 this.state 传递给静态函数
- java - Java 通用类< ? 扩展接口>作为参数
- debugging - 在 Visual Studio 2019 上没有足够的权限在本地系统上附加 w3p 进程?
- reactjs - 下一个 js '_next/static/YzkQBtj6rd9b69Th7lZs0/pages/index.js' 错误
- kubernetes - 删除命名空间并移除发布
- java - Selenium 中的 SearchContext 和 WebDriver 接口有什么区别或它们之间的关系是什么?
- docker - 在两台服务器上的 docker 上运行 ELK 堆栈
- c# - 如何将excel VSTO add in 转换成.xll 直接通过excel添加
- android - 如何在 MySQL 中更改行的列变量时自动更新应用程序的视图
- php - 当 PHP 文件从 bash 脚本运行时,环境变量值未在 PHP 中使用 getenv()