【问题标题】:spacy tokenize apostrophespacy 标记撇号
【发布时间】: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


    【解决方案1】:

    最近在spaCy 中进行了一项工作,以修复这些类型的荷兰语词汇形式。今天的 Pull Request 中的更多信息:https://github.com/explosion/spaCy/pull/3409

    更具体地说,nl/punctuation.py (https://github.com/explosion/spaCy/pull/3409/files#diff-84f02ed25ff9e44641672ca0ba5c1839) 展示了如何通过更改后缀来解决此问题:

    【讨论】:

    • 所以一行总结就是“手动从suffix_re中删除不需要的后缀,重新编译并修补tokenizer”(在spacy 2.x中)
    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2010-09-30
    • 2016-03-10
    • 1970-01-01
    相关资源
    最近更新 更多