【发布时间】:2021-09-29 21:01:04
【问题描述】:
我想保留 SpaCy 通常使用的分词器,但添加一个条件。
SpaCy 通常将一个点(“.”)与单词分开,并将其作为标记。我想保留它,除非我有缩写:“et al.”,在这种情况下,我想作为标记返回:['et','al.'],而不将点视为另一个标记, 就在这种情况下。
我一直在查看信息,在我看来,解决方案与下面的脚本有关,但是,我不知道我可以在哪里放置这个条件。
import spacy
from spacy.lang.char_classes import ALPHA_LOWER, ALPHA_UPPER, PUNCT
from spacy.lang.char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_ICONS
from spacy.lang.char_classes import CURRENCY, UNITS, ALPHA_LOWER, CONCAT_QUOTES, PUNCT, ALPHA_UPPER
from spacy.util import compile_suffix_regex
# Default tokenizer
nlp = spacy.load("pt_core_news_sm")
doc = nlp("Esse é um exemplo. Ramon et al., kcal.")
print([t.text for t in doc]) # ['Esse', 'é', 'um', 'exemplo', '.', 'Ramon', 'et', 'al', '.', ',', 'kcal', '.']
# Modify tokenizer suffix patterns
suffixes = (
LIST_PUNCT
+ LIST_ELLIPSES
+ LIST_QUOTES
+ LIST_ICONS
+ ["'s", "'S", "’s", "’S", "—", "–"]
+ [
r"(?<=[0-9])\+",
r"(?<=°[FfCcKk])\.",
r"(?<=[0-9])(?:{c})".format(c=CURRENCY),
r"(?<=[0-9])(?:{u})".format(u=UNITS),
r"(?<=[0-9{al}{e}{p}(?:{q})])\.".format(
al=ALPHA_LOWER, e=r"%²\-\+", q=CONCAT_QUOTES, p=PUNCT
),
r"(?<=[{au}][{au}])\.".format(au=ALPHA_UPPER),
]
)
suffix_regex = compile_suffix_regex(suffixes)
nlp.tokenizer.suffix_search = suffix_regex.search
doc = nlp("Esse é um exemplo. Ramon et al., kcal.")
print([t.text for t in doc]) # Expected -> ['Esse', 'é', 'um', 'exemplo', '.', 'Ramon', 'et', 'al.', ',', 'kcal', '.']
【问题讨论】:
-
官方文档中有一个关于自定义分词器的部分,它没有解决你的问题吗? spacy.io/usage/linguistic-features#native-tokenizers
标签: python nlp tokenize spacy-3