【发布时间】:2019-03-15 00:04:26
【问题描述】:
我正在尝试正确拆分单词以适合我的语料库。我已经在使用this approach 来修复连字符的单词,我似乎无法弄清楚如何使用撇号来保留单词,例如:不能,不会,不要,他的,等等一起作为一个象征在spacy。
更具体地说,我正在搜索如何为荷兰语单词执行此操作:zo'n、auto's、massa's、 等,但这个问题应该与语言无关。
我有以下分词器:
def custom_tokenizer(nlp):
prefix_re = compile_prefix_regex(nlp.Defaults.prefixes)
suffix_re = compile_suffix_regex(nlp.Defaults.suffixes)
infix_re = re.compile(r'''[.\,\?\:\;\...\‘\’\'\`\“\”\"\'~]''')
return Tokenizer(nlp.vocab, prefix_search=prefix_re.search,
suffix_search=suffix_re.search,
infix_finditer=infix_re.finditer,
token_match=None)
nlp = spacy.load('nl_core_news_sm')
nlp.tokenizer = custom_tokenizer(nlp)
有了这个,我得到的令牌是:
'Mijn','eigen','huis','staat','zo',"'",'n','zes','meter','onder', 'het','wateroppervlak','van','de','Noordzee','.'
...但我期望的令牌应该是:
'Mijn','eigen','huis','staat',"zo'n",'zes','meter','onder','het','wateroppervlak ','van','de','Noordzee','.'
我知道可以添加自定义规则,例如:
case = [{ORTH: "zo"}, {ORTH: "'n", LEMMA: "een"}]
tokenizer.add_special_case("zo'n",case)
但我正在寻找更通用的解决方案。
我已经尝试从另一个线程编辑infix_re 正则表达式,但我似乎对这个问题没有任何影响。我可以做任何设置或更改来解决此问题吗?
【问题讨论】:
标签: python regex nlp tokenize spacy