Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅使用“空白”规则的Spacy标记器_Python_Python 3.x_Nlp_Spacy - Fatal编程技术网

Python 仅使用“空白”规则的Spacy标记器

Python 仅使用“空白”规则的Spacy标记器,python,python-3.x,nlp,spacy,Python,Python 3.x,Nlp,Spacy,我想知道spacy标记器是否只能使用空格规则标记单词。 例如: sentence= "(c/o Oxford University )" 通常,使用以下空间配置: nlp = spacy.load("en_core_news_sm") doc = nlp(sentence) for token in doc: print(token) 结果将是: ( c / o Oxford University ) 相反,我希望使用spacy获

我想知道spacy标记器是否只能使用空格规则标记单词。 例如:

sentence= "(c/o Oxford University )"
通常,使用以下空间配置:

nlp = spacy.load("en_core_news_sm")
doc = nlp(sentence)
for token in doc:
   print(token)
结果将是:

 (
 c
 /
 o
 Oxford
 University
 )
相反,我希望使用spacy获得如下输出:

(c/o 
Oxford 
University
)

使用spacy是否可能获得这样的结果?

您可以在spacy文档中找到这个问题的解决方案:。简而言之,您创建一个函数,该函数接受字符串文本并返回一个Doc对象,然后将该可调用函数分配给nlp.tokenizer:


您可以在spaCy文档中找到这个问题的解决方案:。简而言之,您创建一个函数,该函数接受字符串文本并返回一个Doc对象,然后将该可调用函数分配给nlp.tokenizer:

让我们使用自定义的token\u match regex更改nlp.tokenizer:

您可以通过添加自定义后缀、前缀和中缀规则来进一步调整标记器

另一种更细粒度的方法是找出它的令牌为何像nlp.tokenizer.explain一样被拆分:

您会发现拆分是由于特殊规则造成的:

可以对其进行更新,以将其从以下异常中删除:

exceptions = nlp.Defaults.tokenizer_exceptions
filtered_exceptions = {k:v for k,v in exceptions.items() if k!="it's"}
nlp.tokenizer = Tokenizer(nlp.vocab, rules = filtered_exceptions)
[tok for tok in nlp(text)]
或者删除撇号上的拆分:

filtered_exceptions = {k:v for k,v in exceptions.items() if "'" not in k}
nlp.tokenizer = Tokenizer(nlp.vocab, rules = filtered_exceptions)
[tok for tok in nlp(text)]
请注意标记上附加的点,这是由于未指定后缀规则造成的。

让我们使用自定义的with token\u match regex更改nlp.tokenizer:

您可以通过添加自定义后缀、前缀和中缀规则来进一步调整标记器

另一种更细粒度的方法是找出它的令牌为何像nlp.tokenizer.explain一样被拆分:

您会发现拆分是由于特殊规则造成的:

可以对其进行更新,以将其从以下异常中删除:

exceptions = nlp.Defaults.tokenizer_exceptions
filtered_exceptions = {k:v for k,v in exceptions.items() if k!="it's"}
nlp.tokenizer = Tokenizer(nlp.vocab, rules = filtered_exceptions)
[tok for tok in nlp(text)]
或者删除撇号上的拆分:

filtered_exceptions = {k:v for k,v in exceptions.items() if "'" not in k}
nlp.tokenizer = Tokenizer(nlp.vocab, rules = filtered_exceptions)
[tok for tok in nlp(text)]
请注意标记上的点,这是由于未指定后缀规则造成的。

SENTURE.split,不需要空间。@DYZ不幸的是SENTURE.split不提供任何NLP信息,如nlpsentence dosentence.split,不需要空间。@DYZ不幸的是SENTURE.split不提供任何NLP信息,如nlpsentence do
[('TOKEN', 'This'),
 ('TOKEN', 'is'),
 ('SPECIAL-1', 'it'),
 ('SPECIAL-2', "'s"),
 ('SUFFIX', '.'),
 ('SPECIAL-1', 'I'),
 ('SPECIAL-2', "'m"),
 ('TOKEN', 'fine')]
exceptions = nlp.Defaults.tokenizer_exceptions
filtered_exceptions = {k:v for k,v in exceptions.items() if k!="it's"}
nlp.tokenizer = Tokenizer(nlp.vocab, rules = filtered_exceptions)
[tok for tok in nlp(text)]
[This, is, it's., I, 'm, fine]
filtered_exceptions = {k:v for k,v in exceptions.items() if "'" not in k}
nlp.tokenizer = Tokenizer(nlp.vocab, rules = filtered_exceptions)
[tok for tok in nlp(text)]
[This, is, it's., I'm, fine]