合并跨度后合并句子
Merging sentences after merging spans
假设我有一句话
'Using Data.Frames allows you to handle data efficiently'
使用 spacy 这个例子将被分成两个句子:
>> example = 'Using Data.Frames allows you to handle data efficiently'
>> doc = nlp(example)
>> list(doc.sents)
[Using Data., Frames allows you to handle data efficiently]
按照recommendation from this other question我可以通过跨度合并部分解决这个问题,像这样
>> doc[1:4].merge()
>> doc[1]
Data.Frame
但是这不会合并之前拆分的句子
>>> list(doc.sents)
[Using Data.Frames, allows you to handle data efficiently]
在应用一组合并操作后重新处理句子标记化的最佳方法是什么?这对我很重要,因为之后我需要导航解析树。
P.S。在我的实际应用程序中,我需要使用正则表达式来识别这种特殊情况的缩写(大约 [A-Za-z0-9-:]+.[A-Z][a-z0-9A-Z]+
),因此我不能使用 spacy 的 add_special_case。也许我可以使用自定义分词器,但我不确定该怎么做。
- Python 版本: 2.7.12
- 平台: Linux-4.4.0-21-generic-x86_64-with-LinuxMint-18-sarah
- spaCy 版本: 2.0.5
我设法通过基于自定义分词器的方法解决了我的问题,这意味着句子从一开始就不会被打断,避免了以后需要合并它。
根据文档中的信息 here,当您创建自定义分词器时,token_match 参数可用于匹配永远不应被破坏的模式。像这样,你可以设置:
def custom_en_tokenizer(nlp):
pattern_re = re.compile('<some regex martching a pattern that is broken>')
return spacy.tokenizer.Tokenizer(nlp.vocab,
English.Defaults.tokenizer_exceptions,
English.Defaults.prefixes,
English.Defaults.suffixes,
English.Defaults.infixes,
token_match=pattern_re.match)
nlp = spacy.load('en')
nlp.tokenizer = custom_en_tokenizer(nlp)
假设我有一句话
'Using Data.Frames allows you to handle data efficiently'
使用 spacy 这个例子将被分成两个句子:
>> example = 'Using Data.Frames allows you to handle data efficiently'
>> doc = nlp(example)
>> list(doc.sents)
[Using Data., Frames allows you to handle data efficiently]
按照recommendation from this other question我可以通过跨度合并部分解决这个问题,像这样
>> doc[1:4].merge()
>> doc[1]
Data.Frame
但是这不会合并之前拆分的句子
>>> list(doc.sents)
[Using Data.Frames, allows you to handle data efficiently]
在应用一组合并操作后重新处理句子标记化的最佳方法是什么?这对我很重要,因为之后我需要导航解析树。
P.S。在我的实际应用程序中,我需要使用正则表达式来识别这种特殊情况的缩写(大约 [A-Za-z0-9-:]+.[A-Z][a-z0-9A-Z]+
),因此我不能使用 spacy 的 add_special_case。也许我可以使用自定义分词器,但我不确定该怎么做。
- Python 版本: 2.7.12
- 平台: Linux-4.4.0-21-generic-x86_64-with-LinuxMint-18-sarah
- spaCy 版本: 2.0.5
我设法通过基于自定义分词器的方法解决了我的问题,这意味着句子从一开始就不会被打断,避免了以后需要合并它。
根据文档中的信息 here,当您创建自定义分词器时,token_match 参数可用于匹配永远不应被破坏的模式。像这样,你可以设置:
def custom_en_tokenizer(nlp):
pattern_re = re.compile('<some regex martching a pattern that is broken>')
return spacy.tokenizer.Tokenizer(nlp.vocab,
English.Defaults.tokenizer_exceptions,
English.Defaults.prefixes,
English.Defaults.suffixes,
English.Defaults.infixes,
token_match=pattern_re.match)
nlp = spacy.load('en')
nlp.tokenizer = custom_en_tokenizer(nlp)